首页 > 其他分享 >远程触发Jenkins的Pipeline任务的并发问题处理

远程触发Jenkins的Pipeline任务的并发问题处理

时间:2022-11-26 15:33:24浏览次数:66  
标签:10 Pipeline Java 请求 并发 任务 Jenkins import

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

前文概述

  • 本文是《远程触发Jenkins的Pipeline任务》的续篇,上一篇实战了通过Http请求远程触发指定的Jenkins任务,并且将参数传递给Jenkins任务的Pipeline脚本使用,文末提到有个并发问题留待本文来处理;

远程触发Jenkins的问题

  • 对Jenkins服务来说,很可能在某一时刻收到多个Http请求,并且这些请求都想触发同一任务,在实际使用中发现此时Jenkins并不对每个请求都运行一次任务,接下来的实战,我们就来重现并解决此问题;

  • 用Java代码实现多个并发请求

  • 用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任务的并发问题已经修复,如果您也遇到了类型问题,希望本文能给您一些参考。

欢迎关注51CTO博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

标签:10,Pipeline,Java,请求,并发,任务,Jenkins,import
From: https://blog.51cto.com/zq2599/5888949

相关文章

  • 从多线程模型理解并发
    学习完各种线程模型之后,试图从线程模型出发去理解设计者设计这些锁,多线程工具的时候的思想https://articles.zsxq.com/id_rk2jkvxq1n4d.htmlMESA管程模型提到多线程就......
  • Jenkins安装与构建生产线
    一、安装Jenkins挂载宿主机docker目录,使Jenkins可使用宿主机docker命令dockerrun-d-uroot-v/var/jenkins:/var/jenkins_home-v'/usr/bin/docker:/usr/bin/docke......
  • jmeter并发测试如何保证多线程多请求按照顺序执行【杭州多测师】【杭州多测师_王sir】
    1、没有处理线程执行顺序时,多个线程里的请求是一起执行的,不分先后。(未勾选独立线程运行结果)2、在测试计划里勾选独立运行每个线程组。(测试计划处勾选独立运行每个线程组)3、......
  • 1.2. jenkins安装和部署-k8s版本
    物料清单-组件-版本k8s1.23.10kubespherev3.3.1jenkins版本2.361.4部署创建Namespace在kubesphere上工作台->企业空间->点击创建->填写名称ws......
  • 1.3. jenkins插件安装
    配置代理由于国外的升级站点网络不稳定,因此在安装插件前,我们首先要将其修改为中文社区提供的站点https://updates.jenkins-zh.cn/update-center.json.操作步骤点击......
  • Jenkinsfile 详解
    PipelinePipeline是Jenkins中最为灵活的job构建方式,可实现像流水线一样调度Jenkins任务,通过Jenkinsfile描述整个持续集成流程。Pipeline支持使用声明式语法编......
  • 《C++ 并发编程实战 第二版》:条件变量唤醒丢失与虚假唤醒
    《C++并发编程实战第二版》:条件变量唤醒丢失与虚假唤醒本文主要是对《C++并发编程实战第二版》第4章中条件变量部分做进一步探究,主要内容为使用条件变量时可能会碰到......
  • jenkins pipline 基本语法详解(第四周)
    pipline简介pipline运行在jenkins2.X版本的核心插件,Pipline就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成......
  • [Linux高并发服务器]进程间通信简介
    [Linux高并发服务器]进程间通信简介摘自​​牛客项目课Linux高并发服务器​​概念进程间通信IPC:InterProcessesCommunication为什么需要进程间通信进程是一个独立的资......
  • [Linux 高并发服务器] exec函数族
    [Linux高并发服务器]exec函数族exec函数族exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件......