我们正在为Jenkinsfile使用Script Pipeline语法,它有很多阶段定义来构建和部署我们的代码.我有一个用例,如果我正在进行完整构建,我想运行所有阶段,但如果我需要执行一些AWS路由,则只运行一个特定阶段.我知道我可以使用if(< expression>)跳过一个阶段或运行一个阶段.问题是我不想将条件应用到我的Jenkinsfile中的每个阶段.
在新的Declarative Pipeline语法中,使用stage..when选项很容易实现.我们的基础结构中使用了很多自定义Groovy辅助函数,所以此时我无法从Script Pipeline语法切换到新的Declarative Pipeline语法.我最终在现有的Jenkins文件上做的是这样的..
原来jenkins文件
stage('Checkout Code') {} stage('Build') {} parallel( stage('Sonar Analysis') {} stage('CLM Analysis') {} stage('Security Analysis') {} ) stage('Build Docker Image') {} ... ... stage('QA Deploy') {} stage('QA Routing') {} ... ... stage('Prod Deploy') {} stage('Prod Routing') {}
变成
if (fullDeploy){ stage('Full Build') { stage('Checkout Code') {} stage('Build') {} parallel( stage('Sonar Analysis') {} stage('CLM Analysis') {} stage('Security Analysis') {} ) stage('Build Docker Image') {} ... ... stage('QA Deploy') {} stage('QA Routing') {} ... ... stage('Prod Deploy') {} stage('Prod Routing') {} } } if (routeOnly){ stage('Prod Routing') {} }
这让我觉得有点hacky,我在Jenkins文档上找不到任何提供这种方法的好方法.
有没有人有更好的方法可以加入这个?