远程触发Jenkins的Pipeline任务的并发问题处理
前文概述
本文是《远程触发Jenkins的pipeline任务》的续篇,上一篇文章实战了如何通过Http请求远程触发指定的Jenkins任务,并且将参数传递给Jenkins任务去使用,文末提到了有个并发问题待处理,这就是本文的内容:处理上一篇文章提到的遗留问题。
远程触发Jenkins的问题
对Jenkins服务来说,很有可能在某一时刻同时收到多个Http请求,并且这些请求都想触发同一个任务,在实际使用中发现此时Jenkins并不对每个请求都运行一次任务,接下来的实战,我们就来重现并解决此问题;
用Java代码实现多个并发请求
- 我们用代码来模拟同一时刻多个Http请求到达Jenkins的情况:写个Java程序,一次性发送10个Http请求,都是远程触发上一章的Jenkins任务的,参考源码如下:
package com.bolingcavalry;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class App {
public static void main( String[] args ) throws Exception {
for(int i=0;i<10;i++) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("ref", "ref-"+i);
jsonObject.put("repositoryURL","https://github.com/zq2599/jenkinsdemo.git");
jsonObject.put("branch", "master");
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://192.168.133.149:32049/generic-webhook-trigger/invoke?token=token-remote-test");
httpPost.addHeader("Content-Type", "application/json");
httpPost.setEntity(new StringEntity(jsonObject.toJSONString()));
CloseableHttpResponse response = httpClient.execute(httpPost);
response.close();
httpClient.close();
System.out.println("response code : " + response.getStatusLine().getStatusCode() + "\n");
}
}
}
- 执行上述Java代码,控制台输出如下图,返回码都是200,证明这10个请求全部成功了:

- 去Jenkins网页上却发现只执行了一次任务,但是10此请求的ref参数都被打印出来了,如下图:

- 10次请求,Jenkins只执行了一次任务,这样的结果显然不是我们想要的,经过摸索和尝试,终于找到了解决此问题的办法;
- 打开任务remote-test的设置页面,如下图,勾选红框1(This project is parameterized),点击红框2增加一个参数,再点击红框3增加一个字符串类型的参数:

- 在参数的编辑框中,Name字段填写ref,如下图红框所示,注意这个参数在上一篇文章中在Generic Webhook Trigger的参数中设置过,是个固定参数:

- 点击底部的Save按钮保存设置;
- 在此运行前面的Java程序,发起10个请求,这次Jenkins创建了10个任务了,如下图:

- 点开其中的一个查看日志,如下图,可见参数正确,并且任务执行成功:

