在Jenkinsfile中结帐scm

sss*_*ver 2 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'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

非常感谢。

Ste*_*ing 5

第一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'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)