持续集成高级篇之Jenkins参数化构建(二)

系列目录html

上一节咱们讲解了如何使用bat脚本或者powershell脚本自身的机制来达到参数化构建的目的,这在必定程序上增长了灵活性,然而缺点也至关明显:它只能适应一些相对比较固定的参数传入(好比像上一节讲到的,构建的环境分为(developmentproduction)两种状况,对于一些相对较复杂的状况以上方法就会捉襟见肘,最为明显问题是外部的变化可能致使参数随之作必要更改,最多见的是文件的位置参数,咱们指定归档文件的目录为D盘下的一个文件夹,如今D盘满了须要指定为其它盘,则全部的脚本都须要更改,这样的结果就是可维护性差.咱们能够把一些较为经常使用的参数定义为全局参数,好比经常使用工具的位置.java

本节咱们将从项目级别,节点级别,全局级别来说解Jenkins ci提供的参数配置方案sql

项目级别参数

本节部分咱们分为参数构建和在项目中定义项目级别参数来说解.shell

参数化构建项目.

在Jenkins里新建一个自由式项目,勾选This project is parameterized会出现一个Add Parameter按钮,点击会出现一个下拉框,选择最后一项'string paramter'建立一个字符串类型参数,在出现的对话框中输入名称(我用的是buildenv)和默认值(默认值能够不输入),在构建栏里咱们选择Execute windows bat command,在出现的框中输入如下内容:windows

//buildenv为咱们定义的参数名
echo %buildenv%

点击ok完成项目建立,此时build now按钮变成了Build with Parameters参数化构建,点击又会出现一步让输入值,有默认值能够直接点击'build',点击后咱们查看控制台能够看到输出了咱们定义的参数工具

在之后的章节里也是同样,不论是Jenkins预置的参数仍是咱们自定义的,使用cmd时都是经过%参数名%来获取.sqlserver

若是是powershell脚本,则须要使用$env:参数名来接收参数,好比在powershell命令窗口输入echo $env:buildenv就会达到和上面cmd同样的效果.ui

须要指出的是,若是在jenkins里直接执行powershell命令,须要下载powershell插件.插件

项目级别参数

以上参数化构建适用于须要手动构建的,不是特别频繁可是参数又必须动态指定的状况,这种构建缺点也至关明显,由于每次须要手动指定参数.还有一种方法是指定项目级别的参数,这种方式比直接使用脚本自身参数要更容易管理,由于参数在单独的一块地方定义,而且能够添加描述,使得语义更加明确,而且参数在单独醒目地方出更容易引发关注.code

下面讲解一下如何在项目级别添加环境变量.

新建一个自由式项目,名称随意,找到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