CI/CD(持续集成与持续交付)流水线
集成 Jenkins、GitLab Webhook、Nexus 和 RabbitMQ 可以形成一个全面的 CI/CD(持续集成与持续交付)流水线,结合消息队列可以创建事件驱动的工作流。以下是配置这四个工具以实现一个基本的 CI/CD 流程的详细步骤。
前置条件
Jenkins、GitLab、Nexus 和 RabbitMQ 实例已经安装并运行,各实例间网络通信正常。
Jenkins 有访问 GitLab 仓库、Nexus 仓库和 RabbitMQ 的权限。
一、配置 GitLab Webhook
Webhook 是 GitLab 推送代码变更后通知 Jenkins 的一种方式。
在 GitLab 中配置 Webhook
访问项目设置:
打开你的 GitLab 项目,点击左侧栏中的 Settings,然后选择 Webhooks。
添加 Webhook:
在 URL 字段中填写 Jenkins 的 Webhook URL,通常形式如下:
http://<jenkins-url>/project/<your-jenkins-job-name>
选择触发事件,例如 Push events、Merge Request events 等。
点击 Add webhook。
二、在 Jenkins 中配置 GitLab 和 Nexus
安装插件
打开 Jenkins 管理界面,选择 Manage Jenkins > Manage Plugins。
在 Available 标签页,搜索并安装以下插件:
GitLab Plugin
Git Plugin
Nexus Artifact Uploader Plugin
RabbitMQ Build Trigger Plugin
配置 GitLab 连接
打开 Jenkins 管理界面,选择 Manage Jenkins > Configure System。
在 GitLab 部分,添加 GitLab 服务器信息:
填写 GitLab 服务器 URL。
添加 GitLab API token,在 GitLab User Settings 中生成一个新的访问令牌(需要具备 api 权限)。
配置 Nexus 连接
打开 Jenkins 管理界面,选择 Manage Jenkins > Configure System。
滚动到 Nexus Artifact Uploader 部分,添加一个新的 Nexus 服务器配置,填写 URL、认证方式、用户名和密码。
配置 RabbitMQ 连接
打开 Jenkins 管理界面,选择 Manage Jenkins > Configure System。
在 RabbitMQ Build Triggers 部分,添加 RabbitMQ 服务器信息,包括主机名、端口、用户名和密码。可以选择一个交换机和队列名称。
三、创建 Jenkins Pipeline
通过 Jenkins Pipeline 配置整个 CI/CD 流程,包括从 GitLab 获取代码、构建、上传到 Nexus 和通过 RabbitMQ 发送消息。
Copy
pipeline {
agent any
environment {GIT_REPO_URL = 'https://gitlab.com/your-username/your-repo.git'NEXUS_URL = 'http://nexus.example.com'NEXUS_REPO = 'your-repo'NEXUS_GROUP = 'com.example'ARTIFACT_ID = 'your-artifact'VERSION = '1.0.0'RABBITMQ_HOST = 'rabbitmq.example.com'RABBITMQ_PORT = '5672'RABBITMQ_QUEUE = 'your-queue'RABBITMQ_USER = 'your-user'RABBITMQ_PASS = 'your-password'
}stages {stage('Checkout') {steps {git credentialsId: 'your-credentials-id', url: "${GIT_REPO_URL}"}}stage('Build') {steps {sh 'mvn clean package'}}stage('Test') {steps {sh 'mvn test'}}stage('Upload to Nexus') {steps {nexusArtifactUploader(nexusVersion: 'nexus3',protocol: 'http',nexusUrl: "${NEXUS_URL}",groupId: "${NEXUS_GROUP}",version: "${VERSION}",repository: "${NEXUS_REPO}",credentialsId: 'your-nexus-credentials-id',artifacts: [[artifactId: "${ARTIFACT_ID}",classifier: '',file: 'target/your-artifact.jar',type: 'jar']])}}stage('Send Message to RabbitMQ') {steps {script {def messageJson = """{"project": "${env.JOB_NAME}","build_number": "${env.BUILD_NUMBER}","status": "SUCCESS","artifactUrl": "${NEXUS_URL}/repository/${NEXUS_REPO}/${NEXUS_GROUP.replace('.', '/')}/${ARTIFACT_ID}/${VERSION}/${ARTIFACT_ID}-${VERSION}.jar"}"""sh """curl -X POST -d '${messageJson}' \-u ${RABBITMQ_USER}:${RABBITMQ_PASS} \http://${RABBITMQ_HOST}:${RABBITMQ_PORT}/api/exchanges/%2f/amq.default/publish \-H "content-type:application/json" \-d '{"properties": {},"routing_key": "${RABBITMQ_QUEUE}","payload": "${messageJson}","payload_encoding": "string"}'"""}}}
}post {success {echo 'Build, upload, and message sending completed successfully'}failure {echo 'Build, upload, or message sending failed'}
}
}
四、在 RabbitMQ 中监控和处理消息
为了处理从 Jenkins 发送到 RabbitMQ 的消息,需要在 RabbitMQ 的队列中创建一个消费者。
Python 示例消费者代码
你可以使用任何编程语言来编写 RabbitMQ 消息消费者,这里介绍一个用 Python 编写的示例消费者代码:
Copy
import pika
import json
def callback(ch, method, properties, body):
message = json.loads(body)
print(f"Received message: {message}")
connection = pika.BlockingConnection(pika.ConnectionParameters(‘rabbitmq.example.com’))
channel = connection.channel()
channel.queue_declare(queue=‘your-queue’)
channel.basic_consume(queue=‘your-queue’, on_message_callback=callback, auto_ack=True)
print(‘Waiting for messages. To exit press CTRL+C’)
channel.start_consuming()
总结
通过这些步骤,你可以配置一个集成了 Jenkins、GitLab Webhook、Nexus 和 RabbitMQ 的完整 CI/CD 流水线。这将使你的开发和部署流程更加自动化和高效。具体实现可能根据你的项目需求有所调整,你可以根据自己的需求定制和扩展这些配置。
相关文章:
CI/CD(持续集成与持续交付)流水线
集成 Jenkins、GitLab Webhook、Nexus 和 RabbitMQ 可以形成一个全面的 CI/CD(持续集成与持续交付)流水线,结合消息队列可以创建事件驱动的工作流。以下是配置这四个工具以实现一个基本的 CI/CD 流程的详细步骤。 前置条件 Jenkins、GitLab、…...
分布式光伏发电有什么优劣势
分布式光伏发电是指在离电力消费地点较近的地方,通过安装光伏发电系统来发电。这种系统通常用于屋顶、地面或其他建筑物上,相比于集中式光伏发电系统,它有一些独特的优势和劣势: 优势: 地理适应性: 分布式…...
Spring Boot框架中的IO
1. 文件资源的访问与管理 在 Spring Boot 中,资源文件的访问与管理是常见的操作需求,比如加载配置文件、读取静态文件或从外部文件系统读取文件。Spring 提供了多种方式来处理资源文件访问,包括通过 ResourceLoader、Value 注解以及 Applica…...

