系列目录
本系列已经很久没有更新了, 接前面基础篇, 本系统主要介绍 jenkins 构建里的一些高级特性. 包括脚本参数化, Jenkins Pipeline 与及在 PipeLine 模式下如何执行常见的传统构建任务 (这里指 jenkins 自由风格构建模式),jenkins cli,jenkins SSH,jenkins 任务调度, 资源调度, jenkins 任务远程触发, jenkins 混合集群搭建(同时包含 Windows 和 Linux 节点) 等高级功能.
jenkins 参数化构建
在一些复杂的构建中, 我们可能需要指定很多参数, 如果这些参数都写死在 cmd 或者 powershell 脚本或者 SSH 脚本里, 脚本的可扩展性将严重受限, 最为重要的是修改构建脚本可能会造成严重后果(尤其是一些非常复杂的脚本), 这里的一个最佳实践就是不要轻易更改生产环境的脚本文件. 而参数化构建可以大大增加脚本的可扩展性.
Jenkins 提供了丰富的参数配置入口结合脚本自身的外部参数处理可以实现非常灵活的脚本参数配置. 下面从脚本自身参数化选项, 项目级参数化配置, 节点级参数化配置以及全局参数配置来详细讲解如何在 Jenkins 里实现参数化配置.
脚本自身参数化配置
下面分别介绍 bat 脚本和 powershell 脚本如何接收外部参数
bat 脚本接收外部参数
在 Windows bat 脚本命令里, 可以通过 %0,%1,%2... 以此类推来接收外部传入参数, 其中 %0 为脚本自身的名称, 很多时候不是我们需要的, 我们可以从 %1 开始接收外部传入参数. 我们假如有以下一个名为 build.bat 的脚本, 它用作构建测试环境和生产环境的脚本, 测试环境和生产环境的构建可以通过一个外部参数来判断. 为了简单起见我们并不使用真实环境的构建脚本, 而是简单模拟, 希望读者能够举一反三, 联系到真实环境应用场景.
这个 bat 脚本非常简单, 就一行代码
echo %1
shell 接收外部参数
在 Jenkins 中, 除了 powershell 和 bat 命令外, 其它地方接收外部参数的方法写法都是 shell 语法写法, 即 ${参数名}形式
如果我们传入什么就会打印什么, 我们传入 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 用引号引起来就行了, 当然还有其它办法, 那就是指定参数的类型, 指定参数类型超出了本节讲解的范围. 有兴趣的童鞋可以查阅相关资料深入了解.
来源: https://www.cnblogs.com/tylerzhou/p/11421782.html