【发布时间】: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'
}
}
}
}
只是为了提供更多细节 - 有
- 结帐来源
- 测试(并行)
- 包(并行)
- 发布(并行)
每个阶段都是针对不同的环境定义的。问题是在运行package 阶段时,显然工作区被清理了,所以没有什么可以运行包
【问题讨论】:
-
AFAIK 只有在调用
checkout/git步骤时才会发生结帐。你能提供你的管道代码和控制台日志输出吗? -
能否分享流水线脚本,默认情况下,Jenkins Pipeline 只检查 SCM 1 次。
-
据我了解,根据您设置工作的方式,您无法确定特定阶段/步骤是否在同一工作区中运行。我在声明性管道中遇到了类似的问题,我尝试并行化一些测试和代码分析,但如果没有代码,我认为很难得到一个好的答案......
-
我已经更新了这个问题。谢谢大家的快速回复。