流水线pipeline招式之声明式(前篇)
大家好,我们继续上一篇的话题,声明式流水线。如果你还没有,可以点击上方的链接。今天我们继续来说指令。下面我们开始
parameters参数
为流水线运行时设置项目相关的参数,就不用在UI界面上定义了,比较方便。另外要注意的是,这个指令只允许放在pipeline下面,不能放在stage中。
string 字符串类型的参数, 例如:{ string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') } 可以接受三个参数,name、defaultValue、description:
- name:参数名
- defaultValue:默认值
- description:参数的描述信息
下面我们来看一个例子:any
parameters {
string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
}
stages {
stage('Example') {
steps {
echo "Hello ${params.PERSON}"
}
}
} 这里要注意一个问题。如果是通过jenkins配置来增加参数的化,那么配置完毕就可以看到
但是如果用jenkinsfile里面配置,必须构建一遍以后才能显示
那么,除了string以外,还有什么参数呢,下面我们来一起看一下。
booleanParam 布尔参数, 例如:{
booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '')
} text 多行文本类型,如果换行可以使用\n{
text(name: 'DEBUG_BUILD', defaultValue: 'One\nTwo\nThree\n', description: '')
} choice 选择参数类型,使用\n来分隔多个选项{
choice(name: 'DEBUG_BUILD', defaultValue: 'Dev\nTest\nProd\n', description: '')
} password类型{
password(name: 'DEBUG_BUILD', defaultValue: 'SECRET', description: '')
} 当然我们也可以在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,在不考虑插件的情况下,一般有三种方式,cron,pollSCM,upstream。
cron为定时执行,也就是,我们可以定一个时间,比如凌晨,自动更新一般项目,把项目代码更新为最新。他的写法也和我们平时配置Linux的定时任务相似//cron 计划任务定期执行构建。
triggers { cron('H */4 * * 1-5') } 不过你也发现,还是有那么亿点点不一样,这个H又是什么意思。比如当半夜0点执行的时候(0 0 <em> </em> *) 这样会产生负载不均衡。H代表hash,就来解决这个问题的,如果我们配置成(H 0 <em> </em> **),这样代表0点0分,到0点59分任意一个时间点执行。所以我们可以下成下面的样子。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。工具的名称必须在系统设置->全局工具配置中定义。any
tools {
maven 'apache-maven-3.0.1'
}
stages {
stage('Example') {
steps {
sh 'mvn --version'
}
}
} 举例 比如说,我在全局工具中配置了git
如果我想在jenkinsfile中使用这个git("Build"){
steps{
timeout(time:5, unit: 'MINUTES'){
script{
println("运行构建")
gitHome = tool "git"
println(gitHome)
}
}
}
} 输出
我们去取到变量就可以做很多操作,比如("Build"){
steps{
timeout(time:5, unit: 'MINUTES'){
script{
println("运行构建")
gitHome = tool "git"
sh "${gitHome} checkout mastsr"
}
}
}
} input交互输入
input用户在执行各个阶段的时候,由人工确认是否继续进行。他的使用场景是,可以实现一个简单的审批过程,比如某个阶段需要某个人去点击确认后才可以部署。或者测试同事需要一个手动的测试,测试完成后继续部署。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 可以用流水线开发工具生成
生成流水线语法,赋值到jenkinsfile中
运行pipline,这里就有选项了
参数解释:
- message 呈现给用户的提示信息。
- id 可选,默认为stage名称。
- ok 默认表单上的ok文本。
- submitter 可选的,以逗号分隔的用户列表或允许提交的外部组名。默认允许任何用户。
- submitterParameter 环境变量的可选名称。如果存在,用submitter 名称设置。
- parameters 提示提交者提供的一个可选的参数列表。
下面我来总结一下,今天介绍了parameters、trigger、tool和input指令,需要注意的是他们各自运行位置,parameters和trigger可以运行在pipeline块中,tool和input可以放在stage步骤中。parameter如果在Jenkinsfile中定义,需要进行一次构建才能正常显示在流水线构建的页面,但是如果我们配置一个自由风格的流水线,那么在配置的时候添加变量是可以直接看到的。如果你还有什么问题,或者建议,可以给我留言。期待与你共同进步。</div>
<div id="asideoffset"></div>
|