(后期添加:

  这篇博客是在刚研究并发构建时写的,所以方法比较老套,采用的时流水线(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. 学习markdown语法

    12.内部跳转 [这是一个按钮](#测试标题) - 1 - 1 - 1 # 测试标题 这是一个按钮 1 1 1 测试标题 注:使用-代替空格

  2. Flask web开发之路二

    今天创建第一个flask项目,主app文件代码如下: # 从flask这个框架导入Flask这个类 from flask import Flask #初始化一个Flask对象 # Flasks() # ...

  3. Codeforces 758C-Unfair Poll

    Unfair Poll time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  4. html学习_表格、表单

    表格(table):是用来处理表格式数据的,不是用来布局的. table > tr(行标签)>  td(单元格标签) 1.表格注意事项: tr只能放置td标签,td里面可以放置任意元素. ...

  5. {MySQL存储引擎介绍}一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用

    MySQL存储引擎介绍 MySQL之存储引擎 本节目录 一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用 一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是 ...

  6. 关于Dosbox0.74无法使用masm命令

    今天尝试在dosbox里编译asm源代码文件 但是提示“illegal command”,也就是非法命令 开始还以为我的dosbox版本不对 但是去网上查阅资料发现别人用这个版本都可以使用 所以百思不 ...

  7. 配置hadoop集群,完全分布式模式

    [/soft/hadoop/etc/hadoop] [hdfs-site.xml] <configuration> <property> <name>dfs.rep ...

  8. git 命令详细介绍

    Git 命令详解 Git的基本命令: git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就是将origin这个版本 ...

  9. ORACLE network environment

    监听程序 建立网络连接 要建立客户机或中间层连接,Oracle Net要求客户机 下列事项: 运行监听程序的主机 监听程序监视的端口 监听程序使用的协议 监听程序处理的服务名 Hostname/ip ...

  10. knn/kmeans/kmeans++/Mini Batch K-means/Affinity Propagation/Mean Shift/层次聚类/DBSCAN 区别

    可以看出来除了KNN以外其他算法都是聚类算法 1.knn/kmeans/kmeans++区别 先给大家贴个简洁明了的图,好几个地方都看到过,我也不知道到底谁是原作者啦,如果侵权麻烦联系我咯~~~~ k ...