我在Jenkinsfile中有以下高级脚本化管道:
stage('Generate') {
node {
checkout scm
}
parallel windows: {
node('windows') {
sh 'cmake . -Bbuild.windows -A x64'
}
},
macos: {
node('apple') {
sh '/usr/local/bin/cmake . -DPLATFORM="macos" -Bbuild.macos -GXcode'
}
},
ios: {
node('apple') {
sh '/usr/local/bin/cmake . -DPLATFORM="ios" -Bbuild.ios -GXcode'
}
}
}
请注意平行的windows/macos/ios节点之前的顶部
node
。这是否意味着在继续执行并行步骤之前,将在随后的每个建筑节点(windows/apple)上调用checkout scm
?换句话说,上面的脚本是否保证在此构建的任何阶段都将涉及到的每个节点上 check out 存储库?非常感谢。
最佳答案
第一步node
将分配任何构建代理并 checkout 源代码。
稍后,将分配其他节点,在这里我可以向您保证cmake
将失败,因为它与空目录一起工作。
您可以使用 stash
and unstash
复制构建(以及后续阶段)所需的文件:
stage('Generate') {
node {
checkout scm
stash 'source'
}
parallel windows: {
node('windows') {
unstash 'source'
sh 'cmake . -Bbuild.windows -A x64'
}
},
macos: {
node('apple') {
unstash 'source'
sh '/usr/local/bin/cmake . -DPLATFORM="macos" -Bbuild.macos -GXcode'
}
},
ios: {
node('apple') {
unstash 'source'
sh '/usr/local/bin/cmake . -DPLATFORM="ios" -Bbuild.ios -GXcode'
}
}
}
关于jenkins - 在Jenkinsfile中结帐scm,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52637777/