马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
官方参考:https://www.jenkins.io/doc/book/pipeline/syntax/
Pipeline Utility Steps 插件:https://birdbook.com.cn/ops/ci/jenkins/plugins/pipeline%20utility%20steps.html
常用环境变量
寄义表达式备注params,传入参数传入参数params.都可以用env.来访问实验Jenkins用户名env.BUILD_USER_ID依赖用户名插件:
wrap([$class: ‘BuildUser’]) {
env.BUILD_USER_ID
}
构建序号env.BUILD_NUMBER构建节点env.NODE_NAMEwindows默认cpu逻辑核数env.NUMBER_OF_PROCESSORSlinux获取下令 nprocSTAGE名字env.STAGE_NAME常用语法
等候
条件
- _force_cores = '16'
- if (_force_cores.toInteger() < 64 && _force_cores.toInteger() > 0) {
- matlab_cores = _force_cores.toInteger()
- } else {
- error "Faulty data in FORCE_MATLAB_CORES: ${_force_cores}"
- }
复制代码 循环
- for(i in list_matcher_in.toSet()){
- command = command.replaceAll("@S_IN_VAR@${i}@E_IN_VAR@", global_vars.get(i))
- }
- def continue_update = true
- while (continue_update){
- continue_update=false
- }
- batch.each { elem ->
- println elem
- }
- // 带序号的遍历
- batches.eachWithIndex{ elem , index ->
- }
复制代码 暂时切换工作目次
常用option
- options {
- /* 配置构建超时时间 */
- timeout(time: 600, unit: "MINUTES")
- /* 设置不允许并发构建 */
- disableConcurrentBuilds()
- /* 保留记录 */
- buildDiscarder logRotator(artifactDaysToKeepStr: '30', artifactNumToKeepStr: '30', daysToKeepStr: '30', numToKeepStr: '30')
- }
复制代码 界说初始参数(可选,可以直接再视图界说,不在jenkinsfile里)
- parameters {
- string(defaultValue: "/app/jenkins/xxxx.zip", description: '文件路径', name: 'filePath')
- string(defaultValue: "", description: '部署日期', name: 'date')
- booleanParam defaultValue: true, description: '是否需要验证', name: 'needVerify'
- }
复制代码 任务输入弹窗
- // 仅做确认
- input ”请确认“
- // 输入一个参数
- env.URL_REPO_BUILD = input message: '请输入仓库地址', ok: 'Yes', parameters: [string(description: 'ssh://git@10.1.1.111/XX_Build' , name: 'URL_REPO_BUILD', trim: true)]
- // 输入多个参数
- def inputResp = input message: '请输入子仓库信息', ok: '更新', parameters: [string(defaultValue: 'Application_Code_Files/SWU_XXXX', description: '子仓库相对路径', name: 'SWU_REPO_NAME', trim: false), string(defaultValue: '', description: '子仓库版本号', name: 'SUB_REVISION_ID', trim: false), booleanParam(defaultValue: false, description: '是否继续更新子仓库', name: 'CONTINUE_UPDATE')]
- continue_update = inputResp['CONTINUE_UPDATE']
- env.SUB_REVISION_ID = inputResp['SUB_REVISION_ID']
- env.SWU_REPO_NAME = inputResp['SWU_REPO_NAME']
复制代码 界说全局可访问的量
实验条件
- // 环境变量当条件
- when{
- environment name: 'deployMgmt', value: 'true'
- }
- // 多个条件
- when{
- allOf{
- environment name: 'deploy1', value: 'true'
- anyOf{
- environment name: 'deploy2', value: 'true'
- environment name: 'deploy3', value: 'true'
- }
- }
- }
复制代码 字符串利用
- // 拼接
- "${aa}${bb}"
- aa+bb
- //替换
- command = command.replaceAll('aa', 'bb')
- command = command..replaceAll(/\.(abc|dfg)$/, "") // 正则表达式
- // 切分
- text.split(/[ ,!]+/) // 正则表达式
- text.split('split') // 按单词切分 如果分割单词出现2次,返回的字符串数组中会有一个null
- text.tokenize('ab') // 按字符a和b去切分,连续出现分割字符,自动合并连续的分隔符,保证没有null
- // 判断包含
- filepath.contains('xxx.pdf')
复制代码 有效的内置函数
- fileExists('/app/a.txt') //判断是否有文件
- fileExists('/app/dir/'') //判断是否有目录,多个/
- isUnix() //判断系统类型,依赖插件Pipeline Utility Steps
- // 正则表达式 /[0-9a-f]{12}/
- def matcher = (inPath =~ /\/([^_]+)_Autosar\.mdl/)
- if (matcher) {
- match = matcher[0][1]
- }
- // 列表拼接
- def swuList = []
- swuList.add(name)
- swus = '\n'.join(swuList)
复制代码 调用其他作业
- jobB =build job: "xxxx-deploy", propagate: false, wait: true, parameters: [
- string(name: 'dir', value: "${env.dir}")
- ]
- String result = jobB.getResult();
- Name = jobB.getProjectName()
- println result;
复制代码 函数功能抽象,以微信关照为例
- def notice(result){
- return script {
- String author=config["receiver"]
- String msg = "${envDesc}发布${result}"
- jobB = build job: "notice", propagate: false, wait: false, parameters: [
- string(name: 'msg', value: "${msg}"),
- string(name: 'authors', value: "${author}"),
- string(name: "msgType", value: "wechat")
- ]
- }
- }
复制代码 post处理惩罚
- post {
- /* post节点定义在阶段运行结束的操作,支持一些后置条件
- * always 总是运行
- * changed 当前状态与上一次构建状态不同时运行
- * failure 当前失败时运行
- * success 当前成功时运行
- * unstable 不稳定状态时运行
- * aborted 被终止时运行
- * */
- failure {
- script{
- }
- }
复制代码 多台呆板实验的时间,共享文件
- // 保留文件或者文件夹
- stash includes: "${JOB.output_folder_name}/**", allowEmpty: true, name: 'output_folder_stash'
- // 切换节点后,释放
- unstash 'output_folder_stash'
复制代码 归档文件
- // 可多次执行
- archiveArtifacts artifacts: "${JOB.log_archive}"
复制代码 自动报错
环境变量局部收效
- //代码块生效
- withEnv (['TMP=E:\\TMP']) {
- }
- //stage级别生效
- stage('STAGE') {
- agent {label "MATLAB"}
- environment {
- TOOLS_PATH = "${JOB.path.build_tools_common}"
- }
- stages {
复制代码 动态stage,可以动态天生stage
- batches.eachWithIndex { batch, index ->
- stage("Batch ${index+1}/${batches.size()}") {
- echo running
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |