Jenkins为了更好支持CI/CD,通过Groovy语言这个DSL(动态描述语言)开发了Pipeline,并以插件的形式集成到Jenkins中,实现和集成持续交付的管道。
本文简单讲述如何实施pipeline以及基本语法(Declarative模式)。
Pipeline应用
首先,在Jenkins中创建一个Pipeline(流水线)任务
然后,在流水线Pipeline script模式的脚本框中输入相应的脚本,但是,当要执行非常复杂的流水线任务时,script模式将不堪重任,因此,Pipeline还提供了Pipeline script from SCM模式,指定Jenkinsfile并执行其中的指令。
Pipeline语法
基本语法
Declarative Pipeline中的基本语句和表达式遵循与Groovy语法相同的规则 ,但也有例外:
- 每条语句按行分隔
- 任何语句必须包含在块(sections)中
- 块中只能是包含章节/指令/步骤或赋值的语句
- 属性引用语句被视为无参数方法调用
因本系列文档主要是讲述CI/CD,所以本文先简单介绍几种最基本的关键字及语法,后续将有更多文章详细讲述Pipeline。
关键字 | 说明 | |
pipeline | 一个groovy/Jenkinsfile文件中不光只有Pipeline代码,还有其他的工具类方法等。通过pipeline关键字告诉Jenkins在{}中的代码为pipeline代码。 | |
agent | 用来告诉Jenkins在指定的节点机器上执行代码。 | |
any | 在所有可用的agent主机上执行pipeline或stage。 | |
none | 不分配代理,需要在每个stage中指定agent主机。 | |
label | 通过label在Jenkins环境中指定可用的agent主机。 | |
node | 同label参数,但node运行其他选项,例如customWorkspace。 | |
stages | 一个stages至少包含一个stage操作,用于实现一个业务场景的自动化,例如build/test/deploy等。 | |
stage | 作为最小的代码块被嵌套在stages中。 | |
steps | 一个stage下至少有一个steps,指一个简单步骤,一般为几行代码或者调用外部一个模块类的具体功能。 | |
step | 在Declarative模式中,不支持在steps中嵌套step。 | |
post | 支持多种条件指令:always/changed/failure/success/unstable/aborted,一般用于发送通知,比如邮件/微信等。 | |
changed | 如果当前Pipeline运行的状态与之前完成的状态不同,则触发操作。 | |
failure | 如果当前Pipeline运行失败,则触发操作。 |
脚本实例
pipeline { agent none stages { stage(‘Build’){ agent { label ‘node1’ } stage(‘Test’){ agent { node { label ‘node2’ customWorkspace "${env.JOB_NAME}/${env.BUILD_NUMBER}" } stages { stage ('Build') { println "Build Files" } stage ('Test') { println "Test Files" } } } stage ('Deploy') { steps { bat “dir /b” //Windows版jenkins sh “echo $PATH” //Linux版本jenkins } } } post { failure { script { //pipeline代码 } } } }
原创文章禁止转载:技术学堂 » 自动化运维持续集成(CI)和持续发布(CD)系列·Pipeline