一、Jenkins Pipeline 语法入门

作为一种流行的持续集成和交付工具,Jenkins有多种方式来实现交付流水线。其中, Jenkins Pipeline是一种比较流行的方式,它提供了一个DSL(Domain Specific Language 的缩写,中文翻译为:领域特定语言)来描述交付流水线。

官方:Pipeline Syntax (jenkins.io)

3.1 什么是 Jenkins Pipeline

Jenkins Pipeline是一种基于Groovy编写的DSL,它可以描述交付流水线。Pipeline支持串行和并行的执行,可以将多个任务组合成一个流水线。Pipeline也支持将上下文传递给不同的阶段,使得阶段之间的数据共享变得更加容易。

Pipeline提供了三种编写Pipeline的方式:

Declarative Pipeline:是基于YAML编写的声明式语言,它可以更容易地描述交付流水线。

Scripted Pipeline:是基于Groovy编写的脚本语言,它是一种灵活的方式来描述交付流水线。

Jenkinsfile:是一种将Pipeline脚本保存为Jenkins源代码管理系统中的文件的方式。

3.2 Declarative Pipeline(声明式)流水线

3.2.1 特点

  • 最外层必须由pipline{ //do something }来进行包裹
  • 不需要分号作为分隔符,每个语句必须在一行内
  • 不能直接使用groovy语句(例如循环判断等),需要被script {}包裹

3.2.2 示例说明

下面是一个简单的Pipeline脚本示例:

pipeline{   // 最外层必须由pipeline包裹
    agent any // agent表示在哪个节点执行
    stages{
        stage("build"){
            steps{ // 具体执行步骤
                echo "Build..."
            }
        }
        stage("test"){
            steps{
                echo "Test..."
            }
        }
        stage("depoly"){
            steps{
                echo "Deployment..."
            }
        }
    }
    post{ // 最后执行
        success{ // 测试成功时执行(需要安装 Email Extension 插件)
            emailext body: 'Build succeeded!', subject: 'Build Success', to: 'xx@example.com'
        }
        failure{ // 失败时会执行
            emailext body: 'Build failed!', subject: 'Build Failure', to: 'xx@example.com'
        }
    }
}

在这个示例中,我们使用了三个阶段:buildtestdeploy

每个阶段都是一个stage块。在每个阶段中,我们可以使用Jenkins提供的一些API来执行任务,例如sh命令来执行shell脚本或者Jenkins提供的其他插件。

下面进行详细演示操作:

1、安装插件Email Extension

(1)打开浏览器输入http://jenkins.zhang-qing.com/,输入账号root和密码root登录(这是我设置的账号和密码,实际需要根据你自己设计的账号和密码来定)

(2)依次点击【系统管理】-【插件管理】

image-20231121221941290

(3)点击【Available plugins】后,勾选Email Extension,点击【Download now and install after restart】

image-20231121222327874

(4)勾选【安装完成后重启Jenkins(空闲时)】

image-20231121222442662

2、新建构建任务TEST-Declarative-Pipeline

(1)点击【新建任务】

image-20231121222856313

(2)填写任务名称-TEST-Declarative-Pipeline

image-20231121223011947

(3)复制下面到脚本里面后,点击【保存】

pipeline{   // 最外层必须由pipeline包裹
    agent any // agent表示在哪个节点执行
    stages{
        stage("build"){
            steps{ // 具体执行步骤
                echo "Build..."
            }
        }
        stage("test"){
            steps{
                echo "Test..."
            }
        }
        stage("depoly"){
            steps{
                echo "Deployment..."
            }
        }
    }
    post{ // 最后执行
        success{ // 测试成功时执行需要安装 Email Extension 插件
            emailext body: 'Build succeeded!', subject: 'Build Success', to: 'xx@example.com'
        }
        failure{ // 失败时会执行
            emailext body: 'Build failed!', subject: 'Build Failure', to: 'xx@example.com'
        }
    }
}

image-20231121223139605

3、开始构建

(1)点击【立即构建】

image-20231121223251185

(2)点击【Console Output】查看构建详细信息。这里因为邮件地址错误,所以会失败。但是不影响具体演示效果

image-20231121223339633