1、Pipeline介绍

Pipeline 是Jenkins 2.0的精髓,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。

Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

Stage: 阶段,一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。

注意,Stage是一个逻辑分组的概念,可以跨多个Node。

Node: 节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行期环境。

2、pipeline简单示例

Jenkins Pipeline_html

配置页面前半部分和freestyle项目一样,只是后半部分少了源码管理、构建和构建后操作这部分内容,这是因为pipeline所有的这些操作都是要通过编写Groovy脚本来实现,大家不要怕,写一些我们常用的操作也不难,下面我们通过具体的例子带大家来学习。我们首先创建一个最简单的例子。

Jenkins Pipeline_生成器_02

Jenkins Pipeline_html_03

node {
echo 'Hello World'
}

此段代码的作用就是输出Hello World。

保存后执行,查看结果输出了Hello World。

Jenkins Pipeline_git_04

Jenkins Pipeline_git_05

3、Pipeline多stage示例

  1. 多stage Pipeline Job

我们使用如下的pipeline script:

node {
stage("Pull Code"){
echo "pull code from git "
}
stage("Code Build"){
echo "Buile code"
}
stage('Unit Test'){
echo "Unit Test"
}
}

stage表示阶段,每个阶段里可以执行具体的操作。我们暂时先简单的输出一些文字,后面再介绍其他常用操作。

保存后Job后,执行构建:

Jenkins Pipeline_生成器_06

我们可以看每一个阶段的执行时间,点击可以查看每一个阶段执行的日志:

Jenkins Pipeline_生成器_07

2. Pipeline Scipt 执行命令、脚本

我们可以使用如下方式执行命令或者脚本

node {
stage("Pull Code"){
echo "pull code from git"
sh "ls /etc"
}
stage("Code Build"){
echo "Buile code"
sh "/server/scripts/demo.sh"
}
stage('Unit Test'){
echo "Unit Test"
}
}

得到如下结果:

Jenkins Pipeline_html_08

3. 使用生成器生成pipeline脚本

Jenkins Pipeline_html_09

Jenkins Pipeline_html_10

Jenkins Pipeline_html_11

现在我们使用Pipeline Script实现frontend-job,脚本如下:

node {
stage("获取代码"){
echo "获取代码"
git branch: 'dev', url: 'git@192.168.56.12:web-site/frontend.git'
}
stage("打包"){
echo "打包"
sh "tar czf frontend-${BUILD_NUMBER}.tar.gz ./*.html"
}
stage('发布到node1'){
echo "发布到node1"
sh "scp frontend-${BUILD_NUMBER}.tar.gz 192.168.56.11:/data/web"
}
}

构建执行后:

Jenkins Pipeline_html_12

Jenkins Pipeline_git_13

4. 使用Pipeline Script调用己有的Job

我们的目录的是想一次性按顺序自动执行多个Job,我们还是使用生成器:

node {
stage("获取代码"){
echo "获取代码"
git branch: 'dev', url: 'git@192.168.56.12:web-site/frontend.git'
}
stage("打包"){
echo "打包"
sh "tar czf frontend-${BUILD_NUMBER}.tar.gz ./*.html"
}
stage('发布到node1'){
echo "发布到node1"
sh "scp frontend-${BUILD_NUMBER}.tar.gz 192.168.56.11:/data/web"
}
stage("调用frontend Job"){
build 'frontend-job'
}
}

执行结果如下:

Jenkins Pipeline_生成器_14

Jenkins Pipeline_git_15