转载注明出处
以下管道和流水线为同指一个概念。
在Jenkins中,管道(Pipeline)是一组事件或任务,它们按顺序相互链接。简单来说,Jenkins Pipeline
是一个插件组合,支持使用Jenkins集成和实现持续交付管道。管道具有可扩展的自动化服务器,用于通过管道DSL(特定领域语言)“作为代码”创建简单或复杂的交付管道,即将所有子任务进行流水线化。
Pipeline
是Jenkins2.X的最核心的特性,帮助Jenkins实现从CI到CD与DevOps的转变。
在Jenkins管道中,每个任务或事件都至少对一个或多个事件具有某种依赖性。
上图代表Jenkins的连续交付管道。它包含一组称为构建,部署,测试和发布的状态。这些状态彼此相互关联,每个状态都有自己的事件,这些事件按照称为连续交付管道的顺序工作。连续交付管道是一个自动表达式,用于显示获取版本控制软件的过程。因此,软件中所做的每一个更改在发布过程中都会经历许多复杂的过程。它还涉及以可靠和可重复的方式开发软件,以及通过测试和部署的多个阶段对构建的软件进行升级。
在本节中,你将学到:
可以使用名称为JenkinsFile
的文本文件定义Jenkins管道。您可以使用JenkinsFile
将管道用代码实现,可以通过使用特定领域语言(DSL)来书写代码。使用JenkinsFile
,你可以编写运行Jenkins管道所需的步骤。
使用JenkinsFile
的好处:
JenkinsFile
执行拉取请求。JenkinsFile
可以在WEB UI
端或者直接使用JenkinsFile
来定义。
有两种类型的语法用于定义JenkinsFile:声明式(Declarative)
与脚本化(Scripted)
管道语法。推荐使用声明式语法。
Jenkins2.5后支持,声明性管道语法提供了一种创建管道的简便方法。它包含用于创建Jenkins管道的预定义层次结构,它使你能够以简单,直接的方式控制管道执行的所有方面。
特点:
脚本化管道语法在轻量级执行程序的帮助下在Jenkins主机上运行。它使用非常少的资源将管道转换为原子命令。声明式和脚本化语法彼此不同,并且有着完全不同的定义。
特点:
Jenkins是一个开放的持续集成服务器,能够支持软件开发过程的自动化。可以在用例的帮助下创建多个自动化作业,并将它们作为Jenkins管道来运行。
以下是使用Jenkins管道的原因:
Jenkins 安装和运行的地方,它负责解析 job 脚本,处理任务,调度计算资源
其他常用概念和语法(以声明式方式):
sh
步骤(step)// Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo "Hello World"'
sh '''
echo "Multiline shell steps works too"
ls -lah
'''
}
}
}
}
bat
步骤表示执行批处理命令。// Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Build') {
steps {
bat 'set'
}
}
}
}
// Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Deploy') {
steps {
// “Deploy”阶段(stage)重复执行 flakey-deploy.sh 脚本3次
retry(3) {
sh './flakey-deploy.sh'
}
// 上面执行完成后,然后等待 health-check.sh 脚本最长执行3分钟,超时的话Deploy会失败
timeout(time: 3, unit: 'MINUTES') {
sh './health-check.sh'
}
// 重试部署任务 5 次,但是总共花费的时间不能超过 3 分钟
timeout(time: 3, unit: 'MINUTES') {
retry(5) {
sh './flakey-deploy.sh'
}
}
}
}
}
// 当 Pipeline 运行完成时,你可能需要做一些清理工作或者基于
// Pipeline 的运行结果执行不同的操作, 这些操作可以放在 post 部分。
post {
always {
// 不管成功与否都会执行
echo 'This will always run'
}
success {
echo 'This will run only if successful'
}
failure {
echo 'This will run only if failed'
}
unstable {
echo 'This will run only if the run was marked as unstable'
}
changed {
echo 'This will run only if the state of the Pipeline has changed'
echo 'For example, if the Pipeline was previously failing but is now successful'
}
}
}
New Item
->输入项目名称并选择Pipeline
类型,然后点击OkAdvanced Project Options
中输入Pipeline语法任务Save
,然后点击Build Now
,开始执行PipelineBuild History
面板上出现历史操作编号,点击编号可以进入详情Jenkinsfile
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'javac HelloWorld.java'
sh 'java HelloWorld'
}
}
}
}
Advanced Project Options
面板中设置Pipeline,指定远程仓库调度方式:
显示方式:
本文从零基础介绍了Jenkins的Pipeline及Jenkinsfile相关概念,并通过实例操作去了解如何结合具体项目实现Pipeline项目。读完本篇,相信可以去了解更多的Pipeline操作知识,而且实现更强大更复杂的Pipeline操作,从而简化我们项目开发中的各种流程,提高效率。