【问题标题】:checkout scm in Jenkinsfile在 Jenkinsfile 中签出 scm
【发布时间】:2018-10-04 01:36:45
【问题描述】:

我在 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。这是否意味着checkout scm 将在每个后续的构建节点(windows/apple)上被调用,然后再进行并行步骤?换句话说,上面的脚本是否保证将在此构建的任何阶段涉及的每个节点上签出存储库?

非常感谢。

【问题讨论】:

  • 你为什么不试试呢?
  • 构建不会持续失败,它会间歇性地失败。
  • 当然,它适用于已签出源的代理。如果该代理具有标签“apple”并且在此构建或以后的构建中重新使用(因为您没有清理工作区),那么代码仍然位于磁盘上。

标签: jenkins jenkins-pipeline


【解决方案1】:

第一个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'
        }
    }
}

【讨论】:

  • stash 是否将文件从代理传输到主控?
  • 不,它将它们从调用stash的节点转移到主节点。 unstash 将其从主节点传输回调用它的节点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 2011-09-18
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多