Jenkins Pipeline的定义

Pipeline是Jenkins的一套插件,支持将持续交付管道实施和集成到 Jenkins 中,Pipeline是一组按特定顺序执行的相互关联的任务,可以通过 Pipeline脚本完成复杂的交付流程。

JenkinsFile的概述

Pipeline脚本可以使用名为JenkinsFile 的文本来定义。通过使用Pipeline领域特定语言 (DSL) 语法实现由简单到复杂的交付管道,使用 JenkinsFile可以编写运行 Jenkins持续交付步骤。

使用JenkinsFile的好处:

  • 自动为所有分支和拉取请求创建管道构建过程。
  • Pipeline的代码审查/迭代(以及剩余的源代码)。
  • Pipeline的审计跟踪。
  • Pipeline的单一事实来源,可由项目的多个成员查看和编辑。

JenkinsFile的两种实现方式:

  • 声明式
  • 脚本化的

声明式

声明式管道语法提供了一种创建管道的简单方法。它包含用于创建 Jenkins 管道的预定义层次结构。它使您能够以简单、直接的方式控制管道执行的所有方面。

脚本化

脚本化的 Jenkins 管道在轻量级执行器的帮助下在 Jenkins 主服务器上运行。它使用很少的资源将管道转换为原子命令。声明式和脚本式语法彼此不同,并且定义完全不同。

Jenkins Pipeline的优势

Jenkins 是一个开放的持续集成服务器,能够支持软件开发过程的自动化。可以创建多个自动化作业,在实际使用场景时Jenkins UI 配置已经满足不了复杂的自动化需求,因此我们可以使用pipeline脚本实现复杂流程的自动化,pipeline脚本具有以下特点:

代码:Pipeline是用代码去实现,并且支持check in到代码仓库,这样项目团队人员就可以修改,更新Pipeline脚本代码,支持代码迭代。

耐用:Pipeline支持在Jenkins master(主节点)上计划之内或计划外的重启下也能使用。

可暂停:Pipeline支持可选的停止和恢复或者等待批准之后再跑Pipeline代码。

丰富功能:Pipeline支持复杂和实时的CD需求,包括循环,拉取代码,和并行执行的能力。

可扩展性:Pipeline支持DSL的自定义插件扩展和支持和其他插件的集成。

Pipeline创建持续交付场景流程图示例

ip_image002.jpeg
  1. 开发人员提交项目代码到项目仓库服务器;
  2. 开始执行Pipeline代码文件,开始从仓库拉取项目代码;
  3. 开始执行代码打包构建操作;
  4. 项目构建完成后进入测试的阶段,执行各种自动化测试验证;
  5. 自动化测试结束后到运维的部署阶段;
  6. 部署结束,输出整个交付流程报告,构建流程工作完成;

Jenkinsfile的关键结构

下面我们将看到Pipelines中使用的一些关键字概念::

Pipeline: Pipeline是一组指令,包括持续交付的过程。例如,创建应用程序、对其进行测试和部署。此外,它是声明式管道语法中的一个关键元素,它是 Jenkinsfile 中所有阶段的集合。我们在这个块中声明了不同的阶段和步骤。

pipeline{
 
}

Node: node是脚本化管道语法中的关键元素。此外,它在 Jenkins 中充当执行流水线的机器。

node{
 
}

Stage: stage由流水线执行的一组流程组成。此外,任务被划分为每个阶段,这意味着管道中可以有多个阶段。下面的代码片段显示了可以在管道中定义的不同阶段。

pipeline{
       agent any
       stages{
              stage("Build"){
                 ........
                }
              stage("Test"){
                 ........
                }
              stage("Deploy"){
                 ........
                }
              stage("Monitor"){
                 ........
                }
       }
}

Step:Jenkins 中的一个步骤定义了我们在流程的特定步骤中必须做的事情。阶段内可以有一系列步骤。此外,我们在阶段中定义的任何步骤都将在其中执行。

pipeline{
     agent any
     stages{
          stage("Stage 1"){
              steps{
                //该阶段要执行操作的代码
              }
          }
          stage("Stage 2"){
              steps{
               //该阶段要执行操作的代码
              }
          }
     }
 
}

