作者:晞沂_364 | 来源:互联网 | 2023-07-23 01:30
一、系统环境:操作系统:centos7.8jenkins版本:2.289.3二、实现目的由于公司要规范流程化,需要流程审计,所以我们将之前的jenkins由自由风格模式切换到了pi
一、系统环境:
操作系统:centos7.8
jenkins版本:2.289.3
二、实现目的
由于公司要规范流程化,需要流程审计,所以我们将之前的jenkins由自由风格模式切换到了pipeline的模式,然后引入了input步骤,需要负责人确认后才能进行部署。input步骤可参见本人以下链接:
pipeline的input步骤的实现
然而在实现input之后,一些项目需要定时构建,定时构建的过程中也需要手动确认才能向下进行,这显然不是我们的初衷,我们想实现定时构建的时候,跳过input步骤,为此我查阅了很多的资料。终于找到了解决办法,本文将进行记录。
三、初步思路
想到了以下两种实现思路,记录一下:
1、配置一个参数,给个默认值,默认值的时候就跳过input这段,手动触发的时候就覆盖这个参数,执行input步骤
2、通过grovvy获取到构建的cause是不是timer,如果是timer就执行if判断跳过input步骤。
我决定采用第二种方法,判断一下构建原因是人手动构建还是timer构建。
那么问题来了,怎么获取到构建原因的变量呢,先网上找找一番。
四、网上实现方法
感觉网上的文章比较少,大多数都是通过一个变量进行的判断,BUILD_CAUSE的值可以判断本次触发是手动触发还是定时器触发
手动触发:MANUALTRIGGER 定时器触发:TIMERTRIGGER
我自己亲身实践了一下,发现并没有BUILD_CAUSE的这个变量,本人的环境是在pipeline中,发现根本没有这个变量,所以不适用。
五、具体实现方法
通过访问该currentBuild.getBuildCauses()
方法以获取构建原因数组。
下面附上具体方法:
pipeline {
agent any
stages {
stage('确认发布') {
environment {
CAUSE = "${currentBuild.getBuildCauses()[0].shortDescription}"
}
steps {
echo "Build caused by ${env.CAUSE}"
script{
echo "${env.CAUSE}"
if ( "${env.CAUSE}" == "Started by timer" ){
echo "1"
} else{
echo "2"
}
}
}
}
}
}
注:
以上为本人实际搭建过程中的经验总结,如果有什么问题,可以在评论区留言,大家一起探讨进步!