jenkins判断手动触发和定时触发(pipeline)

一、系统环境:

操作系统: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"
                    }
                }
            }   
        }
    }
}

注: 

以上为本人实际搭建过程中的经验总结,如果有什么问题,可以在评论区留言,大家一起探讨进步!

猜你喜欢

转载自blog.csdn.net/tiny_du/article/details/120739270