持续集成高级篇之Jekins参数化构建(二)
上一节我们讲解了如何使用bat脚本或者powershell脚本自身的机制来达到参数化构建的目的,这在一定程序上增加了灵活性,然而缺点也相当明显:它只能适应一些相对比较固定的参数传入(比如像上一节讲到的,构建的环境分为(development和production)两种情况,对于一些相对较复杂的情况以上方法就会捉襟见肘,最为明显问题是外部的变化可能导致参数随之做必要更改,最常见的是文件的位置参数,我们指定归档文件的目录为D盘下的一个文件夹,现在D盘满了需要指定为其它盘,则所有的脚本都需要更改,这样的结果就是可维护性差.我们可以把一些较为常用的参数定义为全局参数,比如常用工具的位置.
本节我们将从项目级别,节点级别,全局级别来讲解Jenkins ci提供的参数配置方案
项目级别参数
本节部分我们分为参数构建和在项目中定义项目级别参数来讲解.
参数化构建项目.
在Jenkins里新建一个自由式项目,勾选This project is parameterized会出现一个Add Parameter按钮,点击会出现一个下拉框,选择最后一项'string paramter'创建一个字符串类型参数,在出现的对话框中输入名称(我用的是buildenv)和默认值(默认值可以不输入),在构建栏里我们选择Execute windows bat command,在出现的框中输入以下内容:
//buildenv为我们定义的参数名
echo %buildenv%
点击ok完成项目创建,此时build now按钮变成了Build with Parameters参数化构建,点击又会出现一步让输入值,有默认值可以直接点击'build',点击后我们查看控制台可以看到输出了我们定义的参数
在以后的章节里也是一样,不管是Jenkins预置的参数还是我们自定义的,使用cmd时都是通过
%参数名%来获取.
如果是powershell脚本,则需要使用
$env:参数名来接收参数,比如在powershell命令窗口输入echo $env:buildenv就会达到和上面cmd一样的效果.
需要指出的是,如果在jenkins里直接执行powershell命令,需要下载powershell插件.
项目级别参数
以上参数化构建适用于需要手动构建的,不是特别频繁但是参数又必须动态指定的情况,这种构建缺点也相当明显,因为每次需要手动指定参数.还有一种方法是指定项目级别的参数,这种方式比直接使用脚本自身参数要更容易管理,因为参数在单独的一块地方定义,并且可以添加描述,使得语义更加明确,并且参数在单独醒目地方出更容易引起关注.
下面讲解一下如何在项目级别添加环境变量.
新建一个自由式项目,名称随意,找到Build Environment栏目,找到Inject environment variables to the build process选项并勾选,此时会出现一些输入框让输入,Properties File Path暂时忽略,在下面的Properties Content里输入buildenv=development就可以在bat,shell或者powershell脚本里使用它了.
如果需要定义多个参数,换一行书写就行了,同样是name=value形式
大家可能已经看到,选项里除了
Properties Content外,下面还有Groovy Script选项,大家不要害怕,这里并不讲Groovy,这里可以使用一些简单的groovy语法来定义参数变量
Groovy Script框里输入的选项如下
def str="hello,world"
return ["greeting":str,"filename":"jenkins.txt"]
可以使用 def关键字定义一个变量,下面return里的内容可以做为参数在构建时使用.比如在bat脚本里可以使用%greeting%来获取键为greeting的参数的值.
节点级别参数
有些参数在不同的节点上是不一样的,比如说某一个工具的位置,如果我们把它定义为项目级别,由工具在不同节点上安装的位置可能是不一样的,这样就会造成部分节点上的构建失败.这时候可以考虑把参数定义为节点级别.
进入Manage Jenkins>Manage Nodes,进入管理页面便会看到我们已经创建好的Jenkins节点,点击某个基点后面的齿轮图标,在出现的界面里找到Node Properties,勾选Environment variables此时便可以输入参数的名称和值,点击Add按钮则可以添加多个参数.完成后点击Save保存后便可以在脚本里使用刚定义的节点级别的变量了.
全局变量
全局变量对所有节点都有效,当某些变量不会因为环境的改变而改变,比如说构建的版本只有development和production时,就可以定义为全局变量.这样不需要在每个项目里都重复定义了.
全局变量的定义也非常简单,进入Manage Jenkins>Configure System找到Global properties并勾选Environment variables出现的界面跟节点级别配置类似.
使用文件参数
Jenkins提供了灵活的配置选项,我们除了可以在Jenkins内部配置参数外,还可以以外部文件的形式提供配置参数,配置参数为name=value键值对形式,必须符合java properties文件格式.
下面讲解如何使用配置文件.
我们新建一个自由式项目,滚动到Build Environment栏,勾选Inject environment variables to the build process,在Properties File Path选项里输入配置文件路径,我放在了E盘里,路径为E:\testenv.txt,这个文件很简单,里面就一行内容,如下:
database=sqlserver
往下流动到Build栏,新建一个 Execute windows bat command,输入以下内容
echo %database%
保存后点击构建,可以看到控制台输入sqlserver
持续集成高级篇之Jekins参数化构建(二)的更多相关文章
- 持续集成高级篇之Jekins脚本参数化构建
系列目录 本系列已经很久没有更新了,接前面基础篇,本系统主要介绍jenkins构建里的一些高级特性.包括脚本参数化,Jenkins Pipeline与及在PipeLine模式下如何执行常见的传统构建任 ...
- 持续集成高级篇之Jekins参数传入与常见任务
系列目录 有的童鞋可能已经发现,PipeLine项目与自由式项目相比,可配置的项少了很多,比如说环境变量定义,所有步骤完成后执行动作,拉git代码库等.其实这些功能并没有缺,而是配置的方式不一样了,以 ...
- 持续集成高级篇之基于win32-openssh搭建jenkins混合集群(一)
系列目录 前面的demo我们使用的都是只有一个windows主节点的的jenkins,实际生产环境中,一个节点往往是不能满足需求的.比如,.net项目要使用windows节点构建,java项目如果部署 ...
- 持续集成高级篇之Jenkins Pipeline 集成sonarqube
系列目录 前面章节中我们讲到了Sonarqube的使用,其实Sonarqube获取msbuild结果主要是执行三个命令,开始标记,执行msbuild,结束标记,这些都是命令,是非常容易集成到我们ci流 ...
- 持续集成高级篇之Jenkins cli与Jenkins ssh
系列目录 Jenkins Cli介绍 Jenkins Cli为Jenkins提供的一个cli工具,此工具功能非常强大,可以完成诸如重启jenkins,创建/删除job,查看job控制台输出,添加/删除 ...
- 持续集成高级篇之Jenkins资源调度
系列目录 之前的示例我们主要关注点在于功能的实现,都是在一个节点的完成了.有了多个节点后,必须涉及到资源的调度问题.本节我们讲解在创建任务时与资源调度的有关选项以及一些平时没有注意到的但在生产环境需要 ...
- 持续集成高级篇之Jenkins windows/linux混合集群搭建(二)
系列目录 前面我们说过,要使用ssh方式来配置windows从节点,如果采用ssh方式,则windows和linux配置从节点几乎没有区别,目前发现的惟一的区别在于windows从节点上目录要设置在c ...
- 持续集成高级篇之Jenkins Pipeline git拉取
系列目录 PipeLine中拉取远程git仓库 前面讲自由式任务的时候,我们可以看到通过自由式job里提供的图形界面配置git拉取非常方便的,实际上使用PipeLine也并不复杂.这一节我们展示一下如 ...
- .net持续集成cake篇之cake介绍及简单示例
cake介绍 Cake 是.net平台下的一款自动化构建工具,可以完成对.net项目的编译,打包,运行单元测试,集成测试甚至发布项目等等.如果有些特征Cake没有实现,我们还可以很容易地通过扩展Cak ...
随机推荐
- php上传excle文件,csv文件解析为二维数组
解析上传的CSV文件不是什么难事,直接读取转成你想要的数组样子就OK了. public function putStoreStockIn ($filePath = '') { $file = fope ...
- 微信小程序的尺寸单位rpx介绍
rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应. 规定屏幕宽为750rpx.如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375 ...
- 最火的分布式 HTAP 数据库 TiDB - 入门实践教程
偶然在某篇博客看到了 TiDB,一个融合 OLTP 和 OLAP 的分布式开源数据库, GitHub 上 Star 很多,然后 watch 了,发现 commit 和 pull request 一直都 ...
- python3 实现多域名批量访问特定目录(一)
渗透测试之批量处理同一框架CMS系统漏洞 当我们做多网站的渗透测试时,会发现很多站点采用的都是同类型的CMS框架,只要我们发现一个漏洞,那么我们可以批量处理这一类站点,高效测试,如果不知道该站点的框架 ...
- 如何选择合适的SSL证书类型
网站安装SSL证书就可以将http升级为https加密模式,网站安装SSL证书因此成为一种趋势.如何为网站选择适合的SSL证书类型呢? SSL证书类型可分为2大类:1)按照验证方式分类2)按照支持域名 ...
- C#打开并选择特定类型文件并返回文件名
public string[] GetOpenFileDialogReturnFileFullName(bool multiSelect = false) { ...
- redis缓存介绍以及常见问题浅析
# 没缓存的日子: 对于web来说,是用户量和访问量支持项目技术的更迭和前进.随着服务用户提升.可能会出现一下的一些状况: 页面并发量和访问量并不多,mysql足以支撑自己逻辑业务的发展.那么其实可以 ...
- 【Java例题】5.1 多项式计算
1. 计算下列多项式的值. pn=an*x^n+...+a1*x+a0其中,"^"表示乘方. x.n以及ai(i=0,1,...,n-1)由键盘输入. package chapte ...
- 关于asp.net调用gemalto超级狗api的具体实现
鉴于网上关于超级狗的具体操作并不详细,我把我所知道的写下来,希望能给有需求的网友做个参考.软件外壳保护我就不说了,没有什么难度,供应商也会提供文档,一步一步操作即可.我要说的是用于保护发给客户的程序, ...
- SpringBoot 使用JPA时解决no session的方法
1.在application.yml中添加 spring.jpa.open-in-view: true 2.在使用查询的方法添加 @Transactional