使用Jenkins评估Groovy脚本的EnvInject错误

时间:2017-05-18 22:25:30

标签: jenkins groovy environment-variables jenkins-plugins jenkins-pipeline

我们在Jenkins中有一个评估过的Groovy脚本: - ;

但是构建失败并出现错误[EnvInject] - [ERROR] - [EnvInject] - [ERROR] - 注入env变量作为构建换行时出现问题:null 17:04:06完成:失败。 另外,如何从Jenkins shell脚本调用变量以获取上次成功的构建日期。 -Thanks

def env = System.getenv()
def item = Jenkins.instance.getItem("")
 def  f=item.getLastFailedBuild()

 println f.getTime()

 def  ff=env['item.getLastSuccessfulBuild()]
  println ff.getTime().format("YYYY-MMM-dd HH:MM:SS")
  println ff.getTime().format("dd-MM-yyyy")

  def pa = new ParametersAction([new          StringParameterValue('PARAMETER_NAME', ff)]);

Thread.currentThread()。executable.addAction(PA) println'脚本完成了! \ N env variable

2 个答案:

答案 0 :(得分:1)

简单的答案是,在第7行,你没有收尾报价:

def ff=env['item.getLastSuccessfulBuild()]

但是,这不是你的最后一个问题:

  • 我认为你不想使用ff = env['item.getLastSuccessfulBuild()]']而只是一个简单的ff = item.getLastSuccessfulBuild()

  • 您需要包含以下导入行才能使用关联的类: import jenkins.model.Jenkins import hudson.model.ParametersAction import hudson.model.StringParameterValue

  • item = Jenkins.instance.getItem("Fastlane_Test")行在我的环境中无效,甚至取代了#34; Fastlane_Test"我有一份工作。
    我用item = Jenkins.instance.getItemByFullName("Fastlane_Test")替换了它。

  • 另外,为了安全起见,您应该进行测试以确保item

  • 最后,您是否因为某个原因错过了Thread.currentThread().executable.addAction(pa)行?您需要使用它将新参数添加到运行环境中。

以下代码应该是一个合理的起点,但请注意我已删除了行def env = System.getenv(),因为 env 并未在其他任何地方使用过稍后代码:

import jenkins.model.Jenkins
import hudson.model.ParametersAction
import hudson.model.StringParameterValue

def item = Jenkins.instance.getItemByFullName("Fastlane_Test")

if (item) {
    def  f=item.getLastFailedBuild()

    println f.getTime()

    def  ff=item.getLastSuccessfulBuild()
    println ff.getTime().format("YYYY-MMM-dd HH:MM:SS")
    println ff.getTime().format("dd-MM-yyyy")

    def pa = new ParametersAction([new StringParameterValue("LAST_GOOD", ff.getTime().toString())])
    Thread.currentThread().executable.addAction(pa)
}

希望你能找到这方面的帮助,虽然我发现自你发布问题已经有一段时间了。

亲切的问候

答案 1 :(得分:1)

谢谢Nick !!

我添加了以下"执行系统groovyscript"作为Jenkins工作的一部分,它起作用了: import jenkins.model.Jenkins

`。 def item = Jenkins.instance.getItem(" Job")

def  ff=item.getLastSuccessfulBuild()
println ff.getTime().format("yyyy-MM-dd")
def temp = ff.getTime().format("yyyy-MM-dd")
import hudson.model.*
def build = Thread.currentThread().executable
def pa = new ParametersAction([
new StringParameterValue("LAST_BUILD_DATE",temp)
])
 build.addAction(pa)`