我正在尝试让以下功能在 Jenkins 的声明式管道语法中工作:
- 仅在
master
分支上有条件地执行某些阶段 input
要求用户确认以部署到过渡环境- 在等待确认时,它不会阻止执行者
这是我最终得到的:
pipeline {
agent none
stages {
stage('1. Compile') {
agent any
steps {
echo 'compile'
}
}
stage('2. Build & push Docker image') {
agent any
when {
branch 'master'
}
steps {
echo "build & push docker image"
}
}
stage('3. Deploy to stage') {
when {
branch 'master'
}
input {
message "Deploy to stage?"
ok "Deploy"
}
agent any
steps {
echo 'Deploy to stage'
}
}
}
}
问题是阶段 2 需要 1 的输出,但这在运行时不可用。如果我用全局agent any
替换各种agent
指令,则输出可用,但执行器在第 3 阶段等待用户输入时被阻止。如果我尝试将 1 和 2 合并为一个阶段,那么我就失去了仅在master
上有条件地运行某些步骤的能力。
有没有办法实现我正在寻找的所有行为?
您需要在第一步结束时使用stash
命令,然后在需要文件时unstash
我认为这些在代码片段生成器中可用
根据文档
保存一组文件以供以后在同一版本中使用,通常为 另一个节点/工作区。隐藏的文件在其他情况下不可用,并且 通常在构建结束时丢弃。请注意,藏匿处 取消存储步骤设计用于小文件。对于大型 数据传输,使用外部工作区管理器插件,或使用 外部存储库管理器,如 Nexus 或 Artifactory