Jenkins 服务 Pipeline 基础介绍和语法介绍 -1

2020-06-17 0 By admin

Pipeline 翻译过来是流水线的意思。从原本的含义来说的话,Jenkins 1.x 就支持 Pipeline 了,只不过是通过页面手动配置流水线。到 Jenkins 2.x 开始支持 pipeline as code ,可以通过代码来配置流水线了。

一、Jenkinsfile 介绍

Jenkinsfile 就是一个文本文件,也就是配置流水线概念在 Jenkins 服务中的表现形式。像Dockerfile之于Docker。
所有部署流水线的逻辑都写在Jenkinsfile中。Jenkins默认是不支持Jenkinsfile的;需要安装pipeline插件。

二、pipeline 语法介绍

Jenkins 团队在一开始实现 Jenkins pipeline 时,Groovy语言被选择作为基础来实现pipeline。所以,在写脚本式pipeline时,很像是(其实就是)在写Groovy代码。

2.1、脚本式语法

脚本式语法的确灵活、可扩展,但是也意味着更复杂。

2.2、声明式语法

一种提供更简单、更结构化(more opinionated)的语法。

三、Pipeline 语法学习

3.1、基础的Groovy 知识

  1. 虽然Groovy同时支持静态类型和动态类型,但是在定义变量时,在Groovy中我们习惯使用def关键字,比如def x="abc"、def y=1
  2. 不像Java,Groovy语句最后的分号不是必需的。
  3. Groovy中的方法调用可以省略括号,比如System.out.println "Hello world"
  4. 支持单引号、双引号。双引号支持插值(变量),单引号不支持。
  5. 支持三引号。三引号分为三单引号和三双引号。它们都支持换行,区别在于只有三双引号支持插值(变量)。
  6. 支持闭包。闭包的定义方法:def codeBlock = {print ”hello world“}
  7. 闭包的另类用法。我们定义一个stage函数:
def stage(String name,closue) {
	println name
	closue()
}
stage("stage name",{println "closue"})

3.2、Pipeline 组成

Jenkins pipeline其实就是基于Groovy语言实现的一种DSL(领域特定语言),用于描述整条流水线是如何进行的。流水线的内容包括执行编译、打包、测试、输出测试报告等步骤。

pipeline {
	agent any
	stages {
		stage('build') {
			steps{
				echo "hello world"
			}
		}
	}
}
  1. pipeline:代表整条流水线,包含整条流水线的逻辑。
  2. stage部分:阶段,代表流水线的阶段。每个阶段都必须有名称。本例中,build就是此阶段的名称。
  3. stages部分:流水线中多个stage的容器。stages部分至少包含一个stage。
  4. steps部分:代表阶段中的一个或多个具体步骤(step)的容器。steps部分至少包含一个步骤。
  5. agent部分:指定流水线的执行位置(Jenkins agent)。流水线中的每个阶段都必须在某个地方(物理机、虚拟机或Docker容器)执行。

以上每一个部分(section)都是必需的,少一个,Jenkins都会报错。
pipeline基本结构决定的是pipeline整体流程,但是真正“做事”的还是pipeline中的每一个步骤step。步骤是pipeline中已经不能再拆分的最小操作。
像 sh 和 echo 两个命令是 Jenkins pipeline 内置支持的;如果你想要的操作,Jenkins pipeline 没有内置支持的话,就需要安装相应的插件了。

3.3、Post 步骤说明

post部分包含的是在整个pipeline或阶段完成后一些附加的步骤。post部分是可选的,所以并不包含在pipeline最简结构中。但这并不代表它作用不大。
根据pipeline或阶段的完成状态,post部分分成多种条件块,包括:

  1. always:不论当前完成状态是什么,都执行。
  2. changed:只要当前完成状态与上一次完成状态不同就执行。
  3. fixed:上一次完成状态为失败或不稳定(unstable),当前完成状态为成功时执行。
  4. regression:上一次完成状态为成功,当前完成状态为失败、不稳定或中止(aborted)时执行。
  5. aborted:当前执行结果是中止状态时(一般为人为中止)执行。
  6. failure:当前完成状态为失败时执行。
  7. success:当前完成状态为成功时执行。
  8. unstable:当前完成状态为不稳定时执行。
  9. cleanup:清理条件块。不论当前完成状态是什么,在其他所有条件块执行完成后都执行。