在工作流脚本中使用 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
我正尝试在 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