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创建持续交付场景流程图示例:
- 开发人员提交项目代码到项目仓库服务器;
- 开始执行Pipeline代码文件,开始从仓库拉取项目代码;
- 开始执行代码打包构建操作;
- 项目构建完成后进入测试的阶段,执行各种自动化测试验证;
- 自动化测试结束后到运维的部署阶段;
- 部署结束,输出整个交付流程报告,构建流程工作完成;
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项目
2.其次,输入管道的名称,从列表中选择Pipeline,然后单击确定按钮。
3.然后进入任务配置页面,转到高级项目选项流水线选项卡,然后从定义下拉列表中选择PipelineScript。
4.在脚本输入框中编写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脚本输入框中,然后保存任务
6.我们在任务详情页面执行该任务,查看控制台输出结果
7.查Pipeline任务运行结果,运行结果展示每个阶段运行耗时、结果
8.在Blue Ocea视图下可以看到Pipeline运行的流程图,并且可以单独运行某一个阶段
Jenkins Pipeline实践
本章以接口自动化项目为例,改造现有项目构建流程,使用Jenkins Pipeline的方式实现接口自动化测试项目的构建流程,提高项目构建的效率,让任务执行更加灵活。
项目需求:
- 执行Pipeline代码文件,开始从代码仓库拉取项目代码;
- 开始执行接口测试代码操作;
- 接口测试代码执行完成后输出对应的报告;
- 任务执行完成后通知到钉钉群;
- 每天早上九点定时执行该任务;
设计与实现
1.创建一个空白的Pipeline任务
2.然后进入任务配置页面,转到高级项目选项流水线选项卡,然后从定义下拉列表中选择PipelineScript。
3.在PipelineScript输入框中编写Pipeline脚本,Pipeline代码实现如下图所示:
4.保存Pipeline任务并执行任务,执行结果如下图所示:
5.Blue Ocea视图下运行的流程图
6.生成测试报告图:
7.钉钉通知效果图:
参考文献:
Jenkins. pipeline[EB/OL]. [2022-07-18]. https://www.jenkins.io/doc/book/pipeline/.