首页 > 解决方案 > 在 Jenkinsfile 中签出 scm

问题描述

我在 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'
        }
    }
}

node请注意并行 windows/macos/ios 节点之前的顶部。这是否意味着checkout scm在执行并行步骤之前,将在每个后续构建节点(Windows/Apple)上调用?换句话说,上面的脚本是否保证将在此构建的任何阶段涉及的每个节点上签出存储库?

非常感谢。

标签: jenkinsjenkins-pipeline

解决方案


第一步node将分配任何构建代理并检查源代码。稍后,将分配额外的节点,我可以向你保证这cmake将失败,因为它适用于空目录。

您可以使用stashunstash复制构建(和后续阶段)所需的文件:

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'
        }
    }
}

推荐阅读