前面一篇,我用Jenkins支持的脚本输入框执行构建,还用了github上拉取代码下来进行构建项目。这篇,就来详细解释下每行代码的含义,还有就是复习一下第一篇提到的几个关键字,这样的基础中的基础知识。
1.Declarative代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 1pipeline {
2 agent any
3 stages {
4 stage('Build') {
5 steps {
6 println "Build"
7 }
8 }
9 stage('Test') {
10 steps {
11 println "Test"
12 }
13 }
14 stage('Deploy') {
15 steps {
16 println "Deploy"
17 }
18 }
19 }
20}
21
22
解释:
上面是一个Declarative类型的Pipeline,这个,我前面说过,基本上实际开发都采用这个。虽然Scripted模式的Pipeline代码行数精简,很短,上面Declarative有20行代码,如果用Scripted模式,就10行代码。但是Scripted脚本很灵活,不好写,也不好读,维护起来相等困难。我们先来学习Declartive里面代码含义,有些基础知识在Scripted也有,有些却没有。
1)第一行是小写pipeline,然后一对大括{},学习过代码的人都知道,大括号里面就是代码块,用来和别的代码块隔离出来。pipeline是一个语法标识符,前面我叫关键字。如果是Declarative类型,一定是pipeline {}这样起头的。当然脚本文件,pipeline不要求一定是第一行代码。也就是说pipeline前面可以有其他代码,例如导入语句,和其他功能代码。pipeline是一个执行pipeline代码的入口,jenkins可以根据这个入门开始执行里面不同stage
2)第二行agent any,agent是一个语法关键字,any是一个option类型。agent是代理的意思,这个和选择用jenkins平台上那一台机器去执行任务构建有关。我当然jenkins只有一个master节点,没有添加第二个节点机器,后面文章,等我们专门学习agent这个指令的时候,再来介绍如何添加一个节点。等添加了新节点,我们这个地方就可以选择用master还是一个从节点机器来执行任务,所以any是指任意一个可用的机器,当然我环境就是master。
3)第三行stages{}, stages是多个stage的意思,也就是说一个stages可以包含多个stage,从上面代码结果你也可以看出来。上面写了三个stage,根据你任务需要,你可以写十多个都可以。
4)第四行stage('Build') {}, 这个就是具体定义一个stage,一般一个stage就是指完成一个业务场景。‘Build’是认为给这个任务取一个名字。这个名称可以出现在Jenkins任务的页面上,在我前面一篇文章结尾处的图片可以显示着三个stage的名称,分别是Build,Test,和Deploy。
5)第五行steps{},字面意思就是很多个步骤的意思。这里提一下,看到了steps,当然还有step这个指令。一般来说,一个steps{}里面就写几行代码,或者一个try catch语句。
6)第六行,这个地方可以定义变量,写调用模块代码等。这里,我就用Groovy语法,写了一个打印语句。如果你机器没有安装groovy,你安装了python,你可以写python的打印语句,或者用linux的shell,例如sh "echo $JAVA_HOME"
后面的stage含义就是一样的,上面写了三个state,描述了三个业务场景,例如打包build,和测试Test,以及部署,这三个串联起来就是一个典型的CD Pipeline流程。实际的肯定不是这么写,因为Test就包含很多个阶段,和不同测试类型。这些不同测试类型,都可以细分成很多个stage去完成。
2.Scripted模式代码
1
2
3
4
5
6
7
8
9
10
11
12 1node {
2 stage('Build') {
3 //
4 }
5 stage('Test') {
6 //
7 }
8 stage('Deploy') {
9 //
10 }
11}
12
这个代码,有两点和上面不同。第一个是Scripted模式是node{}开头,并没有pipeline{},这个区别好知道。第二个要指出的是,scripted模式下没有stages这个关键字或者指令,只有stage。上面其实可以node('Node name') {}来开头,Node name就是从节点或master节点的名称。
基本代码含义就讲解到这里,很简单,需要把这几个常见的指令熟记就行。不管哪种模式,你都要注意一对{},特别是多层嵌套,不要丢了或者少了一些结束大括号。再提一个注释语法,由于pipeline是采用groovy语言设计的,而groovy是依赖java的,所以上面//表示注释的意思。