【问题标题】:Multiple parallel stages, jenkins checks out source on every stage多个并行阶段,詹金斯在每个阶段检查源代码
【发布时间】:2020-08-26 07:55:07
【问题描述】:

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

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

我在 stage 1 运行 yarn install,在 stage 2 运行 yarn build,在 stage 3 我有 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 阶段时,显然工作区被清理了,所以没有什么可以运行包

【问题讨论】:

  • AFAIK 只有在调用 checkout/git 步骤时才会发生结帐。你能提供你的管道代码和控制台日志输出吗?
  • 能否分享流水线脚本,默认情况下,Jenkins Pipeline 只检查 SCM 1 次。
  • 据我了解,根据您设置工作的方式,您无法确定特定阶段/步骤是否在同一工作区中运行。我在声明性管道中遇到了类似的问题,我尝试并行化一些测试和代码分析,但如果没有代码,我认为很难得到一个好的答案......
  • 我已经更新了这个问题。谢谢大家的快速回复。

标签: jenkins jenkins-pipeline


【解决方案1】:

事实证明,我需要使用 -

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

跳过默认结帐。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多