流⽔线基础-Pipeline
1. 认识Pipleine
1.1 Pipeline是什么?
Pipeline是Jenkins的核⼼功能,提供⼀组可扩展的⼯具。
通过Pipeline 的DSL语法可以完成从简单到复杂的交付流⽔线实现。
jenkins的Pipeline是通过Jenkinsfile(⽂本⽂件)来实现的。
这个⽂件可以定义Jenkins的执⾏步骤,例如检出代码。
1.2 Jenkinsfile
Jenkinsfile使⽤两种语法进⾏编写,分别是声明式和脚本式。
声明式和脚本式的流⽔线从根本上是不同的。
声明式是jenkins流⽔线更友好的特性。
无任脚本式的流⽔线语法,提供更丰富的语法特性。
声明式流⽔线使编写和读取流⽔线代码更容易设计。
玩游戏有什么好处1.3 为什么使⽤Pipeline?
本质上,jenkins是⼀个⾃动化引擎,它⽀持许多⾃动模式。流⽔线向Jenkins添加了⼀组强⼤的⼯具,⽀持⽤例、简单的持续集成到全⾯的持续交付流⽔线。通过对⼀系列的发布任务建⽴标准的模板,⽤户可以利⽤更多流⽔线的特性,⽐如:
代码化: 流⽔线是在代码中实现的,通常会存放到源代码控制,使团队具有编辑、审查和更新他们项⽬的交付流⽔线的能⼒。
耐⽤性:流⽔线可以从Jenkins的master节点重启后继续运⾏。
可暂停的:流⽔线可以由⼈功输⼊或批准继续执⾏流⽔线。
解决复杂发布:⽀持复杂的交付流程。例如循环、并⾏执⾏。
可扩展性:⽀持扩展DSL和其他插件集成。
构建⼀个可扩展是Jenkins的核⼼价值,流⽔线可以通过ShareLibrary的⽅式来扩展。下⾯是⼀个CD的场景实例
2.Pipeline概念
pipeline演⽰
来我们⼀起看下这⾥的配置,看下Jenkinsfile的组成及每个部分的功能含义。
使⽤agent{},指定node节点/workspace(定义好此流⽔线在某节点运⾏)
指定options{}运⾏选项(定义好此流⽔线运⾏时的⼀些选项,例如输出⽇志的时间)
指定stages{}(stages包含多个stage,stage包含steps。是流⽔线的每个步骤)
指定post{}(定义好此流⽔线运⾏成功或者失败后,根据状态做⼀些任务)
pipeline{
//指定运⾏此流⽔线的节点
agent any
//流⽔线的阶段
stages{
//阶段1 获取代码
stage("CheckOut"){
steps{
script{
println("获取代码")
}
}
}
stage("Build"){
steps{
script{
println("运⾏构建")
}
}
}
}
post {
always{
script{
println("流⽔线结束后,经常做的事情")
}
}
success{
script{
println("流⽔线成功后,要做的事情")
}
}
failure{
script{
println("流⽔线失败后,要做的事情")
}
}
aborted{
script{
println("流⽔线取消后,要做的事情")
}
雪的声音
}
}
}
参考⽂档:www.idevops.site/jenkins/pipelinesyntax/chapter01/
声明式流⽔线
声明式Pipleine是官⽅推荐的语法,声明式语法更加简洁。所有的声明式Pipeline都必须包含⼀个 pipeline块中,⽐如:pipeline {
//run
}
在声明式Pipeline中的基本语句和表达式遵循Groovy的语法。但是有以下例外:
流⽔线顶层必须是⼀个块,特别是pipeline{}。
不需要分号作为分割符,是按照⾏分割的。
语句块只能由阶段、指令、步骤、赋值语句组成。例如: input被视为input()。
agent代理
agent指定了流⽔线的执⾏节点。
agent { node { label 'labelname' }}
aget { label ' labelname '}
参数:
any 在任何可⽤的节点上执⾏pipeline。none 没有指定agent的时候默认。
label 在指定标签上的节点上运⾏Pipeline。 node 允许额外的选项(⾃定义workspace)。post运⾏后处理
当流⽔线完成后根据完成的状态做⼀些任务。例如:构建失败后邮件通知
post {
always {
echo 'I will always say Hello again!'
}
failure{
email :
}吉他弦怎么换
}
常⽤的状态:
always ⽆论流⽔线或者阶段的完成状态。
changed 只有当流⽔线或者阶段完成状态与之前不同时。
failure 只有当流⽔线或者阶段状态为”failure”运⾏。
success 只有当流⽔线或者阶段状态为”success”运⾏。
unstable 只有当流⽔线或者阶段状态为”unstable”运⾏。例如:测试失败。
aborted 只有当流⽔线或者阶段状态为”aborted “运⾏。例如:⼿动取消。
stages阶段
stages是流⽔线的整个运⾏阶段,包含⼀个或多个stage , 建议stages⾄少包含⼀个stage。stages {
stage('Example') {
steps {
好的组名echo 'Hello World'
}
}
}
environment环境变量
定义流⽔线环境变量,可以定义在全局变量或者步骤中的局部变量。这取决于 environment 指令在流⽔线内的位置。
agent any
//全局变量
environment {
activeEnv = 'dev'
}
stages {
stage('Example') {
//局部变量
environment {
AN_ACCESS_KEY = credentials('my-prefined-cret-text')
}
steps {
sh 'printenv'
}
}
}
options运⾏选项
定义流⽔线运⾏时的配置选项,流⽔线提供了许多选项, ⽐如buildDiscarder,但也可以由插件提供, ⽐如 timestamps。agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
其他部分参数:
buildDiscarder: 为最近的流⽔线运⾏的特定数量保存组件和控制台输出。
disableConcurrentBuilds: 不允许同时执⾏流⽔线。可被⽤来防⽌同时访问共享资源等。
求婚怎么求
overrideIndexTriggers: 允许覆盖分⽀索引触发器的默认处理。
skipDefaultCheckout: 在agent 指令中,跳过从源代码控制中检出代码的默认情况。
skipStagesAfterUnstable: ⼀旦构建状态变得UNSTABLE,跳过该阶段。
checkoutToSubdirectory: 在⼯作空间的⼦⽬录中⾃动地执⾏源代码控制检出。
狄timeout: 设置流⽔线运⾏的超时时间, 在此之后,Jenkins将中⽌流⽔线。
retry: 在失败时, 重新尝试整个流⽔线的指定次数。
timestamps 预测所有由流⽔线⽣成的控制台输出,与该流⽔线发出的时间⼀致。
parameters参数
为流⽔线运⾏时设置项⽬相关的参数,就不⽤在UI界⾯上定义了,⽐较⽅便。
//string 字符串类型的参数, 例如:
parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
//booleanParam 布尔参数, 例如:
季度工作计划
parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, 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}"
}
}
}
trigger触发器
构建触发器
//cron 计划任务定期执⾏构建。
triggers { cron('H */4 * * 1-5') }
//pollSCM 与cron定义类似,但是由jenkins定期检测源码变化。
triggers { pollSCM('H */4 * * 1-5') }
agent any
triggers {
cron('H */4 * * 1-5')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
tool构建⼯具
构建⼯具maven、ant、gradle,获取通过⾃动安装或⼿动放置⼯具的环境变量。⽀持maven/jdk/gradle。⼯具的名称必须在系统设置->全局⼯具配置中定义。
agent any
tools {
maven 'apache-maven-3.0.1'
}