什么是PipeLine

PipeLine是流水线的意思,在Jenkins里就,持续集成的PipeLine就是把你的代码从版本控制软件交付到用户手里的一个自动化流程。这个自动化流程是由一系列的插件完成的。

PipeLine可以通过代码来定义,写在一个Jenkinsfile里,这个文件我们一般也是放到项目里,用版本控制软件来控制的。就是所谓的流程代码化“Pipeline-as-Code”。

 

PipeLine是Jenkins里最重要的概念它有以下的好处:

  1. 它像代码一样管理,方便查看更改,review。
  2. 可以暂停等待用户输入。
  3. 可以支持fork/join,loop,并行执行
  4. 可以用户自定义plugin

Pipeline的一些术语

Step

一个单独的task,需要告诉Jenkins做什么具体的事情,用户自定义plugin,其实就是在定义Step。

Node

Pipeline的大部分工作都是在一系列的node steps里完成的。一个Node step需要定义两件事:

  1. 把需要的steps作为一个整体放倒Jenkins的队列里,当一个node上有executor空闲的时候,运行这些steps。
  2. 创建一个文件夹作为workspace,里边存放文件,比如从代码管理软件上拿下来的代码。

Stage

对整个持续集成过程的逻辑划分。

如何定义Pipeline

Pipeline script用的是Groovy语法,如果你不懂也没关系。一个Pipeline可以用下边两种方式来定义:

  1. 可以在Jenkins WebUI里直接输入
  2. 创建一个Jenkinsfile,加到你的project里。(推荐做法)

在WebUI里定义一个Pipeline

进入Jenkins web UI,点击 New Item
new item

这时,你会看到下边的界面。需要注意的是这里输入的名字会被用来在文件系统创建一个文件夹。所以不能有空格。

Enter a name, select *Pipeline*, and click *OK*

然后我们在Pipleline定义的script里写上一段代码。

In the *Script* text area, enter a Pipeline and click Save

好了,你的第一个Pipeline定义完了,你可以通过点击Build Now来运行了

Click *Build Now* to run the Pipeline

很快你就发现这个pipeline运行完成了,然后在Build History下点击#1,点击Console Output,你就可以看到输出了。

Click *Console Output* for the Pipeline

再看一下刚才我们写的代码

node {
echo 'Hello World'
}

第一行node关键字帮我们创建了一个executor和workspace。
第二行echo在console里打印了一行字。

通过Jenkinsfile来定义Pipeline

我们可以通过选择Pipeline script from SCM来定义Pipeline。这时你需要定义你的Jenkinsfile的位置,定义完成后,只要你的代码更新,Jenkins检测到就会自动启Build。你可以在Jenkinsfile第一行写上 #!/usr/bin/env groovy,这样文本编辑器会对Groovy代码语法高亮。关于如何写Jenkins script,你可以看随Jenkins发行的帮助文档。

Pipeline Syntax in the side-bar

代码段生成器

不同的plugin有不同功能他们的script也不尽相同,你可以在http://localhost:8080/pipeline-syntax/ 里通过snippet generator来通过UI自动生成代码。

我们可以看到我们在上边通过下拉框选择echo,然后在下边输入我们要输出的message,点击Generate Pipeline script,就得到了echo命令在Jenkins script里的代码。

引用全局变量

不同的plugin提供不同的变量或方法让你在Jenkins script里引用,你可以在这里查看它们http://localhost:8080/pipeline-syntax/globals

比如你可以写下边这样的Jenkins script去发邮件,而其中的JOB_NAME,BUILD_NUMBER,BUILD_URL都是全局变量

mail to: 'devops@acme.com',
subject: "Job '${JOB_NAME}' (${BUILD_NUMBER}) is waiting for input",
body: "Please go to ${BUILD_URL} and verify the build"

下边我们看一个完整的jenkinsfile:


pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo 'Building..'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing..'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}

首先我们看agent。

Agent

agent定义Jenkins在哪里以及怎样执行Pipleline。所以在定义一个Jenkinsfile的时候,agent是必须的。目前Jenkins推荐用docker来管理环境,因为docker不用你配置复杂的运行环境。比如这个Agent就是启动一个docker image。后边的stage以及内部的step都在这个container里运行。


pipeline {
    agent {
        docker { image 'node:7-alpine' }
    }
    stages {
        stage('Test') {
            steps {
                sh 'node --version'
            }
        }
    }
}

1 对 “Rethink Jenkins 之三:定义你的第一个PipeLine”的想法;

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: