Jenkins声明性管道:使用条件步骤输入而不阻塞执行程序

时间:2018-05-18 10:32:03

标签: jenkins jenkins-declarative-pipeline

我试图让以下功能在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替换各种agent any指令,则输出可用,但执行器在第3阶段被阻止等待用户输入。如果我尝试组合1& 2进入一个阶段,然后我失去了仅在master上有条件地运行某些步骤的能力。

有没有办法实现我正在寻找的所有行为?

1 个答案:

答案 0 :(得分:1)

您需要在第一步结束时使用stash命令,然后在需要文件时使用unstash

我认为这些可在snippet generator

中找到

根据documentation

  

保存一组文件,以便稍后在同一版本中使用,通常在   另一个节点/工作区。存储文件不可用   通常在构建结束时被丢弃。请注意藏匿   和unstash步骤设计用于小文件。对于大   数据传输,使用外部工作区管理器插件,或使用   外部存储库管理器,如Nexus或Artifactory