1、常用指令
在编写Pipeline脚本时,会涉及各种指令,这些指令用于实现构建过程中的不同功能。熟悉这些指令后,编写一个完整的Pipeline脚本将变得十分简单
1.1 sh
- sh指令用于执行shell命令,配置示例如下
stage('Build') {
stage {
sh 'hostname'
}
}
- 在上述配置中,在构建的过程中,执行一个hostname命令以显示主机名
- 如果需要执行多条命令或者shell脚本,可以使用三引号包裹。配置示例如下:
stage('Build') {
stage {
sh """
hostname
pwd
ls
"""
}
}
1.2 environment
- environment指令用于在Pipeline中定义环境变量,这些环境变量可以在任意步骤中使用。配置示例如下:
pipeline {
agent any
environment {
APP_NAME = 'portal'
}
stages {
stage('Build') {
steps {
echo "$APP_NAME"
}
}
}
}
- 在上述构建中,environment块定义了一个名为APP_NAME的环境变量,值为portal。在构建过程中,使用$APP_NAME引用变量,并使用echo指令输出它
1.3 parameters
- parameters指令用于定义参数,既参数化构建。配置示例如下:
pipeline {
agent any
parameters {
choice (choices: ['dev' ,'main'], description: '请选择发布的分支', name: 'Branch')
}
stages {
stage('Build') {
steps {
echo "${params.Branch}"
}
}
}
}
- 在上述配种,parameters块定义了一个选项参数,名称为Branch,该名称将作为环境变量被公开在构建流程中。在构建的步骤中,使用${params.Branch}引用改变量,并使用echo指令输出
- 完整的配置示例如下:
pipeline {
parameters {
choice (choices: ['dev' ,'main'], description: '请选择发布的分支', name: 'Branch')
}
agent {
kubernetes {
yaml '''
apiVersion: v1
kind: Pod
metadata:
labels:
app: jenkins-slave
spec:
containers:
- name: jnlp
image: uhub.service.ucloud.cn/librarys/jenkins/inbound-agent:latest-jdk21
args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']
'''
}
}
stages {
stage('Build') {
steps {
echo "${params.Branch}"
echo 'Build...'
}
}
stage('Test') {
steps {
echo 'Test...'
}
}
stage('Deploy') {
steps {
echo 'Deploy...'
}
}
}
}
- 点击保存后刷新页面,可以看到Build变成了 Build with Parameters
1.4 triggers
- triggers指令用于定义触发器,既自动触发构建的条件,如定时触发、代码变更时触发等。配置示例如下:
pipeline {
agent any
triggers {
pollSCM '* * * * *'
}
stages {
stage() {
steps {
echo "Building......"
}
}
}
}
- 在上述配种,triggers块定义了一个pollSCM触发器,表示每分钟检查一次代码仓库是否有变更
1.5 when
- when指令用于定义在特定条件下执行某个阶段或步骤。配置示例如下:
pipeline {
agent any
stages {
stage('Build') {
when {
expression { return params.BUILD_DEV == 'dev' }
}
steps {
echo "Building in dev environment..."
}
}
}
}
- 在上述配置中,Build阶段使用了when指令,表示只有当参数BUILD_DEV的值为dev时,才执行下面的步骤
1.6 script
- script指令用于在Pipeline中执行一段Groovy脚本,这样可以实现更复杂的逻辑,如条件判断、循环等。配置示例如下:
pipeline {
agent any
stages {
stage() {
steps {
script {
def colors = ['red', 'blue', 'orange']
for (def color in colors) {
if (color == 'blue') {
echo 'blue'
} else {
echo color
}
}
}
}
}
}
}
- 在上述配置中,script块执行了一段Groovy脚本,其中包含了一个基本的数组遍历和逻辑判断
1.7 post
- post指令用于在Pipeline执行结束后执行一些操作,如通知、清理等。配置示例如下:
pipeline {
agent any
stages {
stage ('Build') {
steps {
echo "Building..."
}
}
}
post {
always {
echo 'Pipeline completed'
}
sucess {
echo 'Pipeline success'
}
failure {
echo 'Pipeline failed'
}
}
}
- 在上述配置中,post模块定义了根据构建状态执行相应的操作,具体如下:
- always:在Pipeline执行完成后,无论成功与否都会执行
- success:在Pipeline执行成功时执行
- failure:在Pipeline执行失败时执行
2 片段生成器
Jenkins片段生成器是一个强大工具,可以帮助用户以图形界面的方式生成Pipeline脚本的代码片段
在Pipeline脚本下方,单击 Pipeline syntax进入片段生成器页面,如下图所示
在 Sample Step列表中选择需要生成的功能后,下方会显示相应的图形页面,配置完成后,单击Generate Pipeline Script按钮生成对应的代码片段,可直接将其复制到Pipeline脚本中以供使用。如下图所示
-
Jenkins还提供了一个专门为声明式语法风格设计的生成器,名为Declarative Directive Generator(声明式指令生成器),主要用于生成Pipeline指令的代码片段。如下图所示
-
通过这两个生成器,用户可以很轻松地编写Pipeline脚本,减少手动编写的工作量,提高工作效率