DBeaver连接Hive教程
hive shell:通过hive shell来操作hive,但是至多只能存在一个hive shell,启动第二个会被阻塞,也就是说hive shell不支持并发操作。 基于JDBC等协议:启动hiveserver2,通过jdbc协议可以访问hive,hi…...
Vue-Router源码实现详解
1.Hash模式 hash就是url中#后面的部分hash改变时,页面不会从新加载,会触发hashchange事件,去监听hash改变,而且也会被记录到浏览器历史记录中vue-router的hash模式,主要是通过hashchange事件,根据hash值找…...

程序员节日的日期是10月24日程序员日
程序员节日的日期是10月24日。 这一天被称为中国程序员日或1024程序员节,由博客园、CSDN等自发组织设立,旨在纪念程序员对科技世界的贡献。 程序员节日的由来和意义 1024程序员节的由来可以追溯到2010年,最初由网友提出设立一个…...
联邦学习中的数据异构性
在联邦学习(Federated Learning, FL)领域中, 异构数据(Heterogeneous Data) 是指不同客户端所持有的本地数据在特征分布、类别分布、数量等方面存在差异的数据。这种数据的异质性是联邦学习面临的一大挑战,…...
Python小程序 - 替换文件内容
1. 写入文件c:\a.txt 1)共写入10行 2)每行内容 0123456789 # 1 ls 0123456789 ln 10 with open("c:/a.txt", w,encodingUTF-8) as f:for i in range(ln):f.write(ls\n)######################################### 2 ln 10…...

k8s备份恢复(velero)
velero简介 velero官网: https://velero.io/ velero-github: https://github.com/vmware-tanzu/velero velero的特性 备份可以按集群资源的子集,按命名空间、资源类型标签选择器进行过滤,从而为备份和恢复的内容提供高度的灵活…...

LED户外屏:面对复杂环境的七大挑战
户外LED显示屏作为现代城市广告和信息传播的重要媒介,其应用范围越来越广泛。然而,与室内环境相比,户外环境的复杂多变对LED显示屏提出了更高的要求。本文将探讨户外LED显示屏在设计和应用过程中必须考虑的七个关键问题。 1. 高分辨率 户外LE…...

LabVIEW自动化流动返混实验系统
随着工业自动化的不断发展,连续流动反应器在化工、医药等领域中的应用日益广泛。传统的流动返混实验操作复杂,数据记录和处理不便,基于LabVIEW的全自动流动返混实验系统能自动测定多釜反应器、单釜反应器和管式反应器的停留时间分布ÿ…...

【性能优化】安卓性能优化之CPU优化
【性能优化】安卓性能优化之CPU优化 CPU优化及常用工具原理与文章参考常用ADB常用原理、监控手段原理监控手段多线程并发解决耗时UI相关 常见场景排查CPU占用过高常用系统/开源分析工具AndroidStudio ProfilerSystraceBtracePerfettoTraceView和 Profile ANR相关ANR原理及常见场…...

springboot二手图书交易系统-计算机设计毕业源码88413
目 录 摘要 1 绪论 1.1研究背景 1.2研究意义 1.3论文结构与章节安排 2 二手图书交易系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 二手…...

解决ElasticSearch启动成功却无法在浏览器访问问题
目录 前言: 问题复现 : 解决问题: 1、修改sysctl.conf文件 2、在sysctl.conf文件增加这段东西 3、 然后保存退出,输入以下命令使其生效 结语: 前言: 这篇文章是小白我今天突然启动es,发现e…...

稀土有色包芯线良好的导电性
稀土有色包芯线是一种结合了稀土元素和有色金属(如铜、铝、镁等)的特殊线材。以下是对稀土有色包芯线的详细介绍: 一、组成与结构 芯线:由稀土元素和有色金属组成的合金制成。稀土元素(如镧、铈、镁等)的添加量在一定范围内,以确保合金性能的…...

SIP 业务举例之 Call Forwarding Unconditional(无条件呼转)
目录 1. Call Forwarding Unconditional 简介 2. RFC5359 的 Call Forwarding Unconditional 信令流程 PS:Dialog 建立条件 Dialog 会话完全建立 3. Call Forwarding Unconditional 过程总结 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识…...

基于stm32的esp8266的WIFI控制风扇实验
实验案例WIFI控制风扇 项目需求 电脑通过esp8266模块远程遥控风扇。 项目框图 风扇模块封装 #include "sys.h" #include "fan.h"void fan_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开时钟…...
java中的ScheduledExecutorService介绍和使用案例
ScheduledExecutorService 是 Java 并发包 java.util.concurrent 中的一个接口,它提供了一种机制,允许我们安排一个任务在给定的延迟后运行,或者定期地执行。 主要特点 单次调度:可以安排任务在一定的延迟后执行一次。周期性调度…...

4天涨粉14万!这个AI小众赛道粉丝涨疯了吧?保姆级教程免费教会你!
测一下你的搞钱灵敏度有多高,看下面两张截图,有没有发现什么异常值? 发现了吧? 第一张是10月17号截的,第二张是21号,4天时间粉丝从2.8万飙到16.6万,涨粉14万! 这个号我几天之前就发…...

RK3588 技术分享 | 在Android系统中使用NPU实现Yolov5分类检测
随着人工智能和大数据时代的到来,传统嵌入式处理器中的CPU和GPU逐渐无法满足日益增长的深度学习需求。为了应对这一挑战,在一些高端处理器中,NPU(神经网络处理单元)也被集成到了处理器里。NPU的出现不仅减轻了CPU和GPU…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...

Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...
GitHub 常见高频问题与解决方案(实用手册)
1.Push 提示权限错误(Permission denied) 问题: Bash Permission denied (publickey) fatal: Could not read from remote repository. 原因: 没有配置 SSH key 或使用了 HTTPS 而没有权限…...