jenkinsfile流水线语法01

agent(代理)

参数:

  • any 在任何节点上执行pipeline
  • none 没有制定agent的时候默认
  • lable 在制定标签节点上运行pipeline
agent { node { label "master" // 指定运行节点的名称或者标签  //node 以标签的反噬制定节点
		 			customWorkspace "${workspace}" // 执行运行的工作目录(可选)
	        }
} 

post

定义一个或多个steps,定义脚本运行完之后的完成情况,post代码块的运行取决于流水线中post代码块的位置。
参数:

  • always 无论流水线或者阶段完成状态都运行
  • changed 只有当流水线或者阶段完成状态与之前不同时才运行
  • failure 只有当流水线状态为 failure 时才运行
  • success 只有当流水线状态为 success 时才运行
  • aborted 只有当流水线状态为aborted (手动取消)才运行
	post {
		always {
			script {
				println("总是执行脚本片段")
			}
		}

	    success {
			script {
				currentBuild.description +="\n 构建成功"
			}
		}
		failure {
			script {
				currentBuild.description +="\n 构建失败"
			}
		}
		aborted {
			script {
				currentBuild.description +="\n 构建取消"
			}
		}

	}

stages

包含一系列一个或者多个stage 指令,stages至少包含一个stage指令用于连续交付指令,比如构建测试和部署

	stages { // stages 指定多个阶段 
		// 下载代码
		stage("GetCode"){ // 阶段名称
			steps{ // 步骤
				timeout(time:5, unit:"MINUTES"){ // 步骤超时时间
					script{ // 填写相关的运行代码
						println('获取代码')
					}
				}
			}
		}
	}

指令或者全局变量

environment 指令指定一个键值对序列,该序列将被定义为所有步骤的环境变量,或者是特定于阶段的步骤这取决于 environment 指令在流水线内的位置。

该指令支持一个特殊的方法 credentials(),该方法可用于在Jenkins环境中通过标识符访问预定义的凭证。对于类型为“Secret Text"的凭证credentials() 将确保指定的环境变量包含秘密文本内容。对于类型为"SStandard usemame and password"的凭证,指定的环境变量指定为userame;password,并且两个额外的环境变量将被自动定义:分别为 MYVARNAME USR和 MYVARNAME PSW。

pipeline{
	agent any
	environment{
         CC = 'clang'
    }
	stages{
		stage('Exalple'){
			environment{
				AN_ACCESS_KEY = credentials('my-prefined-secret-tes-xt')
 			}
 			steps{
				sh 'printenv'
			}
 		}
	}
}

options

options 指令允许从流水线内部配置特定于流水线的选项,

  • buildDiscarder: 为最近的流水线运行的特定数量保存组件和控制台输出。
  • disableConcurrentBuilds: 不允许同时执行流水线,可用于防止同时访问共享资源等。
  • overridelndexTriggers; 允许覆盖分支索引触发器的默认处理。
  • skipDefaultCheckout;在agent 指令中,跳过从源代码控制中检出代码的默认情况。
  • skipStagesAfterUnstable:一旦构建状态变得UNSTABLE,跳过该阶段。
  • checkoutToSubdirectory: 在工作空间的子目录中自动地执行源代码控制检出。
  • timeout: 设置流水线运行的超时时间,在此之后,Jenkins将中止流水线。
  • retry: 在失败时,重新尝试整个流水线的指定次数。
  • timestamps 预测所有由流水线生成的控制台输出,与该流水线发出的时间一致。
// 指定一个一小时的全局超时时间,在此之后jenkins 将终止流水线运行。
pipeline {
	agent any
	options {
		timeout(time: 1, unit: 'HOURS')
 	}
 	stages {
		stage('Example') {
			steps{
				echo 'hello world'
			}
		}
	}
}

参数

为流水线运行时添加相关的参数

  • string 字符串参数
parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }

计划任务

cron 计划任务定期执行构建

triggers { cron('H */4 * * 1-5')}

polISCM 与cron定义类似,但是由ienkins定期检测源码变化

triggers { pollSCM('H */4 * * 1-5'))

upstream 接受逗号分隔的工作字符串和阙值。当字符串中的任何作业以最小闽值结束时,流水线被重新触发。

triggers { upstream(upstreamProjects: 'job1, job2', threshold: hudson. model.Result.SUCCESS)}

tool

获取通过自动安装或手动放置工具的环境变量。支持maven/jdk。工具的名称必须在系统设置->全局工具配置中定义。

pipeline{
	agent any
	tools {
		maven'mvn391'
	}
	stages {
		stage('Example'){
			steps {
				sh 'mvn --version'
			}
		}
	}
}

input

input用户在执行各个阶段的时候,由人工确认是否继续进行

  • message 呈现给用户的提示信息
  • id 可选,默认为stage名称
  • ok 默认表单上的ok文本
  • submitter 可选的,以逗号分隔的用户列表或允许提交的外部组名。默认允许任何用户
  • submitterParameter 环境变量的可选名称。如果存在用submitter 名称设置
  • parameters 提示提交者提供的一个可选的参数列表。
