一、什么是流水线
Jenkins Pipeline(或简称“管道”,大写“P”)是一套插件,支持在Jenkins中实现和集成连续交付管道。
连续交付(CD)管道是您从版本控制到用户和客户的软件获取过程的自动化表达。对软件的每一次更改(在源代码管理中提交)都要经过一个复杂的过程才能发布。这个过程包括以可靠和可重复的方式构建软件,以及通过多个测试和部署阶段推进构建的软件(称为“构建”)。
Pipeline提供了一组可扩展的工具,用于通过Pipeline领域特定语言(DSL)语法将简单到复杂的交付管道建模为“代码”。
Jenkins管道的定义被写入一个文本文件(称为Jenkinsfile),该文本文件又可以提交到项目的源代码管理存储库。 这是“管道即代码”的基础;将CD管道视为应用程序的一部分,以便像任何其他代码一样进行版本控制和审查。
创建Jenkinsfile并将其提交给源代码管理可以带来许多直接的好处:
- 自动为所有分支和拉取请求创建管道构建过程。
- 管道上的代码审查/迭代(以及剩余的源代码)。
- 管道的审计跟踪。
- 可由项目的多个成员查看和编辑。
二、声明式与脚本式管道语法
Jenkinsfile可以使用两种类型的语法编写——Declarative(声明式)和Scripted(脚本式)。
声明式管道和脚本式管道的构造有根本不同。声明式管道是Jenkins管道的最新功能,它:
- 提供了比脚本化管道语法更丰富的语法功能,并且
- 旨在使编写和读取管道代码变得更容易。
然而,写入Jenkinsfile的许多单独的语法组件(或“步骤”)对于Declarative和Scripted Pipeline都是通用的。
三、特性
从根本上说,Jenkins是一个支持多种自动化模式的自动化引擎。Pipeline为Jenkins添加了一组强大的自动化工具,支持从简单的连续集成到全面的CD管道的用例。通过对一系列相关任务进行建模,用户可以利用Pipeline的许多功能:
- 代码:管道在代码中实现,通常检查到源代码管理中,使团队能够编辑、审查和迭代其交付管道。
- 持久化:Jenkins重启后依然存在。
- 可暂停:管道可以选择停止并等待人工输入或批准,然后再继续运行管道。
- 通用性:管道支持复杂的现实CD需求,包括分叉/连接、循环和并行执行工作的能力。
- 可扩展:Pipeline插件支持对其DSL[1]的自定义扩展,并支持与其他插件集成的多种选项。
四、概念
管道
管道是CD管道的用户定义模型。Pipeline的代码定义了整个构建过程,通常包括构建应用程序、测试应用程序和交付应用程序的阶段。
节点
节点是一台机器,它是Jenkins环境的一部分,能够执行管道。
阶段
阶段块定义了通过整个管道执行的任务的概念上不同的子集(例如“构建”、“测试”和“部署”阶段),许多插件都使用它来可视化或呈现Jenkins管道的状态/进度。
Step
一项任务。基本上,步骤告诉Jenkins在特定时间点(或过程中的“步骤”)要做什么。例如,要执行shell命令,请使用sh步骤:sh“make”。当一个插件扩展了Pipeline DSL时,通常意味着该插件实现了一个新步骤。
五、示例
声明式
pipeline {
agent any
stages {
stage('Build') {
steps {
//
}
}
stage('Test') {
steps {
//
}
}
stage('Deploy') {
steps {
//
}
}
}
}
agent any
表示在任何可用的代理上执行此管道或其任何阶段。stage('Build')
定义一个Build阶段。steps
定义步骤。
脚本式
node {
stage('Build') {
//
}
stage('Test') {
//
}
stage('Deploy') {
//
}
}
node
和上面的agent any
相同。
六、简单流水线
这是个简单的流水线,只是在控制台输出Hello world!