首页 文章

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

提问于
浏览
2

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

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

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 回答

  • 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") 在我的环境中不起作用,甚至将"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

    谢谢尼克!

    我添加了以下“执行系统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)`
    

相关问题