在工作流脚本中使用 Jenkins Java API

Using the Jenkins Java API in a Workflow Script

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

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

目前我想做的是获取工作区路径,目前我已经做到了

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

但这似乎是一个死胡同,您实际上无法使用这些对象做任何有用的事情。

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

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

您可以使用标准工作流程步骤 pwd() 获取工作区路径,而无需使用 Jenkins APIs。

就其他情况而言,没有特定的文档总结您可以从工作流脚本中使用 Jenkins APIs 做什么,因为它只是 Jenkins APIs 允许的任何内容你一般做(见Javadoc)。您需要注意的两个注意事项:

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

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