如何列出Jenkinsfile中已有的变量?

11

我想在Jenkinsfile中使用一些变量,比如仓库名称、分支名称、构建编号等,但是我没有找到任何相关的文档。

有没有办法打印它们,以便我可以看到可用的内容?如何做到?

我认为这可能与在Groovy对象中打印变量和值有关。

更新

this.binding.variables.each {k,v -> println "$k = $v"}

我尝试包含上面的代码,但现在执行失败了

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use field groovy.lang.Binding variables
    at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectField(StaticWhitelist.java:177)
5个回答

13

要查看环境变量,请尝试:

node {
  sh 'env | sort'
}

2
这不会显示在“script”块内定义的变量。 - Antonio Petricca
就像@AntonioPetricca一样,我很想知道您如何处理块中定义的非env(Groovy?)变量。特别是如果您正在使用声明性语法。 - robross0606

12

从您的Pipeline作业配置页面上,点击左侧导航栏中的“Pipeline Syntax”链接。它会打开,然后在其左侧导航栏中点击全局变量(Global variables)。它列出了许多可以在Pipeline脚本中使用的变量,包括一组可用于所有 Jenkins 项目的环境变量。

从 Groovy 中加载变量值的示例:

mail to: 'devops@acme.com',
    subject: "Job '${env.JOB_NAME}' (${env.BUILD_NUMBER}) is waiting for input",
    body: "Please go to ${env.BUILD_URL} and verify the build"

1
是的,那是官方文档。 - Jesse Glick
“全局变量部分”在哪里?我找不到它。 - 诺 铁
2
他们现在位于页面末尾的“Pipeline Syntax”下。 或者,您可以将/pipeline-syntax/globals附加到作业URL。 - gbonetti

4
在我们的案例中,我们使用以下方法来获取Jenkinsfile Groovy Pipeline中定义的所有变量:
groovyVars = [:] << getBinding().getVariables()
groovyVars.each  {k,v -> print "$k = $v"}

0

你试图在沙盒中执行你的管道,而你所做的操作被认为是不安全的,因为你试图获得低级别访问权限。

如果你不是这个Jenkins的管理员,那么你唯一的选择就是请求管理员授权——这就是沙盒的作用。

如果你在某个场合下进入了沙盒模式,只需在管道窗口下取消复选框即可。

如果你仍想保持沙盒模式并且你有管理员权限,请前往http://your_jenkins/scriptApproval/,找到你的函数访问请求并批准它。

如果以上三个选项都成功了,你将继续处理你脚本中的下一个错误。

groovy.lang.MissingFieldException: No such field: binding for class: WorkflowScript

祝好运!

更新:删除前导的“this”即可通过。


0

在这里,您可以找到直接在Pipeline中可用的全局变量,其中包括env中的环境变量。


请提供更详细的解决方案。 - Harun Diluka Heshan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接