QQ截图20211214164535.png 流水线pipeline招式之声明式(前篇) 大家好,我们继续上一篇的话题,声明式流水线。如果你还没有,可以点击上方的链接。今天我们继续来说指令。下面我们开始

parameters参数

为流水线运行时设置项目相关的参数,就不用在UI界面上定义了,比较方便。另外要注意的是,这个指令只允许放在pipeline下面,不能放在stage中。

string 字符串类型的参数, 例如:

parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }

可以接受三个参数,name、defaultValue、description:

  • name:参数名
  • defaultValue:默认值
  • description:参数的描述信息

下面我们来看一个例子:

agent any
parameters {
    string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
}
stages {
    stage('Example') {
        steps {
            echo "Hello ${params.PERSON}"
        }
    }
}

这里要注意一个问题。如果是通过jenkins配置来增加参数的化,那么配置完毕就可以看到

image.png

image.png

但是如果用jenkinsfile里面配置,必须构建一遍以后才能显示

那么,除了string以外,还有什么参数呢,下面我们来一起看一下。

booleanParam 布尔参数, 例如:

parameters { 
    booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') 
}

text 多行文本类型,如果换行可以使用\n

parameters { 
    text(name: 'DEBUG_BUILD', defaultValue: 'One\nTwo\nThree\n', description: '') 
}

choice 选择参数类型,使用\n来分隔多个选项

parameters { 
    choice(name: 'DEBUG_BUILD', defaultValue: 'Dev\nTest\nProd\n', description: '') 
}

password类型

parameters { 
    password(name: 'DEBUG_BUILD', defaultValue: 'SECRET', description: '') 
}

当然我们也可以在parameters中使用多个参数类型比如:

parameters { 
    booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '')
    choice(name: 'DEBUG_BUILD', defaultValue: 'Dev\nTest\nProd\n',description: '') 
    text(name: 'DEBUG_BUILD', defaultValue: 'One\nTwo\nThree\n',description: '') 
}

trigger触发器

trigger触发器,定义一个时间,时间到了就会触发pipeline,在不考虑插件的情况下,一般有三种方式,cronpollSCMupstream

cron为定时执行,也就是,我们可以定一个时间,比如凌晨,自动更新一般项目,把项目代码更新为最新。他的写法也和我们平时配置Linux的定时任务相似

//cron 计划任务定期执行构建。
triggers { cron('H */4 * * 1-5') }

不过你也发现,还是有那么亿点点不一样,这个H又是什么意思。比如当半夜0点执行的时候(0 0 * * *) 这样会产生负载不均衡。H代表hash,就来解决这个问题的,如果我们配置成(H 0 * * **),这样代表0点0分,到0点59分任意一个时间点执行。所以我们可以下成下面的样子。

agent any
triggers {
    cron('H */4 * * 1-5')
}
stages {
    stage('Example') {
        steps {
            echo 'Hello World'
        }
    }
}

pollSCM为轮询代码仓库,也就是,指定时间轮询代码库,如果有变化就执行。这种情况其实用的不算太多。因为可以通过代码库来通知jenkins,比如GitLab通过钩子,在代码有变更的时候通知Jenkins来进行代码发布。关于GitLab来触发Jenkins的内容,会在后面集成其他服务的时候详细说明。

//pollSCM 与cron定义类似,但是由jenkins定期检测源码变化。
triggers { pollSCM('H */4 * * 1-5') }

upstream是由上游任务来触发

当A任务执行成功或者失败或者中止等情况的时候触发另外一个,或者另外多个任务

// job1和job2都是任务名,当任务成功是,触发构建job1和job2
triggers {
    upstream(upstreamProjects: 'job1, job2', threshold: hudson.model.Result.SUCCESS)
}

hudson.model.Result.SUCCESS是一个枚举值,它表示A任务什么状态触发其他任务。这个状态处理SUCCESS以外还有:

  • ABORTED:任务被手动中止
  • FAILURE:构建失败
  • UNSTABLE:存在一些错误,但是构建没有失败
  • NOT_BUILT:在多阶段构建时,前面阶段的问题导致后面阶段无法执行

注意,这里和parameters参数有点类似,需要手动构建一次以后,才会触发

tool构建工具

构建工具maven、ant、gradle,获取通过自动安装或手动放置工具的环境变量。支持maven/jdk/gradle。工具的名称必须在系统设置->全局工具配置中定义。

agent any
tools {
    maven 'apache-maven-3.0.1' 
}
stages {
    stage('Example') {
        steps {
            sh 'mvn --version'
        }
    }
}

举例 比如说,我在全局工具中配置了git

image.png

如果我想在jenkinsfile中使用这个git

stage("Build"){
            steps{
                timeout(time:5, unit: 'MINUTES'){
                    script{
                        println("运行构建")
                        gitHome = tool "git"
                        println(gitHome)
                    }
                }
            }
        }

输出

image.png

我们去取到变量就可以做很多操作,比如

stage("Build"){
            steps{
                timeout(time:5, unit: 'MINUTES'){
                    script{
                        println("运行构建")
                        gitHome = tool "git"
                        sh "${gitHome} checkout mastsr"
                    }
                }
            }
        }

input交互输入

input用户在执行各个阶段的时候,由人工确认是否继续进行。他的使用场景是,可以实现一个简单的审批过程,比如某个阶段需要某个人去点击确认后才可以部署。或者测试同事需要一个手动的测试,测试完成后继续部署。

agent any
stages {
    stage('Example') {
        input {
            message "Should we continue?"
            ok "Yes, we should."
            submitter "alice,bob"
            parameters {
                string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
            }
        }
        steps {
            echo "Hello, ${PERSON}, nice to meet you."
        }
    }
}

input 可以用流水线开发工具生成 image.png

image.png

image.png

生成流水线语法,赋值到jenkinsfile中

image.png

运行pipline,这里就有选项了

image.png

参数解释:

  • message 呈现给用户的提示信息。
  • id 可选,默认为stage名称。
  • ok 默认表单上的ok文本。
  • submitter 可选的,以逗号分隔的用户列表或允许提交的外部组名。默认允许任何用户。
  • submitterParameter 环境变量的可选名称。如果存在,用submitter 名称设置。
  • parameters 提示提交者提供的一个可选的参数列表。

下面我来总结一下,今天介绍了parameters、trigger、tool和input指令,需要注意的是他们各自运行位置,parameters和trigger可以运行在pipeline块中,tool和input可以放在stage步骤中。parameter如果在Jenkinsfile中定义,需要进行一次构建才能正常显示在流水线构建的页面,但是如果我们配置一个自由风格的流水线,那么在配置的时候添加变量是可以直接看到的。如果你还有什么问题,或者建议,可以给我留言。期待与你共同进步。