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…...
itext 转换word文档转pdf
itext 转换word文档转pdf <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version><scope>compile</scope></dependency> <dependency><groupId>org.a…...
WSL-默认root登录
WSL-默认root登录 使用管理员,打开powershell PS C:\WINDOWS\system32> wsl -l 适用于 Linux 的 Windows 子系统分发版: Ubuntu-22.04 (默认) PS C:\WINDOWS\system32> ubuntu2204.exe config --default-user root PS C:\WINDOWS\system32>修改之后&…...
ASIO网络调试助手之四:浅谈QTcpServer性能
网络上有些质疑Qt Network模块性能的声音,本文将从理论和压测两个方面对比ASIO tcp server和QTcpServer在Windows上的性能,最后给出结论。 一.理论 QTcpServer在Windows上的实现是基于select模型,源码位置:5.12.6\Src\qtbase\src\network\socket\qnativesocketengine_win…...
快手 日常实习一面面经
官网投递,三天约面 线上面试 (60mins): 1. 自我介绍 2. 问实习 介绍自己做的业务上一段实习的公司框架和开源的 RPC 框架的区别负责的业务与核心业务的依赖关系场景题 -> 设计高并发下的负载均衡 3. 项目拷打 手写 双检锁…...
Cursor零基础小白教程系列 - 创建你的第一个Cursor 项目
最适合小白零基础的Cursor教程 网站lookai.top相同作者,最新文章会在网站更新,欢迎收藏书签 创建你的第一个Cursor 项目 实操视频 概述 开始使用Cursor进行编程的第一步是创建或导入一个项目。本指南将帮助您了解如何在Cursor中创建新项目、导入现有项…...
通用序列化和反序列化实现思路
本文简单的记录一下采用模板来实现序列化与反序列的思路, 同时采用C20标准的concept和requires来简化模板函数的选择。 首先了解一下自定义类支持序列化的两种方式: 一、序列化自定义类型(侵入式) struct Test {std::string na…...
书生营第四期L0G2000 Python 基础知识
闯关任务 Leetcode 383(笔记中提交代码与leetcode提交通过截图) class Solution:def canConstruct(self, ransomNote: str, magazine: str) -> bool:note [0]*26maga [0]*26for s in ransomNote:note[ord(s)-ord(a)] 1for s in magazine:maga[ord(s)-ord(a)] 1for i in…...
Day12-数据库服务冗余架构
Day-12-数据库服务高可用集群 1、数据库MGR组复制实践2、数据库高可用MHA应用介绍3、数据库高可用MHA环境准备4、数据库高可用MHA原理机制5、数据库高可用MHA功能配置 1、数据库MGR组复制实践 (强一致性主从同步) 2、数据库高可用MHA应用介绍 3、数据库高可用MHA环境…...
js监听div尺寸,ResizeObserver
示例: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><style>.observedDiv {width: 40vw;height: 50vh;background-color: lightblue;}</style></head><body><div id"…...
STM32与openmv的串口通信
OpenMV与STM32的通信是嵌入式系统和物联网领域中的一项重要技术。OpenMV是一种开源的微型机器视觉模块,基于ARM Cortex-M7微控制器,支持多种图像处理功能,如颜色识别、形状检测等。而STM32是STMicroelectronics公司推出的基于ARM Cortex内核的…...
网站模板站的模板展示怎么做的/网站优化与seo
方法一:伪列布局法(利用背景图)所谓伪列布局法,就是设计一个背景图像,利用背景图像来模拟栏目的背景。如,使用Photoshop设计一个长方形的背景图,长度与页面宽度保持一致,高度任意。代码中要用到的背景图&am…...
交易网站开发/2024年3月新冠肺炎
1、从网站可以正常使用的时间上来说如果用不备案的国外空间,申请域名购买空间后网站是直接可以打开访问的,如果备案,工信部公布的审核时间是20个工作日,也就是说除去周六周日要进一个月备案才能审批下来,之后才能正常访…...
兰州市七里河建设局网站/网站推广方案模板
点击“蓝字”关注我们如果你是一个嵌入式工程师,那么入门的第1个例子很可能就是 - 呼吸灯。那在本次视频中,赛灵思嵌入式工程师张超将和大家一起,用最简单的例子展示如何使用Xilinx Zynq Ultra Scale MPSoC器件,在搭载Linux操作系…...
无锡哪家网站做的好/网络优化行业的发展前景
文章目录代词人称代词物主代词指示代词总结作业代词 代词是为了避免重复而用来代替名词的词语。英语代词分为以下九类:人称代词、物主代词,反身代词、相互代词、指标代词、不定代词、疑问代词、连接代词和关系代词。大多数代词具有名词和形容词的作用。…...
株洲网站建设/深圳网络营销推广
目录 1. 算子链 1.1. 一对一(One-to-one, forwarding) 1.2. 重分区(Redistributing) 1.3. 为什么有算子链 2. 物理分区(Physical Partitioning) 2.1. 什么是分区 2.2. 随机分区ÿ…...
做网站的英文/东莞网络推广营销
ParallelsDesktop安装DOS7.1并与MAC共享文件 Table of Contents 1. 在Parallels Desktop中安装DOS7.12. 配置与Mac共享文件1 在Parallels Desktop中安装DOS7.1 准备一个DOS7.1的ISO安装镜像,有些朋友是img的文件,pd是不认识的。 安装时,选择其…...