在声明性Jenkins管道中,我需要启动作业B,获取其build_number,以便稍后可以调用另一个作业,该作业引用该特定版本中的工件。
从作业(通过管道触发)将参数/结果返回到同一管道,看起来可以在较旧的groovy Jenkinsfiles中使用,但是新的声明式语法不允许我基于“构建作业”步骤定义变量。
stage ('Provision system testbed') {
steps {
build job: 'Build_Testbed', parameters: [
string(name: 'TOPOLOGY', value: 'flat')
]
**// How to we get the build_number from above?**
}
}
stage ('System tests') {
steps {
sh """
bundle exec rake spec:system || true
"""
step([$class: 'JUnitResultArchiver', testResults: 'results/*.xml'])
}
}
stage ('Destroy system testbed') {
steps {
build job: 'Destroy_Testbed', parameters: [
string(name: 'BUILD_SELECTOR', value: '<SpecificBuildSelector plugin="[email protected]"> <buildNumber>**714**</buildNumber></SpecificBuildSelector>')
]
}
}
当然,我也欢迎完全替代的解决方案
解:
stage ('Provision system testbed') {
steps {
script {
def setupResult = build job: 'Build_Testbed', parameters: [
string(name: 'TOPOLOGY', value: 'flat')
]
def systest_build_number = setupResult.getNumber()
// Navigate to jenkins > Manage jenkins > In-process Script Approval
// staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object java.lang.String java.lang.Object
env['setup_build_number'] = setupResult.getNumber()
}
}
}
stage ('System tests') {
steps {
sh """
bundle exec rake spec:system || true
"""
step([$class: 'JUnitResultArchiver', testResults: 'results/*.xml'])
}
}
stage ('Destroy system testbed') {
steps {
build job: 'Destroy_Testbed', parameters: [
string(name: 'BUILD_SELECTOR', value: '<SpecificBuildSelector plugin="[email protected]"> <buildNumber>${env.setup_build_number}</buildNumber></SpecificBuildSelector>')
]
}
}
注意:需要在我的Jenkins服务器中通过Jenkins>管理jenkins>进程内脚本批准来批准脚本。
staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object java.lang.String java.lang.Object
看起来可以在较老的groovy Jenkinsfiles中使用
您可以使用该script
步骤来封装代码块,并且在此块内,声明性管道的行为基本上类似于脚本,因此仍可以使用所引用答案中描述的技术。
欢迎来到stackoverflow。我希望你在这里过得愉快。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句