远程触发Jenkins任务的并发问题已经修复,如果您也遇到了类型问题,希望本文能给您一些参考。
https://github.com/zq2599/blog_demos
远程触发Jenkins的Pipeline任务的并发问题处理的更多相关文章
- 远程触发Jenkins的Pipeline任务
场景 虽然能配置提交代码时触发Jenkins任务,但有时并不需要每次提交代码都触发,而是仅在有需要时才执行. 除了在Jenkins页面上手动执行任务,还可以向Jenkins网站发起HTTP请求,触发指 ...
- jenkins:一个jenkins项目远程触发另一个jenkins项目构建配置
很多时候,我们会有这样的应用场景:一个jenkins上的项目构建后,需要远程触发另一台机子上的jenkins中某个项目的构建,可以通过Parameterized Remote Trigger Conf ...
- Ubuntu中实现Docker内安装jenkins+jenkins远程触发
前面做了在ubuntu中安装jenkins+docker实现自动部署,但是得安装jdk8+tomcat8环境,比较麻烦,因此本文记录如何将jenkins直接装在dockers内并且实现远程触发功能. ...
- linux服务器上的jenkins远程触发构建windows server 2012服务器上的jenkins任务
本文来自:https://blog.csdn.net/huashao0602/article/details/53318295 非常感谢原博主,亲测可行,这是我做CI持续集成试过的第6套方案了! 背 ...
- Gitlab源码库里代码提交后,如何触发jenkins自动构建?
版本库里代码提交后,如何触发jenkins自动构建?这是一个面试题,感觉自己回答的并不好,因为并没有用过这个功能,之前公司实际项目用的是svn版本管理,一般都用立刻构建,和定时任务构建(不管代码是否有 ...
- [转]利用Jenkins的Pipeline实现集群自动化部署SpringBoot项目
环境准备 Git: 安装部署使用略. Jenkins: 2.46.2版本安装部署略(修改jenkins执行用户为root,省得配置权限) JDK: 安装部署略. Maven: 安装部署略. 服务器免密 ...
- 使用TortoiseSVN的客户端钩子脚本触发Jenkins构建
我们项目在开发过程中使用了Jenkins构建Windows版本,为了通过自动触发使构建的版本保持最新,可以采用的方法如下: Jenkins Poll SCM:设置Jenkins定时检查变更,在SVN版 ...
- 六、配置github的pull request触发jenkins自动构建
之前的配置,都是向master分支push操作触发jenkins进行构建,但是在一般的正常工作中,不会允许程序员直接向主分支推送代码:正常都是fork一个本地的分支,在本地分支调试完后,向主干分支提交 ...
- GitLab 自动触发 Jenkins 构建
GitLab 是当前应用非常广泛的 Git Hosting 工具,Jenkins 是非常牛逼的持续集成工具.尽管 GitLab 有内建的 GitLab CI,但它远没有 Jenkins 那么强大好用. ...
随机推荐
- tp5下的文件上传与下载类
class FieldInterfun extends Controller { /** * [upload 上传文件] * @param [type] $file [description] * @ ...
- java初探(1)之登录再探
https://www.cnblogs.com/lovejune/p/java_login_1.html 上一章内容搭建起了登录应用场景的环境,模拟实现了登录操作,页面与后端数据的交互过程,使用的是异 ...
- Java垃圾回收略略观
本文主要介绍Java垃圾回收(Garbage Collection),90%干货,文字颇多,需要耐心一点看. [对象判断状态算法] ------引用计数法 在创建对象时,为对象创建一个伴生的引用计数器 ...
- let与const认识
es2015之前 在es2015之前JavaScript并没有块级作用域这个说法,只有全局和函数级的变量,let的出现使JavaScript语言有了块级作用域 在外面访问 { var a=5; l ...
- Cocos Creator 性能优化:DrawCall
前言 在游戏开发中,DrawCall 作为一个非常重要的性能指标,直接影响游戏的整体性能表现. 无论是 Cocos Creator.Unity.Unreal 还是其他游戏引擎,只要说到游戏性能优化,D ...
- Bootstrap4总结
一. bootstrap简介 Bootstrap,来自 Twitter(全国最大的微博),是目前最受欢迎的前端框架. bootstrap下载及演示 http://v3.bootcss.com 什么是b ...
- Linux:配置apache支持php
对apache的主配置文件进行修改 vi /application/apache/conf/httpd.conf 1.增加下面内容 AddType application/x-httpd-php .p ...
- C Primer Plus 学习笔记
随笔: 1)C语言中%3d%2d什么意思? 格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,用来确定输出内容格式.在"%"和字母之间插进数字表示最大场 ...
- python中使用mock模块返回数据
mock是辅助单元测试的一个模块.它允许您用模拟对象替换您的系统的部分,并对它们已使用的方式进行断言. mock在python3中已经被集成到了unittest单元测试框架中,所以,可以直接使用. m ...
- SpringCloud系列之Nacos+Dubbo+Seata应用篇
目录 前言 项目版本 项目说明 Nacos服务 Seata服务 订单模块 支付模块 参考资料 系列文章 前言 本文接上篇文章<SpringCloud系列之Nacos+Dubbo应用篇>继续 ...