在Jenkinsfile中结帐scm

时间:2018-10-04 01:36:45

标签: jenkins jenkins-pipeline

我在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?换句话说,上面的脚本是否保证可以在此构建的任何阶段涉及的每个节点上检出存储库?

非常感谢。

1 个答案:

答案 0 :(得分:3)

第一步node将分配任何构建代理并签出源代码。 稍后,将分配其他节点,我可以向您保证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'
        }
    }
}