Jenkins:来自Jenkinsfile的管道中的env为null

时间:2017-12-22 19:50:10

标签: jenkins jenkins-pipeline

请帮忙。 env为空。

Jenkinsfile:

node {
  println "Your ENV:"
  println env.dump
  println "Your params:"
  println params.dump
}

詹金斯输出:

[Pipeline] properties
[Pipeline] node
Running on foobarquux in c:\workspace\123abc
[Pipeline] {
[Pipeline] echo
Your ENV:
[Pipeline] echo
null
[Pipeline] echo
Your params:
[Pipeline] echo
null

我希望我的环境变量不会为null。我希望env.dump不会为空,并且在执行Your ENV:时会看到println env.dump以外的内容。

在阅读了@mkobit的非常有用的评论后,我意识到我需要dump的括号,即使有了它们,Jenkins也会抛出一个安全例外。

3 个答案:

答案 0 :(得分:1)

Groovy的可选括号requires at least one parameter,它与Ruby不同。

  

如果至少有一个参数并且没有歧义,方法调用可以省略括号:

因此,要拨打dump() method,您需要function FindReplaceWSHT(){ replaceInSheet("Elements",'aa','ZZZ'); } function replaceInSheet(shtName, to_replace, replace_with) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(shtName); //get the current data range values as an array var values = sheet.getDataRange().getValues(); //loop over the rows in the array for(var row in values){ //use Array.map to execute a replace call on each of the cells in the row. var replaced_values = values[row].map(function(original_value){ return original_value.toString().replace(to_replace,replace_with); }); //replace the original row values with the replaced values values[row] = replaced_values; } //write the updated values to the sheet sheet.getDataRange().setValues(values); } env.dump()。但是,此方法不会列入白名单,您将获得安全性异常(如果您在沙箱中运行或使用任何类型的Jenkins安全性),因为这将打印出对象的所有字段。

答案 1 :(得分:0)

作为补充,我刚刚学到了一些花了我几天时间的东西,希望能饶恕别人。

${WORKSPACE}仅在代理(节点)中使用时有效!否则它将显示为null

我在管道的顶部有agent none,因为我有几个input步骤,我不想使用重量级的执行程序。我正在使用environment {}的顶级${WORKSPACE}块中设置环境变量。对于我一生,我不知道为什么将其设置为null。其他一些线程提到了代理程序上的工作区,因此我将该定义移到了代理程序上的一个步骤中,瞧瞧,当您在代理程序上运行时使用WORKSPACE设置var时,一切都能按预期进行。

此处的侧边栏是,如果您使用的是顶级agent none,则environment以及大概其他的pre-stages块不会在代理中运行。因此,任何依赖代理的行为都会异常。

答案 2 :(得分:-1)

试试这个

node {
  println "Your ENV:"
  println ${env.dump}
  println "Your params:"
  println ${params.dump}
}