持续集成高级篇之Jenkins脚本参数化构建

系列目录html

本系列已经好久没有更新了,接前面基础篇,本系统主要介绍jenkins构建里的一些高级特性.包括脚本参数化,Jenkins Pipeline与及在PipeLine模式下如何执行常见的传统构建任务(这里指jenkins自由风格构建模式),jenkins cli,jenkins ssh,jenkins任务调度,资源调度,jenkins任务远程触发,jenkins混合集群搭建(同时包含windows和linux节点)等高级功能.linux

jenkins参数化构建

在一些复杂的构建中,咱们可能须要指定不少参数,若是这些参数都写死在cmd或者powershell脚本或者ssh脚本里,脚本的可扩展性将严重受限,最为重要的是修改构建脚本可能会形成严重后果(尤为是一些很是复杂的脚本),这里的一个最佳实践就是不要轻易更改生产环境的脚本文件.而参数化构建能够大大增长脚本的可扩展性.shell

Jenkins提供了丰富的参数配置入口结合脚本自身的外部参数处理能够实现很是灵活的脚本参数配置.下面从脚本自身参数化选项,项目级参数化配置,节点级参数化配置以及全局参数配置来详细讲解如何在Jenkins里实现参数化配置.windows

脚本自身参数化配置

下面分别介绍bat脚本和powershell脚本如何接收外部参数数组

bat脚本接收外部参数

在windows bat脚本命令里,能够经过%0,%1,%2...以此类推来接收外部传入参数,其中%0为脚本自身的名称,不少时候不是咱们须要的,咱们能够从%1开始接收外部传入参数.咱们假若有如下一个名为build.bat的脚本,它用做构建测试环境和生产环境的脚本,测试环境和生产环境的构建能够经过一个外部参数来判断.为了简单起见咱们并不使用真实环境的构建脚本,而是简单模拟,但愿读者可以触类旁通,联系到真实环境应用场景.ssh

这个bat脚本很是简单,就一行代码测试

echo %1

shell接收外部参数

在Jenkins中,除了powershell和bat命令外,其它地方接收外部参数的方法写法都是shell语法写法,即${参数名}形式ui

若是咱们传入什么就会打印什么,咱们传入development,或者production,bat脚本就会接收到它们.以上很是简单,这里不在jenkins里单首创建项目演示,你们能够本身动手试一试.插件

powershell接收外部参数

相对于windows cmd,powershell更为强大,也更为灵活.下面分别介绍powershell的位置参数命名参数调试

powershell位置参数

位置参数相似于上面讲的cmd经过%0,%1获取参数同样,经过参数的顺序来决定调用的是哪个参数.在Powershell里,位置参数传入到ps1文件后都存储在了一个叫做$args的数组变量里,能够经过$args[0],$args[1]来获取各位置上的参数(位置经过空格区分,若是参数包含空格须要加引号)

相似上面bat,咱们新建一个叫做'build.ps1'的powershell脚本文件,代码与上面的bat相似,以下

echo $args[0]

须要注意的是,powrshell脚本文件(即后缀名为ps1的文件)没法经过cmd命令窗口打开.须要使用powershell窗口或者调用powershell.exe来打开

ps1文件的执行方式

1) 使用powrshell命令窗口打开,就像打开cmd命令一下打开powershell命令窗口,须要注意的是powershell窗口执行ps1文件须要使用相对路径或者绝对路径,好比你要打开一个名称为Build.ps1的文件,打开方式应该是.\Build.ps1(相对路径形式)或者C:\build.ps1形式,不能是直接Build.ps1

2) 使用cmd打开powershell,在cmd中输入powershell就会进入powershell命令窗口,和直接打开powershell命令窗口效果是同样的.

3) 经过powrshell.exe 执行powershell命令.在cmd中输入powershell.exe -File 要执行的ps1文件便可运行ps1脚本

第三种方式提供了一种在cmd环境执行powershell脚本的方法,这在jenkins环境中很是有用,能够没必要使用powershell插件便可调用powershell脚本.

powershell 命名参数

不少时候,尤为在要传入的参数很是多的时候,位置参数语义不是很清析,对于调试脚本很不方便,而命名参数能够在必定程度上使语义更清楚,出错的可能性也会更小.下面就介绍一下powershell中的命名参数,咱们新建一个名为build.ps1(名称能够随便起)

param($build,$version)

echo "current build type is: $build,and the version is:$version"

以上脚本咱们经过param关键字建立了两个命名参数,$build和$version(powershell中参数命名前面要加一个$符号),咱们在当前脚本所在文件夹下打开powershell命令窗口,而后执行如下命令

.\build.ps1 -version 1.0 -build development

能够看到这里是经过-+参数名的方式来传入命名参数

能够看到输出以下结果

current build type is: development,and the version is:1

你们能够看到,无论-version-build位置如何,输出的结果都是同样的.

明眼的同窗可能会发现一点小问题,那就是-versoin输入的参数是1.0而输出的结果倒是1,这是由于powershell把1.0看成数字来处理了,舍弃掉了没有用的小数位,咱们想要输出1.0只须要把1.0用引号引发来就好了,固然还有其它办法,那就是指定参数的类型,指定参数类型超出了本节讲解的范围.有兴趣的童鞋能够查阅相关资料深刻了解.