首页 > 解决方案 > 多个并行阶段,詹金斯在每个阶段检查源代码

问题描述

我不确定这是 Jenkins 的默认行为。

我有三个并行阶段,每个阶段都假设前一阶段生成的文件存在于目录中。

yarn install第 1阶段和第 2阶段跑步,在yarn build3 阶段我有。yarn package

每个阶段都尝试检查源并抱怨,例如,阶段 2 抱怨node_modules不存在,当我检查时我发现在阶段 1 工作区被重置后。

阶段完成后,有没有办法保留工作区中的目录/文件?

任何帮助是极大的赞赏。

编辑 1


pipeline {
    agent none

    options {
        skipDefaultCheckout true
    }

    environment {
        BRANCH_NAME = 'mater'
    }

    stages {

        stage ('Checkout source') {
            agent any
            steps {
                checkout([
                    $class: 'GitSCM',
                    branches: [[name: "${env.BRANCH_NAME}"]],
                    doGenerateSubmoduleConfigurations: false,
                    extensions: [],
                    submoduleCfg: [],
                    userRemoteConfigs: [[
                        credentialsId: '5db9bedc-fa88-4f64-9e6a-3e9a9d5c999f',
                        url: 'git@gitserver.io:acme/acme-repo.git'
                    ]]
                ])
            }
        }

        stage ('Test') {
            parallel {
                stage ('[Test] Mac') {
                    agent {
                        node {
                            label 'iMac'
                            customWorkspace "/Users/acme/workspace/acme-repo/nightly/${env.BRANCH_NAME}"
                        }
                    }
                    steps {
                        sh 'npm install yarn -g'
                        sh 'yarn install --network-timeout 1000000'
                        sh 'yarn build'
                        sh 'yarn test -u'
                    }
                }

                stage ('[Test] Linux') {
                    agent {
                        node {
                            label 'master'
                            customWorkspace "/var/lib/jenkins/acme/acme-repo/nightly/${env.BRANCH_NAME}"
                        }
                    }
                    steps {
                        sh 'sudo npm install yarn -g'
                        sh 'yarn install --network-timeout 1000000'
                        sh 'yarn build'
                        sh 'yarn test -u'                        
                    }
                }

                stage ('[Test] Windows') {
                    agent {
                        node {
                            label 'win'
                            customWorkspace "E:\\jenkins_agent\\acme\\nightly\\${env.BRANCH_NAME}"
                        }
                    }
                    steps {
                        bat 'npm install yarn -g'
                        bat 'yarn install --network-timeout 1000000'
                        bat 'yarn build'
                        bat 'yarn test -u'                        
                    }
                }                                    
            }
        }


        stage ('Package') {
            parallel {
                stage ('Mac') {
                    agent {
                        node {
                            label 'iMac'
                            customWorkspace "/Users/acme/workspace/acme-repo/nightly/${env.BRANCH_NAME}"
                        }
                    }
                    steps {
                        sh 'yarn package-mac'
                    }
                }

                stage ('Linux') {
                    agent {
                        node {
                            label 'master'
                            customWorkspace "/var/lib/jenkins/acme/acme-repo/nightly/${env.BRANCH_NAME}"
                        }
                    }
                    steps {
                        sh './node_modules/.bin/yarn package-linux'
                    }
                }

                stage ('Windows') {
                    agent {
                        node {
                            label 'win'
                            customWorkspace "E:\\jenkins_agent\\acme\\nightly\\${env.BRANCH_NAME}"
                        }
                    }
                    steps {
                        bat 'yarn package-win'
                    }
                }                                    
            }
        }

        stage ('Publish') {
            parallel {
                stage ('[Publish] Mac') {
                    agent {
                        node {
                            label 'iMac'
                            customWorkspace "/Users/acme/workspace/acme-repo/nightly/${env.BRANCH_NAME}"
                        }
                    }
                    steps {
                        sh 'yarn publish-mac'
                    }
                }

                stage ('[Publish] Linux') {
                    agent {
                        node {
                            label 'master'
                            customWorkspace "/var/lib/jenkins/acme/acme-repo/nightly/${env.BRANCH_NAME}"
                        }
                    }
                    steps {
                        sh './node_modules/.bin/yarn publish-linux'
                    }
                }

                stage ('[Publish] Windows') {
                    agent {
                        node {
                            label 'win'
                            customWorkspace "E:\\jenkins_agent\\acme\\nightly\\${env.BRANCH_NAME}"
                        }
                    }
                    steps {
                        bat 'yarn publish-win'
                    }
                }                                    
            }
        }        

        stage ('Tag & Push') {
            agent {
                node {
                    label 'master'
                    customWorkspace "/var/lib/jenkins/acme/acme-repo/nightly/${env.BRANCH_NAME}"
                }
            }
            steps {
                sh "yarn version --patch"
                sh 'git push git@gitserver.io:acme/acme-repo.git HEAD:$BRANCH_NAME'
            }
        }
    }
}

只是为了提供更多细节 - 有

  1. 结帐来源
  2. 测试(并行)
  3. 包(并行)
  4. 发布(并行)

这些阶段中的每一个都是针对不同的环境定义的。问题是在运行package阶段时,很明显,工作区被清理了,所以没有什么可以运行包

标签: jenkinsjenkins-pipeline

解决方案


事实证明,我需要使用 -

    options {
        // This is key setting that enables one checkout across different stages
        skipDefaultCheckout true
    } 

跳过默认结帐。


推荐阅读