Jenkins流水线入门:核心概念与分类

来自AI助手的总结
Jenkins流水线用代码定义持续交付流程,分声明式和脚本式两种。
Jenkins流水线入门:核心概念与分类

一、什么是Jenkins流水线

Jenkins 是领先的开源自动化服务器。它使用 Java 构建,提供了超过 1,800 个插件来支持几乎任何东西的自动化,因此人类可以花时间做机器不能做的事情。

Jenkins流水线是一套插件,它支持在Jenkins中实现和集成持续交付流水线(Continuous Delivery Pipeline)。流水线提供了一组可扩展的工具,用于通过Pipeline DSL将简单到复杂的交付流水线以代码的形势展现,类似于基础设施即代码。

持续交付流水线会经历一个复杂的过程:从版本控制、向用户和客户提交软件、软件的每次变更(提交代码到仓库)到软件发布(Release)。这个过程包括以一种可靠并可重复的方式构建软件,以及通过多个测试和部署阶段来开发构建好的软件(称为Build)。

Jenkins流水线的定义被写在一个文本文件中(一般为Jenkinsfile),该文件“定制”了整个构建软件的过程。Jenkinsfile也可以被提交到项目的代码仓库中,在Jenkins中可以直接引用。将持续交付流水线作为应用程序的一部分,像其他代码一样进行版本化和审查,这是流水线即代码的基础。

创建Jenkinsfile并提交到代码仓库中的好处如下:

  • 自动为所有分支创建流水线构建过程。

  • 在流水线上进行代码复查/迭代

  • 对流水线进行审计跟踪

  • 流水线的代码可以被项目的多个成员查看和编辑

  • 可以对Jenkinsfile进行版本控制。

二、Jenkins流水线分类

Jenkins流水线主要分为声明式和脚本式两种,包含pipeline(流水线)、node(节点)、stage(阶段)、step(步骤)等区块。

1.pipeline

pipeline是用户定义的一个持续交付(CD)流水线模型。流水线的代码定义了整个构建过程,包括构建、测试和交付应用程序的阶段。另外,pipeline块是声明式流水线语法的关键部分。

2.node

node是一个机器,它是Jenkins环境的一部分,另外,node块是脚本化流水线语法的关键部分。

3.stage

stage块定义了在整个流水线的执行任务中概念不同的子集(比如Build、Test、Deploy阶段),它被许多插件用于可视化Jenkins流水线当前的状态/进展。

4.step

本质上是指通过一个单一的任务告诉Jenkins在特定的时间点需要做什么,比如要执行shell命令,可以使用sh SHELL_COMMAND。

2.1 声明式流水线

在声明式流水线语法中,流水线过程定义在 Pipeline{}中,Pipeline 块定义了整个流水线中完成的所有工作,比如:


Jenkinsfile (Declarative Pipeline)

pipeline {

    agent any

    stages {

        stage('Build') {

            steps {

                // Add build steps here

            }

        }

        stage('Test') {

            steps {

                // Add test steps here

            }

        }

        stage('Deploy') {

            steps {

                // Add deployment steps here

            }

        }

    }

}

上面参数说明:

  • agent any:在任何可用的代理上执行流水线或它的任何阶段,也就是执行流水线过程 的位置,也可以指定到具体的节点;

  • stage:定义流水线的执行过程(相当于一个阶段),比如上文所示的 Build、Test、Deploy, 但是这个名字是根据实际情况进行定义的,并非固定的名字;

  • steps:执行某阶段具体的步骤。

一个以声明式流水线的语法编写的 Jenkinsfile 文件如下:


Jenkinsfile (Declarative Pipeline)

pipeline {

    agent any

    stages {

        stage('Build') {

            steps {

                sh 'make'

            }

        }

        stage('Test') {

            steps {

                sh 'make check'

                junit 'reports/**/*.xml'

            }

        }

        stage('Deploy') {

            steps {

                sh 'make publish'

            }

        }

    }

}

上面参数说明:

  • pipeline:声明式流水线的一种特定语法,定义了包含执行整个流水线的所有内容和指令,也是声明式流水线的开始;

  • agent:声明式流水线的一种特定语法,指示Jenkins为整个流水线分配一个执行器和工作区,也就是在流水线中的步骤在哪个 Agent 上执行,该参数同样可以在stage中配置;

  • stage:描述流水线阶段的语法块,在脚本式流水线语法中,stage(阶段)块是可选的;

  • steps:声明式流水线的一种特定语法,它描述了在这个stage中要运行的步骤;

  • sh:执行一个 shell 命令;

  • junit:用于聚合测试报告。

2.2 脚本式流水线

在脚本化流水线语法中,会有一个或多个 Node(节点)块在整个流水线中执行核心工作, 比如:


Jenkinsfile (Scripted Pipeline)

node {

    stage('Build') {

        // Add build steps here

    }

    stage('Test') {

        // Add test steps here

    }

    stage('Deploy') {

        // Add deployment steps here

    }

}

上面参数说明:

  • node:在任何可用的代理上执行流水线或它的任何阶段,也可以指定到具体的节点;

  • stage:和声明式的含义一致,定义流水线的阶段。Stage 块在脚本化流水线语法中是可 选的,然而在脚本化流水线中实现 stage 块,可以清楚地在 Jenkins UI 界面中显示每个 stage 的任务子集。

一个以脚本化流水线的语法编写的 Jenkinsfile 文件如下:


Jenkinsfile (Scripted Pipeline)

node {

    stage('Build') {

        sh 'make'

    }

    stage('Test') {

        sh 'make check'

        junit 'reports/**/*.xml'

    }

    stage('Deploy') {

        sh 'make publish'

    }

}

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容