Sid*_*d.R 17 jenkins jenkins-pipeline
Jenkins管道:我有一个管道p1,可以触发工作j1,然后找工作j2.我想要一些由管道设置j1并传递给它的参数.如何使用Jenkins管道插件实现此功能?提前致谢j2p1
tob*_*i42 17
它可以使用"env"完成.如果您设法j1将其信息添加到构建中env.
如果j1是管道你可以env.MYKEY=MYVALUE.对于自由式作业,它应该使用EnvInject插件(没试过).在p1那么你会得到与你的信息进行构建结果的地图.
所以,如果你做了p1一些事情:
// somewhere in your pipeline, i.e. p1:
def j1BuildResult = build job: 'J1'
def j1EnvVariables = j1BuildResult.getBuildVariables();
Run Code Online (Sandbox Code Playgroud)
然后j1EnvVariables将是包含您设置的变量的地图j1.
PS:如何将该信息传递给参数p2,例如这里涉及.
我有类似的问题.我必须通过让作业J1,J2创建属性文件然后使用主管道P1中的"复制工件"获取这些文件来完成它.然后将属性转换为Java属性(可能需要在Jenkins中进行一些脚本批准).如果Jenkins管道可以直接在代码中返回参数(也许还有其他方法可以做到这一点,但我不知道),这将是很好的.从构建步骤返回的是RunWrapper,它似乎没有办法返回我可以看到的自定义结果(除非我们使用了一些现有属性,如构建描述).
所以我有这样的事情:
// Pipeline code in P1
// Build J1 and get result.
def j1BuildResult = build job: 'J1', parameters: [string(name: 'J1_PROP', value: 'FOO')], propagate: true, wait: true
// Get results of J1
step([$class : 'CopyArtifact', filter: 'j1-result.properties',
fingerprintArtifacts: true,
flatten : true,
projectName : 'J1',
selector : [$class : 'SpecificBuildSelector', buildNumber: buildResult.getNumber().toString()]])
// Load J1 properties (you may need to turn off sandbox or approve this in Jenkins)
Properties j1Props = new Properties()
j1Props.load(new StringReader(readFile('j1-result.properties')))
// Build J2
def j2BuildResult = build job: 'J2', parameters: [string(name: 'J2_PROP', value: j1Props.someProperty)], propagate: true, wait: true
// Get results of J2
step([$class : 'CopyArtifact', filter: 'j2-result.properties',
fingerprintArtifacts: true,
flatten : true,
projectName : 'J2',
selector : [$class : 'SpecificBuildSelector', buildNumber: buildResult.getNumber().toString()]])
// Load J2 properties (you may need to turn off sandbox or approve this in Jenkins)
Properties j2Props = new Properties()
j1Props.load(new StringReader(readFile('j2-result.properties')))
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式获取构建管道的结果
def myjob=build job: 'testy', propagate: true, wait: true, parameters: [string(name: 'ENV', value: 'jamshaid'), string(name: 'Repo', value: 'khalid')]
echo "${myjob.getResult()}"
Run Code Online (Sandbox Code Playgroud)
你可以构建参数与环境变量一起使用
def buildProperties = runWrapper.rawBuild.getEnvironment()
Run Code Online (Sandbox Code Playgroud)
这是一张非常棒的地图。可以通过以下方式接收目标参数
String someProperty = buildProperties.someProperty
Run Code Online (Sandbox Code Playgroud)
限制:需要method hudson.model.Run getEnvironment在“进程内脚本批准”中允许并在node闭包内调用此代码(因为rawBuild)。
我也尝试过,runWrapper.rawBuild.getAction(ParametersAction.class)但它需要对 Jenkinsfile 进行多次导入。
注意:runWrapper.getBuildVariables()对我来说什么都不返回。
| 归档时间: |
|
| 查看次数: |
26870 次 |
| 最近记录: |