(后期添加:

  这篇博客是在刚研究并发构建时写的,所以方法比较老套,采用的时流水线(pipeline)的方式,实现时通过如果job的用户配置来创建多个新的执行任务的job,并且将执行日志回收到入口job,任务执行结束后删除job,基本上是采用jenkins api来创建job-->执行job-->删除job,这样的方法比较麻烦,并且不直观。但是如果你想了解jenkins api如何实现流水线来仿照并发构建过程,你可以参考下这篇博客~~

后面资料看多了,也手动操作多了,发现并发构建有更加简单的办法,请参考我的另外一篇博客:https://www.cnblogs.com/zndxall/p/8516189.html

可以参考对应的API,下面是关于我的任务场景的不同jenkins内置命令的使用。

任务1:实现多用户同时触发任务

分析:常见情况是我们只需要一个人触发jenkins出包给其它人用,但是如果想结合个人构建,那么明显一个任务多个人触发时,必须要等上一次构建结束,才能开始下一次的构建,因为只有一个任务入口,举个例子,比如一个餐厅,只有一个服务员一张餐桌,只能容下一个客人,那么其它客人就必须排队,等这个客人吃完了,多用户的模式就是有一个点单员和多个服务员和多张桌子,客人只要告诉点单员,接下来就有其它服务员来一对一服务你,不会像第一种情况那样,完全卡在一个人。

方法:还是要保持有一个job做入口,但是这个job的用时要尽量控制到最短,然后下发任务到其它下游job执行,下游job的特点就是要跟用户相关,能够标识用户。我的步骤:

1.入口job主要的任务是获取当前是哪个用户触发的,以及该次触发的num是多少,并保存用的配置;

  需要的插件'user build vars plugin'  在任务配置中勾选如下:

然后使用如下命令就可以获取到user和num

echo jenkins var as follow:
echo build_num=$BUILD_NUMBER
echo build_user=$BUILD_USER

2.创建一个模板任务,根据自己的需要做好设置,目的主要是为了获取一个简单标准的config.xml文件,后面要用到,我的模板任务设置如下:

处理上面1的设置,还有就是执行脚本的设置,其中上面的“sh /usr/local/scripts/build_scripts/build_mode.sh build_branch push_action build_channel build_tvar build_code build_job ”这一窜随便写,里面对应的build_mode.sh实际也是不存在的,这串会被记录在job的config.xml中,后面我会用自己实际的脚本名来替换,马上你就可以看到了。

3.(1)在入口job,比如mul_user作为入口job,在mul_user的job调用curl -u admin:123456  $jenkins_url/job/Build_Template/config.xml -o config.xml -v 获取模板Build_Template的config.xml,(-o 后面的是下载到本地的文件名)参考我上面的模板配置,这个config.xml文件如下,我只截取了我需要改动的部分,就是构建部分,就是步骤2的那段字符串sh /usr/local/scripts/build_scripts/build_mode.sh build_branch push_action build_channel build_tvar build_code build_job,然后根据自己的需要修改这个本地的这个config.xml中的构建字段,我的修改如下:

sed -i 's/build_mode/push_tag/g' config.xml
sed -i s/build_branch/$1/g config.xml
sed -i s/push_action/$2/g config.xml
sed -i s/build_channel/$3/g config.xml
sed -i s/build_tvar/$4/g config.xml
sed -i s/build_code/$build_module/g config.xml
sed -i s/build_job/$build_name/g config.xml

(2)使用curl -u admin:123456 -X POST $jenkins_url/createItem?name=$build_name  -d @config.xml -H "Content-Type: text/xml" 创建一个新的任务,其中build_name,我使用的是$user_$name_模块的组合,能够唯一表示是哪个用户的哪次的哪个模块的构建,再看@config.xml 说明我们需要依赖这个配置文件,才能生成新的job,由于这个config.xml文件是来自于我们事先设置的模板的模板文件,所以这个新的job和模板job的结构是一样的,除了那串构建被替换成了我们需要的脚本。

(3)使用curl -u admin:123456 -X POST $jenkins_url/job/$build_name/build 来触发新的job的构建,到此,入口job mul_user的任务就完成了,我自己的设置发现,十几秒这个入口job就结束了,触发构建后,下游job会自己跑起来。

4.在下游job跑完以后,调用curl -u admin:123456 -X POST $jenkins_url/job/$6/doDelete 来删除刚才新建的job,这个动作可以在新建job中调用脚本是实现。

由于任务删除后,新建的job构建日志就看不到了,所以建议将步骤2的模板job的构建阶段修改为sh /usr/local/scripts/build_scripts/build_mode.sh build_branch push_action build_channel build_tvar build_code build_job |tee console_log,使用tee 命令 将log保存下来,然后存放到其它位置,方便出错时检查问题。

任务2:修改job的config.xm后不重启服务生效

描述:有时候,我们的构建是带参数构建的,但是参数内容会经常有变化,就需要手动去修改参数,比如某一个模块的代码经常会迁分支,也会合入主线,每次有新的分支增加的时候就需要去界面配置,有分支合入的时候,又要去界面删除,这样很麻烦。

分析:既然界面的配置都会被保存在任务的$jenkins_path/jobs/$job/config.xml文件中,那么只要修改这个config.xml文件就可以了。

难点:发现,修改了这个文件以后,再去刷jenkins界面,修改并没有生效,查资料说,需要重启服务器才能生效,重启后果然生效了,但是这并不使用,有没什么方法不需要重启就能生效呢。

解决:使用jenkins的内置命令reload即可,命令为:curl -u admin:1234456 -X POST $jenkins_url/$job_name/reload 。

  这样,不需要重启就能生效。

jenkins 实现多用户同时触发任务 + 修改job的config.xml 不重启服务生效的更多相关文章

  1. static final修饰的静态变量修改后更新到服务器,重启无法生效的问题

    今天在工作中碰到这样一个问题,有一个常量类,将工程中常用的一些变量定义在了里面.今天我要修改其中的某个变量.修改完后将编译好的.class文件更新到了服务器上,但是重启服务器后发现始终没有变化,还是以 ...

  2. 升级jenkins之后无法启动 报错Unable to read /var/lib/jenkins/config.xml

    故障记录 点击jenkins升级后再点击回滚到之前版本,jenkins就起不来了. 欲哭无泪,报错如下 hudson.util.HudsonFailedToLoad: org.jvnet.hudson ...

  3. MYSQL修改配置文件之后无法重启服务

    错误:修改配置文件my.ini之后无法重启服务. 原因:以记事本方式打开my.ini文件修改完之后保存.保存之后文本编码格式为操作系统默认格式utf-8.my.ini格式要是ANSI才可以正常启动服务 ...

  4. 【06】Jenkins:Gitlab 自动触发构建以及钉钉通知

    写在前面的话 在某些时候,我们希望能够实现这样一个功能,当用户提交东西到 gitlab 上的时候,希望它能够自动触发构建,发布到我们需要的环境. 目前我们内部有做类似的需求:产品提交原型到 gitla ...

  5. 【转】windows7 修改环境变量 和 用不用重启电脑的讨论

      原文:http://www.cnblogs.com/zhenmingliu/archive/2013/02/21/2921396.html   先到我的电脑>属性>高级>环境变量 ...

  6. 修改Android中strings.xml文件, 动态改变数据

    有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...

  7. 【ROM修改教程】添加高级电源重启菜单(安卓4.0.4官方ROM)

    准备工作: 电脑上安装好JDK.下载smali和baksmali.下载apktools.要修改的ROM.adb工具(可选) 注:由于本教程面向的对象为有一定ROM修改基础的兄弟,所以对于如何使用电脑, ...

  8. Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器

    修改root用户密码 打开终端,输入 sudo passwd root 指令: 安装SSH服务 ssh默认端口号是22,可以在/etc/ssh/sshd_config文件中修改 查看服务器否开启:ne ...

  9. 【IDEA】IDEA设置修改完JS和JSP不用重启的办法(IDEA热部署)

    修改完JS和JSP不停的重启服务器真的很烦,所以设置修改完之后不用重启也生效: 前提有两个: 确保使用的是debug模式. 确保tomcat是由idea实例化的.也就是说tomcat是在idea中配置 ...

随机推荐

  1. CSS3实战开发: 折角效果实战开发

    <!DOCTYPE html> <html> <head> <meta charset="utf-9"> <meta name ...

  2. Kindle2018 一周使用报告

    使用2018年年末刚刚发布的KPW有一周时间了,可以借这个机会来对这部设备做一个使用报告了. 那咱们就参考如下描述吧: 1.轻薄便携:6英寸的屏幕,11.6厘米*16.7厘米的机身尺寸,加上仅有8.2 ...

  3. 浅析原生js模仿addclass和removeclass

    //判断有没有class hasClass(elements, cName) { return !!elements.className.match(new RegExp("(\\s|^)& ...

  4. [No0000107]C#中 Excel列字母与数字的转换

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. [No0000B6]C#中 ==与equals的区别

    using System; internal class Person { public Person(string name) { Name = name; } public string Name ...

  6. centos7安装Apache

    1.下载安装包wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.37.tar.gz 2.解压tar zxvf httpd-2.4.37.ta ...

  7. gitignore 不起作用的解决办法

    gitignore 不起作用的解决办法 - sloong - 博客园 https://www.cnblogs.com/sloong/p/5523244.html Administrator@PC-20 ...

  8. [dev][https] 非PFS协商的https的流量的解码

    经过基础调研之后,目前准备确认实现方案,完成对https的解码. 之前的调研,传送门: http://www.cnblogs.com/hugetong/p/6670083.html 1. 需求: 以旁 ...

  9. FFmpeg 裁剪——音频解码

    配置ffmpeg,只留下某些音频的配置: ./configure --enable-shared --disable-yasm --enable-memalign-hack --enable-gpl ...

  10. windows版本下ELK配置

    windows版本的es和kibana相对配置起来很简单,网上已经有很多例子都是正确的,只需按照步骤安装一下即可. 主要logstash,网上说的方案,大都不能配置成功,或者总有一些错误,下面把我自己 ...