远程触发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 那么强大好用. ...
随机推荐
- Python Embedded
文档 https://docs.python.org/3/extending/index.html https://www.codeproject.com/articles/11805/embeddi ...
- vue问题整理
生命周期面试题 1.什么是 vue 生命周期 vue 实例从创建到销毁的过程就是生命周期. 也就是从开始创建.初始化数据.编译模板.挂在 dom -> 渲染.更新 -> 渲染.卸载等一系列 ...
- VS提交码云权限问题
提交代码时出现Git failed with a fatal error. Authentication failed的问题. 如果没有像当前代码库提交过代码(所有项目),那么提交时会提示输入账号密码 ...
- 哈希,hash
Hash,一般翻译做散列.杂凑,或音译为哈希.----摘自百度百科 先来看个题:给你一坨一些键值集<key,value>,\(key\)的范围是\([1,10^{10}]\),每次询问\( ...
- Zabbix如何解决“System time is out of sync (diff with Zabbix server > 60s)”告警
Zabbix如何解决"System time is out of sync (diff with Zabbix server > 60s)"这种告警呢? 这个错误对应的中文提 ...
- 区块链Fabric 交易流程
1. 提交交易预案 1)应用端首先构建交易的预案,预案的作用是调用通道中的链码来读取或者写入账本的数据.应用端使用 Fabric 的 SDK 打包交易预案,并使用用户的私钥对预案进行签名. 应用打包完 ...
- CentOS如何设置IP连接网络
1.登录系统,进入:cd /etc/sysconfig/network-scripts 目录下,如下图: 找到 ifcfg-ens33(文件) 第二步:使用vi编辑器打开ifcfg-ens33文件,使 ...
- 备忘录:SQL SERVER2014 出现:“Cannot find one or more components”
目录 1. 起因 2. 解决方案 3. 备注 4. 参考 2020年9月13日 00:40:09-shanzm 1. 起因 因为卸载vs2015的时候,使用了一个VS2013/2015卸载工具Tota ...
- Kubernetes探针踩坑记
1. 荒腔走板 最近一两个月生产K8s集群频繁出现短时503 Service Temporarily Unavailable,还不能主动复现,相当郁闷,压力山大. HTTP 5xx响应状态码用于定义服 ...
- python中的算数运算符+、-、*、/、//、%、**
例如a=5,b=2 + 两个对象相加 a+b=7 - 两个对象相减 a- ...