StringTemplate-动态创建jenkinsfile
StringTemplate模板引擎
持续集成流程,详情参见jenkins-持续集成
前言
jenkins通过Jenkinsfile
定义完整的流水线。
一个标准流水线内容如下
Jenkinsfile
pipeline {agent anystages {stage('1.拉取代码') { }stage('2.编译构建') { }stage('3.代码静测') { }stage("4.打包镜像") { }stage("5.远程部署") { }}
}
- 我们如何为不同的项目,选择不同的
stage
执行,该如何处理呢? - 对同一个项目,在不同的开发阶段,动态的选择
stage
执行。
如:开发阶段,可以跳过
3.代码静测
可以考虑通过StringTemplate
动态的创建Jenkinsfile脚本来实现上述的问题。
1. 控制流水线执行
创建jenkinsfile-template-1.stg
jenkinsfile(stage1,stage2,stage3,stage4,stage5) ::= <<pipeline {agent anystages {<if(stage1)><stage1()> <endif><if(stage2)><stage2()> <endif><if(stage3)><stage3()> <endif><if(stage4)><stage4()> <endif><if(stage5)><stage5()> <endif>}}
>>stage1() ::= <<stage('1.拉取代码') {}
>>stage2() ::= <<stage('2.编译构建') {}
>>stage3() ::= <<stage('3.代码静测') {}
>>stage4() ::= <<stage('4.打包镜像') {}
>>stage5() ::= <<stage('5.远程部署') {}
>>
执行程序
@Test
public void testGeneratorJenkinsFile1_1() {STGroup group = new STGroupFile("tmp\\jenkinsfile-template-1.stg");ST st = group.getInstanceOf("jenkinsfile");st.add("stage1", 1);st.add("stage2", 0); // 仍然执行 stage2st.add("stage3", 1);st.add("stage4", true);st.add("stage5", false); // 不执行 stage5String script = st.render();System.out.println(script);}
执行结果
2. 传递通用参数
通常,在执行jenkins流水线时,各个环节需要使用外部参数
,如,拉取代码时,需要指定git分支
等。
创建jenkinsfile-template-2.stg
jenkinsfile(stage1,stage2,stage3,stage4,stage5,params) ::= <<def git_token_id = <params.git_token_id>pipeline {agent anystages {<if(stage1)><stage1(params.git_url,params.selected_branch)> <endif><if(stage2)><stage2()> <endif><if(stage3)><stage3()> <endif><if(stage4)><stage4()> <endif><if(stage5)><stage5()> <endif>}}
>>stage1(git_url,selected_branch) ::= <<stage('1.拉取代码') {steps {<! 引用ST参数,直接替换 !>echo "git_url=<git_url> ,selected_branch=<selected_branch> "<! 引用全局变量,保留表达式 !>echo "git_token_id=${git_token_id}"}}
>>
<! 其他 stage 略!>
执行程序
@Testpublic void testGeneratorJenkinsFile1_2() {STGroup group = new STGroupFile("tmp\\jenkinsfile-template-2.stg");ST st = group.getInstanceOf("jenkinsfile");st.add("stage1", 1);st.add("stage3", 1);String gitTokenId = "6cac69be-bb16-49d4-a315-d71bc2883106";String gitUrl = "git@gitee.com:it_freshman/string-template-demo.git";String selectedBranch = "develop";st.addAggr("params.{git_token_id,git_url,selected_branch}", gitTokenId, gitUrl, selectedBranch);String script = st.render();System.out.println(script);}
执行结果
3.动态执行jenkinsfile — todo
- jgit 将
jenkinsfile
内容,动态推送到git仓库。 - jenkins-rest 执行流水线命令。
- 指定 jenkinsfile-
pipeline script from SCM
- 执行
Build with Parameters
- 指定 jenkinsfile-
StringTemplate-动态创建jenkinsfile相关推荐
- python创建类的实例方法-Python中动态创建类实例的方法
简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模 ...
- Javascript:DOM动态创建元素实例应用
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- 新建异常并处理java_java – 动态创建异常的工厂模式
我创建了Exception xml并动态创建并抛出异常. com.package.CheckedException Checked Exception Message com.package.UnCh ...
- SpringBoot集成Quartz实现定时任务的动态创建、启动、暂停、恢复、删除。
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:毅大师 blog.csdn.net/qq_39648 ...
- Angular动态创建组件之Portals
本文主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的内容.如:Angular多级依赖注入.ViewContainerRef,Portal ...
- asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性
asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性 就是不用 XXX.Visible = false; // true 因为这样该容器及其子控件会彻底的从页面上消 ...
- [原]动态创建Web控件制做计算器
最近参加了Web基础开发的培训,收获不少,做了一个练习,在后台动态创建控件制作了一个简单功能的计算器.程序中控件创建好以后,往往不能放在想要的位置,前台的布局非常麻烦,我用Table.TableRow ...
- 《深入浅出MFC》系列之动态创建
/*************************************************************************************************** ...
- 对xxl-job进行simpleTrigger并动态创建任务扩展
2019独角兽企业重金招聘Python工程师标准>>> 博文原址:对xxl-job进行simpleTrigger并动态创建任务扩展 业务场景 需求上要求能实现quartz的simpl ...
最新文章
- 2020年人工智能汽车将出台多项标准
- vectorvectorint 二维容器编程
- 移动WEB前端开发资源整合
- Maven中scope依赖范围和依赖的传递性
- python爬虫之美女图片爬取
- C. Longest Simple Cycle
- query的list()和iterate()区别 面试题
- Yslow-23条规则
- 普通用户竟这样执行xp_cmdshell存储过程!
- Perl 字符串截取函数substr
- 采用docker部署3台Redis分布式红锁实例
- 【Window】英文系统显示中文乱码
- java 3的倍数_java,编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz....
- python温度转换程序改写代码举一反三_006 实例1-温度转换
- quick框架之MyApp详解
- Floyd-Warshall算法总结
- 修改html会影响seo,网站修改css影响seo吗?
- 【原理】Basic Integer Overflows
- 微信尝试刷掌支付;苹果 WWDC 将于 6 月 6 日开幕;Qt Creator 10 发布|极客头条
- owin 怎么部署在云中_从几乎未能在云中部署简单的机器学习模型中学到的教训...
热门文章
- 华为的强大再次得到证明,高通为它定制功耗更低的芯片
- 使用Python做中文分词和绘制词云
- 机器学习算法的效果评估和优化方法
- 实在智能|电商RPA与电商人并肩作战
- Zemax学习笔记(16)- ZEMAX_分析>报告使用说明
- python图片镜像翻转_翻转图像/镜像图像
- IntelliJ IDEA 2018 注册码
- Anaconda创建环境及环境配置
- es文件浏览器有linux版么,【ES 文件浏览器】ES 文件浏览器TV版_ES 文件浏览器TV版官网_-沙发管家TV版应用市场...
- 15、条件概率、全概率公式、贝叶斯公式、马尔科夫链