4

我正在尝试从 Workflow groovy 脚本中利用 Jenkins Java。

我发现很难掌握我能做什么和不能做什么,是否有任何关于如何做到这一点的好资源。

目前我想做的是获得工作空间路径,我已经做到了

def jenkins = Jenkins.instance;
def build = jenkins.getItem(env.JOB_NAME).getBuild(env.BUILD_NUMBER)

但这似乎是一个死胡同,似乎没有任何有用的东西可以用这些对象实际做。

如果有人可以向我指出任何资源,举例说明可以像这样完成的有用的事情,或者帮助我解决获得工作空间路径的具体问题,那就太好了。

4

3 回答 3

6

您可以使用标准 Workflow 步骤pwd()来获取工作区路径,而无需使用任何 Jenkins API。

就其他情况而言,没有特定的文档总结您可以从 Workflow 脚本中使用 Jenkins API 做什么,因为它只是 Jenkins API 通常允许您做的任何事情(请参阅Javadoc)。您需要注意的两个警告:

  • 几乎所有这样的调用都会被 Groovy 沙箱拒绝(而且很多都不能安全地列入白名单)。这意味着除非您是管理员,否则您无法在安全的 Jenkins 安装中编写此类脚本。更多的
  • 大多数 API 对象不会是Serializable,这意味着您必须将它们的使用封装在标有@NonCPS注解的方法中。该方法可以作为参数并返回任何可序列化(或原始)类型。更多的
  • 目前不支持访问在本地工作区上下文中定义的 Jenkins 模型对象的方法。JENKINS-28385会有所帮助。同时,经常有解决方法;例如,如果您希望在块Node内使用node {},则可以使用Jenkins.instance.getNode(env.NODE_NAME).
于 2015-10-19T13:24:44.713 回答
0

这不能回答您的首要问题,但 env.WORKSPACE 将为您提供工作区的绝对路径:) 在工作流作业配置中打开 Snippet Generator,向下滚动,您将看到所有可用环境变量的列表。

于 2015-10-16T17:34:36.497 回答
0

如果您尝试获取工作区路径以读取某些文件,那么您确实应该使用 Job DSL 和readFileFromWorkspace(filePath). new File(filePath)如果您使用从站,则仅具有工作区路径并尝试读取文件可能无法正常工作。更多细节在这里 https://github.com/jenkinsci/job-dsl-plugin/wiki/Job-DSL-Commands

于 2015-10-20T13:31:20.697 回答