Agent:代理是一个指令,它使用户能够通过分配负载在同一个 Jenkins 实例中执行多个项目。此外,我们通过代理为构建分配了一个执行者。您可以对整个管道使用单个代理,也可以对管道的不同阶段使用不同的代理。随后,与代理一起使用的一些参数是:

Any:任何可用的代理都执行管道。

None:它用于管道根并暗示没有全局代理,但每个阶段都必须指定自己的代理。

Label: 标记的代理用于执行管道或特定阶段。

Docker:可以使用 Docker 映像作为执行环境并将代理指定为 docker。

Pipeline脚本示例:

这是Jenkinsfile使用声明式pipeline语法的示例

pipeline { 
    agent any 
    options {
        skipStagesAfterUnstable()
    }
    stages {
        stage('Build') { 
            steps { 
                sh 'make' 
            }
        }
        stage('Test'){
            steps {
                sh 'make check'
                junit 'reports/**/*.xml' 
            }
        }
        stage('Deploy') {
            steps {
                sh 'make publish'
            }
        }
    }
}

这是Jenkinsfile脚本化pipeline语法的示例:

node { 
    stage('Build') { 
        sh 'make' 
    }
    stage('Test') {
        sh 'make check'
        junit 'reports/**/*.xml' 
    }
    if (currentBuild.currentResult == 'SUCCESS') {
        stage('Deploy') {
            sh 'make publish' 
        }
    }
}

Jenkins Pipeline快速入门

启动 Jenkins 并登录其 UI 后,您可以按照以下步骤创建一个Pipeline 项目

1.首先,在Jenkins 仪表板中,单击左侧面板上的新建 Pipeline项目

clipboard.png2.其次,输入管道的名称,从列表中选择Pipeline然后单击确定按钮。

clipboard.png3.然后进入任务配置页面,转到高级项目选项流水线选项卡,然后从定义下拉列表中选择PipelineScript。

clipboard.png4.在脚本输入框中编写Pipeline代码。在这里我们以下面的Pipeline脚本为例

pipeline {
    agent any
    stages{
        stage('One') {
            steps {
                     echo '你好, 欢迎来到pipeline demo...'
                 }
        } 
        stage('Two') {
            steps {
                echo '这是第二个阶段'
            }
        }
        stage('Three') {
            steps {
                echo '这是第三个阶段'
                echo '感谢您使用Jenkins Pipeline'
            }
        }
    }
}

5.我们把示例代码贴到Pipeline脚本输入框中,然后保存任务

clipboard.png6.我们在任务详情页面执行该任务,查看控制台输出结果

clipboard.png7.查Pipeline任务运行结果,运行结果展示每个阶段运行耗时、结果

clipboard.png8.在Blue Ocea视图下可以看到Pipeline运行的流程图,并且可以单独运行某一个阶段

clipboard.png

Jenkins Pipeline实践

本章以接口自动化项目为例,改造现有项目构建流程,使用Jenkins Pipeline的方式实现接口自动化测试项目的构建流程,提高项目构建的效率,让任务执行更加灵活。

项目需求

  1. 执行Pipeline代码文件,开始从代码仓库拉取项目代码;
  2. 开始执行接口测试代码操作;
  3. 接口测试代码执行完成后输出对应的报告;
  4. 任务执行完成后通知到钉钉群;
  5. 每天早上九点定时执行该任务;

设计与实现

1.创建一个空白的Pipeline任务

clipboard.png2.然后进入任务配置页面,转到高级项目选项流水线选项卡,然后从定义下拉列表中选择PipelineScript。

clipboard.png3.在PipelineScript输入框中编写Pipeline脚本,Pipeline代码实现如下图所示:

微信截图_20220718164322.png4.保存Pipeline任务并执行任务,执行结果如下图所示:

clipboard.png

5.Blue Ocea视图下运行的流程图

clipboard.png

6.生成测试报告图:

clipboard.png

7.钉钉通知效果图:

clipboard.png

参考文献:

Jenkins. pipeline[EB/OL]. [2022-07-18]. https://www.jenkins.io/doc/book/pipeline/.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注