我正在努力寻找一种基于管道运行期间生成的值为下游自由式项目填充参数的方法。
一个简化的示例可能最能说明问题:
//other stuff...
stage('Environment Creation') {
steps {
dir(path: "${MY_DIR}") {
powershell '''
$generatedProps = New-Instance @instancePropsSplat
$generatedProps | Export-Clixml -Depth 99 -Path .\\props.xml
'''
stash includes: 'props.xml', name: 'props'
}
}
}
//...later
stage('Cleanup') {
unstash props
// either pass props.xml
build job: 'EnvironmentCleanup', wait: false, parameters: [file: ???]
// or i could read the xml and then pass as a string
powershell '''
$props = Import-Clixml -Path props.xml
# how to get this out of this powershell script???
'''
}
我会在一个阶段中创建一些资源,然后在下一个阶段中,我想使用这些资源作为参数来开始一项工作。我可以根据需要修改下游作业,但我一直在努力寻找方法。
我尝试过的事情:
潜在路径:
那么,实现此目标的最佳方法是什么?我有一个在管道的一个阶段中生成的值,然后需要将该值(或包含该值的文件)作为参数传递给下游作业。
答案 0 :(得分:0)
所以这是我发现对我有用的方法。
在取决于上一阶段创建的文件的阶段,我将执行以下操作:
stage ("Environment Cleanup') {
unstash props
archiveArtifacts "props.xml"
build job: 'EnvironmentCleanup', parameters: [string(name: "PROJECT", value: "${JOB_NAME}")], wait: false
}
然后在我的依赖作业(自由式)中,我从触发的版本中复制“ props.xml”文件,并使用传入的作业名称作为参数,然后执行我的powershell将xml反序列化为一个对象,然后阅读我需要的属性。
我缺少的最后一个也是最令人困惑的部分是在options
中,这是我需要向下游作业授予复制权限的触发管道项目:
options {
copyArtifactPermission('EnvironmentCleanup') // or just '*' if you want
}
现在,它就像一个咒语一样工作,我将能够在遵循相同工作流程的所有管道中使用它。