input id: 'Test', message: '是否要继续', ok: '是,继续吧!', parameters: [choice(choices: ['A', 'B'], name: 'test1')], submitter: 'wangwl'

条件判断 when

when 指令允许流水线想据给定的条件决定是否应该执行阶段。 when指令至少包含一个条件,如果when 指令包含多个条件 所有的子条件认须返回True,阶段才能执行这与子条件在 allOf 条件下嵌套的情况相同。
内置条件
branch: 当正在构建的分支与模式给定的分支匹配时,执行这个阶段,这只适用于多分支流水线

when{ branch 'master' )

environment: 当指定的环境变量是给定的值时,执行这个步骤

when{environment name: 'DEPLOY TO',value: 'production'}

expression 当指定的Groovy表达式评估为true时,执行这个阶段,例如:

when{expression{return params.DEBUG_BUILD}}

not 当嵌套条件是错误时,执行这个阶段,必须包含一个条件

when{ not {branch 'master'}}

allof 当所有的嵌套条件都正确时,执行这个阶段,必须包含至少一个条件

when {allOF {branch 'master': environment name: 'DEPLOY_TO',value: 'production'}}

anyOF当至少有一个嵌套条件为真时,执行这个阶段,必须包含至少一个条件

when{any0f{branch 'master'; branch 'staging')}}

并行 parallel

声明式流水线的阶段可以在他们内部声明多隔嵌套阶段,它们将并行执行。注意,一个阶段必须只有一个 steps或 parallel的阶段。嵌套阶段本身不能包含 进一步的parallel 阶段,但是其他的阶段的行为与任何其他 stage parallel的阶段不能包含 agent 或 tools 阶段,因为他们没有相关 steps,另外,通过添加 failFast true 到包含parallel的 stage中,当其中一个进程失败时,你可以强制所有的 paralleL 阶段都被终止

stage('Parallel Stage'){
	when{
		branch 'master'
    }
}
failFast true // 第一个进程失败了  后面的也会失败
	parallel{
		stage('Branch A'){
			agent{
				lable "for-branch-a"
			}
			steps{
				echo "On Branch A"
			}
		}
		stage('Branch B'){
		    agent{
				lable "for-branch-b"
			}
			steps{
				echo "On Branch B"
			}
		}
	}
}

step步骤

script步骤需要 [scripted-pipeline]快共在声明流水线中执行、对于大多数用例来说,该声明式流水线中的"脚本”步骤是不必要的,但是艺可以提供一个有用的"逃生出口”非平凡的规模和/或复杂性的 script 块应该被转移到 共享库。
示例:

pipeline{
	agent any
	stages{
		stage("Example"){
			steps{
				echo 'Hello World'

				script{
					def browsers = ['chrome','firefox']
					for (int i = 0; i < browsers.size(); ++i){
						echo "Testing the ${browsers[i]} browser"
					}
				}
			}
		}
	}
}

例子

#!groovy

String workspace = "/data/jenkins/workspace"
pipeline {
	agent { node { label "master" // 指定运行节点的名称或者标签  //node 以标签的反噬制定节点
		 			customWorkspace "${workspace}" // 执行运行的工作目录(可选)
	        }
	}

	options { // 指定运行时的一些选项
		timestamps() // 日志会有时间
		skipDefaultCheckout() // 删除隐藏式checkout scm 语句
		disableConcurrentBuilds() // 禁止并行
		timeout(time: 1, unit: 'HOURS') // 流水线超时设置1小时
	}

	stages { // stages 指定多个阶段 
		// 下载代码
		stage("GetCode"){ // 阶段名称
			steps{ // 步骤
				timeout(time:5, unit:"MINUTES"){ // 步骤超时时间
					script{ // 填写相关的运行代码
						println('获取代码')
					}
				}
			}

		}
	    
	    stage("Build"){ // 构建
			steps{
				timeout(time:20, unit:"MINUTES"){
					script{
						println('应用打包')
					}
				}
			}

		}

		stage("CodeScan"){ // 代码扫描
			steps{
				timeout(time:30, unit:"MINUTES"){
					script{
						println('代码扫描')
					}
				}
			}

		}

	}

	// 构建后的操作
	// always 总是执行脚本片段
	// success 成功后执行
	// failure 失败后执行
	// aborted 取消后执行

	// currendBuild 是一个全局变量
	// description: 构建描述


	post {
		always {
			script {
				println("总是执行脚本片段")
			}
		}

	    success {
			script {
				currentBuild.description +="\n 构建成功"
			}
		}
		failure {
			script {
				currentBuild.description +="\n 构建失败"
			}
		}
		aborted {
			script {
				currentBuild.description +="\n 构建取消"
			}
		}

	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值