其他分享
首页 > 其他分享> > Jenkins Pipeline语法讲解

Jenkins Pipeline语法讲解

作者:互联网

pipeline最简结构

pipeline {
	agent any
	stages {
		stage("build") {
			steps {
				echo "hello world"
			}
		}
	}
}

注意:以上每一个部分都是必需的,少一个,jenkins都会报错

步骤

pipeline基本结构决定的是pipeline整体流程,但是真正“做事”的还是pipeline中的每一个步骤。步骤是pipeline中已经不能再拆分的最小操作。

post部分

...
post {
	failure {
		mail to: "team@example.com",subject:“The Pipeline failed”
	}
}

post部分包含的是在整个pipeline或阶段完成后一些附加的步骤。post部分是可选的,并不包含在pipeline最简结构中。

根据pipeline或阶段的完成状态,post部分分成多种条件块,比如:

post部分可以同时包含多个条件块,代码如下:

pipeline {
	agent any 
    stages {
    	stage("build") {
    		steps {
    			echo "build stage"
    		}
    		post {
    			always {
    				echo "stage post always"
    			}
    		}
    	}
    }
    post {
    	changed {
    		echo "pipeline post changed"
    	}
    	always {
    		echo "pipeline post always"
    	}
    	...
    }
}

pipeline支持的指令

pipeline的基本结构满足不了现实多变的需求。所以,jenkins pipeline通过各种指令(directive)来丰富自己。

Jenkins pipeline支持的指令有:

注意:在使用指令时,需要注意的是每个指令都有自己的作用域。如果指令使用的位置不正确,Jenkins将会报错。

pipeline内置基础步骤

文件目录相关步骤

deleteDir:删除当前目录

deleteDir是一个无参步骤,删除的是当前工作目录。通常它与dir步骤一起使用,用于删除指定目录下的内容。

dir:切换到指定目录

默认pipeline工作在工作空间目录下,dir步骤可以让我们切换到其他目录。

dir("/var/logs"){
	deleteDir()
}

fileExists:判断文件是否存在

fileExists("/tmp/a.jar")判断/tmp/a.jar文件是否存在。如果参数是相对路径,则判断在相对于当前工作目录下,该文件是否存在。结果返回布尔类型

isUnix:判断是否为类Unix系统

如果当前pipeline运行在一个类Unix系统上,则返回true

pwd:确定当前目录

pwd和Linux系统中pwd命令一样,返回当前所在目录。它有一个布尔类型的可选参数:tmp,如果参数值为true,则返回与当前工作空间管理的临时目录

writeFile:将内容写入指定文件中

writeFile支持的参数有:

readFile:读取文件内容

读取指定文件的内容,以文本返回。readFile支持的参数有:

示例:

...
script{
	// "amVua2lucyBib29r" 是 “jenkins book”进行base64编码后的值
	writeFile(file:"base64File",text:"amVua2lucyBib29r",encoding:"Base64")
	def content = readFile(file:"base64File",encoding:"UTF-8")
	echo "${content}"
	
	//打印结果:jenkins book
}

命令相关步骤

与命令相关的步骤其实是Pipelin:Node and Processes插件提供的步骤。由于它是Pipeline插件的一个组件,所以基本不需要单独安装。

sh:执行shell命令

sh步骤支持的参数有:

注:除了script参数,其他参数都是可选的。returnStatus和returnStdout参数一般不同时使用,因为返回值只能有一个;如果同时使用,则只有returnStatus参数生效。

bat、powershell步骤

bat步骤执行的是Windows的批处理命令;powershell步骤执行的是Powershell脚本,这两个步骤支持的参数和sh步骤一样。

制品相关步骤

stash:保存临时文件

stash步骤可以将一些文件保存起来,以便被同一次构建的其他步骤或阶段使用。如果整个pipeline的所有阶段在同一台机器上执行,则不需要stash步骤。因此,需要stash的文件是跨jenkins node使用的。

stash步骤会将文件存储在tar文件中,对于大文件的stash的操作将会消耗jenkins master的计算资源。jenkins官方文档推荐,当文件大小为5~100MB时,应该考虑使用其他替代方案。

stash步骤的参数列表如下:

注:除了name参数,其他参数都是可选的。其中excludes和includes使用的是Ant风格路径表达式

unstash:取出之前stash文件

unstash步骤只有一个name参数,即stash时的唯一标识。通常stash和unstash步骤同时使用。

pipeline {
	agent none
	stages {
		stage("stash"){
			agent {label "master"}
			steps {
				writeFile(file: "a.txt",text: "$BUILD_NUMBER")
				stash(name: "abc",includes: "a.txt")
			}
		}
		stage("unstash") {
			agent {label "node2"}
			steps {
				script{
					unstash("abc")
					def content = readFile("a.txt")
					echo "${content}"
				}
			}
		}
	}
}

以上示例中,stash步骤在master节点上执行,而unstash步骤在node2节点上执行

其他步骤

error:主动报错,中止点前pipeline

error步骤的执行类似抛出一个异常。它只有一个必需参数:message。通常省略参数:error("there's an error")

tool:使用预定义的工具

如果在Global Tool Configuration(全局工具配置)中配置了工具,那么可以通过tool步骤得到工具路径。

tool步骤支持的参数有:

timeout:代码块超时时间

为timeout步骤闭包内运行的代码设置超时时间限制。如果超时,将抛出一个org.jenkinssci.plugins.workflow.steps.FlowInterruptedException异常。timeout步骤支持如下参数:

waitUntil:等待条件满足

不断重复waitUntil块内的代码,直到条件为true。waitUntil不负责处理块内代码的异常,遇到异常时直接向外抛出。waitUntil步骤最好与timeout步骤共同使用,避免死循环。

timeout(50) {
	waitUntil {
		script {
			def r = sh script:"curl http://example",returnStatus:true
			return (r == 0)
		}
	}
}

retry:重复执行块

执行N次闭包内的脚本。如果其中某次执行抛出异常,则只中止本次执行,并不会中止整个retry的执行。同时,在执行retry的过程中,用户是无法中止pipeline的。

steps {
	retry(20){
		script {
			sh script:"curl http://example",returnStatus:true
		}
	}
}

sleep:让pipeline休眠一段时间

sleep步骤可用于简单地暂停pipeline,其支持的参数有:

sleep(120)  //休眠120秒
sleep(time:"2",unit:"MINUTES")

Ant风格路径表达式

Ant是比maven更老的java构建工具、Ant发明了一种描述文件路径的表达式,大家都习惯称其为Ant风格路径表达式。其包括3中通配符:

标签:文件,Pipeline,步骤,pipeline,stash,讲解,Jenkins,执行,stage
来源: https://www.cnblogs.com/Torres-tao/p/16309188.html