我在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/

10-11 17:45