[toc]

什么是pipeline

Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。
什么是Pipeline?简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。
Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

Pipeline概念

Pipeline 是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构建过程。

  • Node
    • node 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式 Pipeline 语法的关键特性。
  • Stage
    • Stage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如“构建”,“测试”和“部署”阶段),许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。
  • Step
    • 一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的“步骤”)要做什么。例如,使用 sh step:sh ‘make’ 可以执行 make 这个 shell 命令。

使用Jenkins部署pipeline任务

新建任务

image-20230522164920140

将远程仓库位置转译成流水线语法

image-20230522164923464

image-20230522164926311

image-20230522172909367

1
2
# 转译后的流水线语句:
checkout([$class: 'GitSCM', branches: [[name: '*/master']],doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],userRemoteConfigs: [[url: 'git@gitlab.xxx.com:root/hello-world.git']]])

将shell命令转译成流水线语法

image-20230522173107715

编写流水线执行语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 完整流水线定义语言
pipeline{
agent any
stages{
stage("get it"){
steps{
checkout([$class: 'GitSCM', branches: [[name: '*/master']],doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],userRemoteConfigs: [[url: 'git@gitlab.xxx.com:root/hello-world.git']]])
}
}
stage("mvn"){
steps{
sh label: '', script: 'mvn clean package'
}
}
stage("test"){
steps{
sh label: '', script: 'echo $WORKSPACE'
}
}
stage("test01"){
steps{
sh label: '', script: 'echo $heiheihei'
}
}
stage("sh script about hello.sh"){
steps{
sh label: '', script: 'sh /var/lib/jenkins/scripts/deploy_hello.sh'
}
}
}
}

运行结果

image-20230522172143323