系列目录

本系列已经很久没有更新了,接前面基础篇,本系统主要介绍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用引号引起来就行了,当然还有其它办法,那就是指定参数的类型,指定参数类型超出了本节讲解的范围.有兴趣的童鞋可以查阅相关资料深入了解.

持续集成高级篇之Jekins脚本参数化构建的更多相关文章

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

    系列目录 上一节我们讲解了如何使用bat脚本或者powershell脚本自身的机制来达到参数化构建的目的,这在一定程序上增加了灵活性,然而缺点也相当明显:它只能适应一些相对比较固定的参数传入(比如像上 ...

  2. 持续集成高级篇之Jekins参数传入与常见任务

    系列目录 有的童鞋可能已经发现,PipeLine项目与自由式项目相比,可配置的项少了很多,比如说环境变量定义,所有步骤完成后执行动作,拉git代码库等.其实这些功能并没有缺,而是配置的方式不一样了,以 ...

  3. 持续集成高级篇之Jenkins cli与Jenkins ssh

    系列目录 Jenkins Cli介绍 Jenkins Cli为Jenkins提供的一个cli工具,此工具功能非常强大,可以完成诸如重启jenkins,创建/删除job,查看job控制台输出,添加/删除 ...

  4. 持续集成高级篇之基于win32-openssh搭建jenkins混合集群(一)

    系列目录 前面的demo我们使用的都是只有一个windows主节点的的jenkins,实际生产环境中,一个节点往往是不能满足需求的.比如,.net项目要使用windows节点构建,java项目如果部署 ...

  5. 持续集成高级篇之Jenkins Pipeline 集成sonarqube

    系列目录 前面章节中我们讲到了Sonarqube的使用,其实Sonarqube获取msbuild结果主要是执行三个命令,开始标记,执行msbuild,结束标记,这些都是命令,是非常容易集成到我们ci流 ...

  6. 持续集成高级篇之Jenkins Pipeline git拉取

    系列目录 PipeLine中拉取远程git仓库 前面讲自由式任务的时候,我们可以看到通过自由式job里提供的图形界面配置git拉取非常方便的,实际上使用PipeLine也并不复杂.这一节我们展示一下如 ...

  7. 持续集成高级篇之Jenkins资源调度

    系列目录 之前的示例我们主要关注点在于功能的实现,都是在一个节点的完成了.有了多个节点后,必须涉及到资源的调度问题.本节我们讲解在创建任务时与资源调度的有关选项以及一些平时没有注意到的但在生产环境需要 ...

  8. 持续集成高级篇之Jenkins windows/linux混合集群搭建(二)

    系列目录 前面我们说过,要使用ssh方式来配置windows从节点,如果采用ssh方式,则windows和linux配置从节点几乎没有区别,目前发现的惟一的区别在于windows从节点上目录要设置在c ...

  9. Jenkins持续集成企业实战系列之Jenkins手动构建-----04

    注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.    最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...

随机推荐

  1. C#2.0新增功能01 分布类与分部方法

    连载目录    [已更新最新开发文章,点击查看详细] 分部类型 拆分一个类.一个结构.一个接口或一个方法的定义到两个或更多的文件中, 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组 ...

  2. Linux版本划分——基于打包方式

    基于Dpkg (Debian系) Debian GNU / Linux是一种强调使用自由软件的发行版.它支持多种硬件平台.Debian及其派生发行版使用deb软件包格式,并使用dpkg及其前端作为包管 ...

  3. 洛谷 P5150 题解

    题面 因为 n=lcm(a,b)n = lcm(a, b)n=lcm(a,b) ,可以得出: a  和 b  的质因数都是 n 的质因数 对于 n  的每个质因数 x ,在 n 中的次数为 y ,那么 ...

  4. jdk1.8源码解析:HashMap底层数据结构之链表转红黑树的具体时机

    本文从三个部分去探究HashMap的链表转红黑树的具体时机: 一.从HashMap中有关“链表转红黑树”阈值的声明: 二.[重点]解析HashMap.put(K key, V value)的源码: 三 ...

  5. 实用小工具推荐 OpenWrite

    [实用小工具推荐]给技术同学们推荐一款比较好用的工具,可以实现一稿多发,主流的技术渠道基本涵盖了:https://www.openwrite.cn/ 因为工作的关系,认识了很多做技术公众号的小伙伴,同 ...

  6. 搭建谷歌浏览器无头模式抓取页面服务,laravel->php->python->docker !!!

    背景: 公司管理系统需要获取企业微信页面的配置参数如企业名.logo.人数等信息并操作,来隐藏相关敏感信息并自定义简化企业号配置流程 第一版已经实现了扫码登录获取cookie,使用该cookie就能获 ...

  7. golang文档、中文、学习文档

    Golang中文文档地址 http://zh-golang.appspot.com/doc/ Golang非英文文档地址: https://github.com/golang/go/wiki/NonE ...

  8. 关于HostnameVerifier接口的解读

    在项目中我们需要调用https接口请求.我们使用httpClient,构建HttpClient对象时涉及到使用HostnameVerifier接口实例. HostnameVerifier接口定义如下: ...

  9. 创建String对象过程的内存分配

      转载自  https://blog.csdn.net/xiabing082/article/details/49759071       常量池(Constant Pool):指的是在编译期被确定 ...

  10. 最基础的 ant build 脚本

    最基础的 ant build 脚本,根据项目,自行进行修改 <?xml version="1.0" encoding="UTF-8" ?> < ...