jenkins - 多个并行阶段,詹金斯在每个阶段检查源代码
问题描述
我不确定这是 Jenkins 的默认行为。
我有三个并行阶段,每个阶段都假设前一阶段生成的文件存在于目录中。
我yarn install
在第 1阶段和第 2阶段跑步,在yarn build
第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
阶段时,很明显,工作区被清理了,所以没有什么可以运行包
解决方案
事实证明,我需要使用 -
options {
// This is key setting that enables one checkout across different stages
skipDefaultCheckout true
}
跳过默认结帐。
推荐阅读
- node.js - 我可以使用带有 node.js 的 draco 编码器压缩 glb 文件吗?
- c# - 使用递归的真值表
- python - 我们如何使用python遍历/指向html页面上的特定字符串
- scala - 在 databricks 上打包 scala 类(错误:未找到:值 dbutils)
- selenium-webdriver - 无法使用 getAttribute 方法和硒中的 Javascript 获取值
- angular - 需要一些关于通过 ngFor 进行数据迭代的帮助
- angular - 从子组件调用父方法不使用回调
- java - Volley 加载响应两次?
- python-3.x - 如何返回二叉搜索树的“in”、“pre”和“post”顺序列表?
- ios - 获取以美元为单位的 SKProduct 价格,而不是商店区域设置价格