一、pipeline简介
1、pipeline是什么
pipeline是Jenkins的一个插件,以Jenkinsfile的形式存在,用来定义流水线的各个阶段,实现从代码到构建、测试、部署的一整套流程。Pipeline的最大优势是可以通过代码来定义流水线,使得流水线的定义及修改变得简单易维护。
2、pipeline的优势
使用pipeline,可以将原先分散在各个任务中的逻辑都整合到一个pipeline脚本中,清晰的展示整个流水线的过程,方便重用和维护。
二、pipeline基本语法
1、pipeline语法结构
pipeline {
agent any
stages {
stage('Build') {
steps {
// build action
}
}
stage('Test') {
steps {
// test action
}
}
stage('Deploy') {
steps {
// deploy action
}
}
}
}
2、pipeline语法说明
pipeline可以包含多个stage,每个stage又可以包含多个步骤。每个步骤都可以是Jenkins中可执行的任何内容,例如,Shell命令、groovy脚本等。steps中的代码会按顺序运行,一旦前一步执行失败,后续步骤不再执行。
3、pipeline示例
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
userRemoteConfigs: [[url: 'https://github.com/
/
.git']]])
}
}
stage('Build') {
steps {
sh 'make'
}
}
stage('Test') {
steps {
sh 'make test'
}
}
stage('Deploy') {
steps {
sh 'make deploy'
}
}
}
}
三、流程控制语句
1、流程控制指令
在pipeline中,可以使用流程控制指令来判断条件是否成立,并根据结果来执行下一步操作。
2、使用示例
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make'
}
}
stage('Test') {
when { expression { params.RUN_TESTS == 'true' } }
steps {
sh 'make test'
}
}
stage('Deploy') {
when { branch 'master' }
steps {
sh 'make deploy'
}
}
}
}
3、语法结构解析
when用于判断条件,支持expression、branch、environment、changeset、allOf、anyOf等属性。expression表示执行一个Groovy表达式,branch表示特定分支时执行,environment表示特定环境变量时执行,changeset表示当代码发生变化时执行,allOf表示同时成立时执行,anyOf表示任意一项成立时执行。
四、环境变量的使用
1、环境变量的作用
Jenkins中可以使用环境变量进行脚本编写,简化操作流程,增强可维护性。
2、语法结构解析
pipeline {
agent any
environment {
NEXUS_USER = credentials('
').username
NEXUS_PSW = credentials('
').password
}
stages {
stage('Build') {
steps {
// build action
}
}
stage('Test') {
steps {
// test action
}
}
stage('Deploy') {
steps {
sh 'make deploy NEXUS_USER=$NEXUS_USER NEXUS_PSW=$NEXUS_PSW'
}
}
}
}
3、环境变量示例
在使用环境变量的情况下,将ID由“nexus-credentials”改为您自己使用的ID。
五、自定义函数
1、函数的作用
Jenkins pipeline允许用户定义自己的Groovy函数,可以将可重用的代码模块进行封装,以方便重复利用。
2、函数使用示例
def deploy(server, domain, artifact) {
sshagent(['deployer']) {
sh "scp ${artifact} deploy@${server}:${domain}/${artifact}"
}
}
pipeline {
agent any
stages {
stage('Build') {
steps {
// build action
}
}
stage('Test') {
steps {
// test action
}
}
stage('Deploy') {
steps {
deploy('server01.example.com', '/opt/web', 'app.war')
}
}
}
}
3、函数说明
在上面的例子中,定义了名为deploy的函数,它接受三个参数,即服务器名称、域名和要部署的文件名。在调用deploy函数时,直接传入所需参数即可。
六、参数化构建
1、参数化构建的作用
在pipeline构建时,可以使用参数化构建,多次构建相同的pipeline,只需要在执行时输入不同的参数即可,这样有利于大大增强pipeline的灵活性与可重用性。
2、参数化构建使用示例
properties([
parameters([
string(name: 'APP_NAME', defaultValue: 'my-app', description: 'The name of your app')
])
])
pipeline {
agent any
stages {
stage('Build') {
steps {
// build action
}
}
stage('Test') {
steps {
// test action
}
}
stage('Deploy') {
steps {
sh "make deploy APP_NAME=${APP_NAME}"
}
}
}
}
3、参数化构建说明
在上面的例子中,使用了properties来定义输入参数,该例中定义一个名为APP_NAME的字符串参数,其默认值为my-app,描述为“您的应用程序名称”。在脚本中,可以通过${APP_NAME}来使用该参数。
七、错误处理
1、异常捕获的作用
在pipeline构建时,可能会遇到异常情况,需要进行捕获并进行正确的反应,例如,当构建失败时,需要发布通知以便其他相关人员知晓。Jenkins支持try-catch-finally语法结构,允许您根据异常情况执行不同的操作。
2、异常捕获使用示例
pipeline {
agent any
stages {
stage ('Build') {
steps {
try {
sh 'make'
}
catch (exc) {
slackSend(message: "Build Failed: Could not build - ${exc}")
}
finally {
archiveArtifacts artifacts: '*.war'
}
}
}
}
}
3、异常捕获说明
在上面的例子中,当构建产生异常时,将程序控制权转移到catch块中,执行slack通知操作,并在finally块中执行archiveArtifacts操作。