Jenkins控制台脚本的不同结果

时间:2019-10-08 08:12:19

标签: jenkins groovy jenkins-pipeline jenkins-groovy

我试图在多分支流水线工作上获得最后一次成功构建,而只有我来了

def str = Jenkins.instance.getAllItems() .findAll{ it instanceof Job }.collect{ it.getLastSuccessfulBuild() }.findAll{ it } .sort{ it.timestamp }.grep(~/iOS.*/).last().toString()
println str.substring(str.lastIndexOf('/') + 1).replace('%2F', '_').replace(' #', '_')

但是不幸的是,这仅在Jenkins的脚本控制台中有效,并且在管道中抛出了不同的结果,您猜怎么可能是错的?

Jenkins版本2.176.1

我希望输出:

feature_INC-777_77

但是得到:

java.util.GregorianCalendar[time=1566913952011,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Moscow",offset=10800000,dstSavings=0,useDaylight=false,transitions=79,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=5,DAY_OF_MONTH=27,DAY_OF_YEAR=239,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=52,SECOND=32,MILLISECOND=11,ZONE_OFFSET=10800000,DST_OFFSET=0]

对于像这样的管道

import jenkins.model.*
import hudson.model.*
import jenkins.*
import hudson.*

def str = Jenkins.instance.getAllItems().findAll{ it instanceof Job }.collect{ it.getLastSuccessfulBuild() }.findAll{ it }.sort{it.timestamp}

println str

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这个漂亮的时髦+詹金斯组合...

将您的语句放入方法并在@NonCPS顶部添加注释

虽然我将难以获得清晰的完整解释,但简而言之-jenkins通过一组超级复杂的CPS转换(对我而言)将脚本化管道中的所有代码推送到https://github.com/cloudbees/groovy-cps/中,这可能或可能无法正确转换groovy API。经验法则-使用闭包时-使用@NonCPS批注,否则您将遇到大量难以调试的怪异错误。

更多信息:

https://wiki.jenkins.io/display/JENKINS/Pipeline+CPS+method+mismatches

https://github.com/jenkinsci/workflow-cps-plugin

What is the effect of @NonCPS in a Jenkins pipeline script

相关问题