pipeline 分为脚本式和声明式,相比于脚本式声明式更主流更强大一些。pipeline 自身有语法语句外还支持groovy 语法,groovy 是一个类似java 语言,更简洁,有各种数据结构,函数,流程控制语句以供使用。
Jenkins是使用Java实现的,所以在很早的时候就引入了groovy作为DSL,管理员可以使用groovy来实现一些自动化和高级的管理功能。因为groovy引擎已经集成到Jenkins,所以在pipeline一开始很自然就使用groovy来编写Jenkinsfile。但是groovy毕竟是一种语言,对于没有太多编程经验的小白这个学习曲线有点太陡峭。这个时候声明式的pipeline就出现了
声明式pipeline
pipeline { //所有的声明式Pipeline都必须包含 pipeline块中
agent any //指定了流水线的执行节点(none 没有指定agent的时候默认。label 在指定标签上的节点上运行Pipeline。node 允许额外的选项)
//其他的一些指令
environment //指定一个键值对序列,该序列将被定义为所有步骤的环境变量,或者是特定于阶段的步骤,这取决于environment 指令在流水线的位置
//该指令支持一个特殊的方法 credentials() ,该方法可用于在Jenkins环境中通过标识符访问预定义的凭证。对于类型为 "Secret Text"的凭证,
// credentials() 将确保指定的环境变量包含秘密文本内容。
options //允许从流水线内部配置特定于流水线的选项。 流水线提供了许多这样的选项, 比如buildDiscarder,但也可以由插件提供, 比如 timestamps。
triggers //触发器,有很多种,比如定时,webhook 等等
tool //获取通过自动安装或手动放置工具的环境变量。支持maven/jdk/gradle。工具的名称必须在系统设置->全局工具配置中定义
input //用户在执行各个阶段的时候,提供的一个交互方法,例如由人工确认是否继续进行。
when //允许流水线根据给定的条件决定是否执行阶段。必须包含至少一个条件。 如果when 指令包含多个条件, 所有的子条件必须返回True,
//阶段才能执行。这与子条件在 allOf 条件下嵌套的情况相同。when 的条件可以使environment 或者分支等。
parameters //就是参数化构建功能,有字符串、布尔值、多选等等web 界面存在的都可在此处相应方式实现
parallel //声明式流水线的阶段可以在他们内部声明多隔嵌套阶段, 它们将并行执行。
stages { //stages 里面可以定义多个stage是发版的主要操作区域
stage('Example Build') {
steps { //stage 里面必须有steps{}里面可以通过 sh "xxx" 执行shell语句等操作是实际执行的操作步骤
echo 'Hello World'
sh "service xxx stop"
}
}
stage('Example Deploy') {
when {
branch 'production'
environment name: 'DEPLOY_TO', value: 'production'
}
steps {
echo 'Deploying'
script { //声明式不支持一些shell 语法,可以通过script{} 嵌入脚本式里面的一些语法例如for 循环、if 语句等
def browsers = ['chrome', 'firefox']
for (int i = 0; i < browsers.size(); ++i) {
echo "Testing the ${browsers[i]} browser"
}
}
}
post { //post是发版后的一些操作,根据发版结果做一些操作,主要条件有always/changed/failure/success
always {
echo 'I will always say Hello again!'
}
}