jenkins 实现多用户同时触发任务 + 修改job的config.xml 不重启服务生效
(后期添加:
这篇博客是在刚研究并发构建时写的,所以方法比较老套,采用的时流水线(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 不重启服务生效的更多相关文章
- static final修饰的静态变量修改后更新到服务器,重启无法生效的问题
今天在工作中碰到这样一个问题,有一个常量类,将工程中常用的一些变量定义在了里面.今天我要修改其中的某个变量.修改完后将编译好的.class文件更新到了服务器上,但是重启服务器后发现始终没有变化,还是以 ...
- 升级jenkins之后无法启动 报错Unable to read /var/lib/jenkins/config.xml
故障记录 点击jenkins升级后再点击回滚到之前版本,jenkins就起不来了. 欲哭无泪,报错如下 hudson.util.HudsonFailedToLoad: org.jvnet.hudson ...
- MYSQL修改配置文件之后无法重启服务
错误:修改配置文件my.ini之后无法重启服务. 原因:以记事本方式打开my.ini文件修改完之后保存.保存之后文本编码格式为操作系统默认格式utf-8.my.ini格式要是ANSI才可以正常启动服务 ...
- 【06】Jenkins:Gitlab 自动触发构建以及钉钉通知
写在前面的话 在某些时候,我们希望能够实现这样一个功能,当用户提交东西到 gitlab 上的时候,希望它能够自动触发构建,发布到我们需要的环境. 目前我们内部有做类似的需求:产品提交原型到 gitla ...
- 【转】windows7 修改环境变量 和 用不用重启电脑的讨论
原文:http://www.cnblogs.com/zhenmingliu/archive/2013/02/21/2921396.html 先到我的电脑>属性>高级>环境变量 ...
- 修改Android中strings.xml文件, 动态改变数据
有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...
- 【ROM修改教程】添加高级电源重启菜单(安卓4.0.4官方ROM)
准备工作: 电脑上安装好JDK.下载smali和baksmali.下载apktools.要修改的ROM.adb工具(可选) 注:由于本教程面向的对象为有一定ROM修改基础的兄弟,所以对于如何使用电脑, ...
- Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器
修改root用户密码 打开终端,输入 sudo passwd root 指令: 安装SSH服务 ssh默认端口号是22,可以在/etc/ssh/sshd_config文件中修改 查看服务器否开启:ne ...
- 【IDEA】IDEA设置修改完JS和JSP不用重启的办法(IDEA热部署)
修改完JS和JSP不停的重启服务器真的很烦,所以设置修改完之后不用重启也生效: 前提有两个: 确保使用的是debug模式. 确保tomcat是由idea实例化的.也就是说tomcat是在idea中配置 ...
随机推荐
- 在PHP系统里连接MySQL 数据访问,+ + + + + 数据删除
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python----流程控制
计算机程序在解决某个具体问题时,包括三种情形,即顺序执行所有的语句.选择执行部分的语句和循环执行部分语句,这正好对应着程序设计中的三种程序执行结构流程:顺序结构.选择结构和循环结构. 事实证明,任何一 ...
- 二叉苹果树|codevs5565|luoguP2015|树形DP|Elena
二叉苹果树 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的 ...
- Codeforces 670E - Correct Bracket Sequence Editor - [线段树]
题目链接:https://codeforces.com/contest/670/problem/E 题意: 给出一个已经匹配的括号串,给出起始的光标位置(光标总是指向某个括号). 有如下操作: 1.往 ...
- [No0000F9]C# 运算符重载
您可以重定义或重载 C# 中内置的运算符.因此,程序员也可以使用用户自定义类型的运算符.重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的.与其他函数一样,重载运 ...
- 优化网站设计(九):减少DNS查找的次数
前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议.这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题. 作为通用的原则,雅虎的工程师团队曾经给出过35个 ...
- [ovs][libvirt][virtio][qemu] vhost user client 排障
ovs-dpdk + qemu 使用vhostuserclient通信,连路不通,libvirt报错如下: -- ::: starting up libvirt version: , package: ...
- [administrative][lvm] lvm 分区修改
默认安装的CentOS6.3操作系统,使用lvm分区.root挂载了50G,home挂载了1.5T. 由于需求要求,现在需要把home的1.5T全部移动到root下. 使用archiso启动,查看lv ...
- 网易云课堂-spark
==============================Flink比spark优秀,但既生瑜何生亮,所以Flink没火起来 为了使用sortbykey,需要RDD的元素是key-value的形式 ...
- 内部排序->交换排序->快速排序
文字描述 快速排序是对起泡排序的一种改进.它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个 ...