最简单配置jenkins容器使用宿主机的docker方法
构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可
设置Jenkins容器使用宿主机Docker
- 设置宿主机docker.sock权限
chown root:root /var/run/docker.sock
chmod o+rw /var/run/docker.sock
- 添加数据卷
version: "3.1"
services:
jenkins:
image: jenkins/jenkins
container_name: jenkins
ports:
- 8080:8080
- 50000:50000
volumes:
- ./data/:/var/jenkins_home/
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /etc/docker/daemon.json:/etc/docker/daemon.json
restart: always
添加构建操作
添加参数化部署,这里添加一个参数projectVersion,用来给镜像指定具体的版本

将原来使用over ssh推送jar及dockerFile文件的构建后操作步骤删除

在代码质量检测完成后执行镜像打包操作,并把镜像推送到目标服务器上
mv target/*.jar docker/
docker build -t mytest:${projectVersion} docker/
docker login -u admin -p Harbor12345 192.168.19.7:80
docker tag mytest:${projectVersion} 192.168.19.7:80/repo/mytest:${projectVersion}
docker push 192.168.19.7:80/repo/mytest:${projectVersion}
编写部署脚本
在代码部署的服务器上编写如下脚本deploy,并且将脚本移动环境变量中:
[root@localhost bin]# ls /usr/bin/ | grep deploy.sh
deploy.sh
[root@localhost bin]# cat /usr/bin/deploy.sh
harbor_url=$1
harbor_project_name=$2
project_name=$3
tag=$4
port=$5imageName=$harbor_url/$harbor_project_name/$project_name:$tag
containerId=`docker ps -a | grep ${project_name} | awk '{print $1}'`
if [ "$containerId" != "" ] ; then
docker stop $containerId
docker rm $containerId
echo "Delete Container Success"
fiimageId=`docker images | grep ${project_name} | awk '{print $3}'`
if [ "$imageId" != "" ] ; then
docker rmi -f $imageId
echo "Delete Image Success"
fidocker login -u admin -p Harbor12345 $harbor_url
docker pull $imageName
docker run -d -p $port:8080 --name $project_name $imageName
echo "Start Container Success"
echo $project_name
配置构建后操作
在项目的参数中添加如下host_port参数:
在excu command中配置如下命名:
deploy.sh 192.168.19.7:80 repo mytest ${projectVersion} ${host_port}

测试执行构建:
在源码中修改hello 接口为:

把代码推送到仓库,然后执行构建

在浏览器上输入:192.168.19.7:8081/hello,查看输出,观看响应是否已经更改。

看到确实已经修改
至此,我们已经完成了一个基本的CI/CD的流水线。
实现的功能有:
1、开发者编完代码后,将代码推送到gitlab仓库中。
2、jenkins将拉取代码,然后通过maven打包
3、打包完成后,通过sonarQube进行代码质量检测
4、质量检测完成后,将代码打包成镜像
5、将生成的镜像文件推送到Harbor服务器上
6、jenkins服务器通知部署服务器做发布操作
6.1 如果项目有正在运行的容器,需要停止
6.2 如果有原来项目的镜像需要把镜像进行删除
6.3 从Harbor服务器上拉取镜像到部署服务器上
6.4 根据拉取到的最小镜像来运行一个新的容器


相关文章:
最简单配置jenkins容器使用宿主机的docker方法
构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可 设置Jenkins容器使用宿主机Docker 设置宿主机docker.sock权限 chown root:root /var/run/docker.sock chmod orw /var/run/docker.sock 添加数据卷 v…...
Android aidl及binder基础知识巩固
作者:义华 1、什么是binder binder是android framework提供的,用于跨进程方法调用的机制,具有安全高效等特点。 我们知道,在 Android 系统中,每个应用程序都运行在一个独立的进程中,各个进程之间需要进行…...
[日记]LeetCode算法·二十五——二叉树⑤ AVL树(插入+删除)附代码实现
本章的代码实现基于上一篇BST与优先队列的基类进行平衡二叉树,即AVL树。 文章目录 AVL的概念AVL查询效率AVL的插入1.插入节点2.更新平衡因子BF3.旋转调整树的结构3.1 LL 右旋3.2 RR 左旋3.3 LR 左右双旋3.4 RL 右左双旋 4 插入总结 AVL的删除1.寻找删除节点2.更新平…...
flink-1.13.6 例子
-------------------------------------------------------------- flink版本: flink-1.13.6 [rootmaster bin]# pip3 list | grep flink WARNING: Ignoring invalid distribution -andas (/usr/local/python38/lib/python3.8/site-packages) apache-flink 1.13.0 a…...
Go语音基于zap的日志封装
zap日志封装 Zap是一个高性能、结构化日志库,专为Go语言设计。它由Uber开源,并且在Go社区中非常受欢迎。它的设计目标是提供一个简单易用、高效稳定、灵活可扩展的日志系统。 以下是Zap的一些主要特点: 1.高性能:Zap的性能非常出…...
可持续能源技术具有改变世界的潜力,并且已经在多个方面展现出积极的影响。
可持续能源技术的发展在当今全球面临的气候变化和能源安全挑战中扮演着至关重要的角色。我认为可持续能源技术具有改变世界的潜力,并且已经在多个方面展现出积极的影响。以下是我对此的观点: 1,可持续能源技术有助于减少对化石燃料的依赖 化…...
Java常用工具之StringUtils类
目录 一、字符串判空二、分隔字符串三、判断是否为纯数字四、将集合拼接成字符串五、其他方法 字符串(String)在我们的日常工作中,用得非常非常非常多。 在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、…...
MyBatis-plus的批量插入方式对比分析
MyBatis-plus的批量插入方式对比分析 【摘要】Mybatis批量插入一直是开发者重点关注的问题,本文列举了Mybatis的五种插入方式进行对比分析,验证了五种批量插入的方式的优先级。 1 准备工作 1.1 新建spring项目 略。 1.2 导入pom.xml依赖 <depende…...
【系分论文】论软件开发模型及应用
目录 论题论题介绍论文要点理论素材准备范文摘要正文 论文补充知识 论题 论软件开发模型及应用 论题介绍 软件开发模型( Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发过程包括需求、设计、编码和测试等阶段&…...
渗透测试--5.3.使用john破解密码
前言 由于Linux是Internet最流行的服务器操作系统,因此它的安全性备受关注。这种安全主要靠口令实现。 Linux使用一个单向函数crypt()来加密用户口令。单向函数crypt()从数学原理上保证了从加密的密文得到加密前的明…...
Go中的变量类型
Go中的变量类型 1.为什么要使用变量 变量其实指定的是一段内存地址,根据这个内存地址可以找到我们需要找到的东西。 2.变量类型 变量的功能就是用来存储数据的,根据不同的数据类型可以存储不同的数据。常见的变量的类型 整型、浮点型、布尔型等。变…...
基于STM32的NRF24L01 2.4G通讯模块的驱动实验(HAL库)
前言:本文为手把手教学NRF24L01 2.4G通讯模块的驱动实验,本教程的 MCU 采用STM32F103ZET6与STM32F103C8T6,彼此进行互相通讯。通过 CubeMX 软件配置 SPI 协议驱动NRF24L01 2.4G通讯模块(HAL库)。NRF24L01 2.4G是嵌入式…...
DJ5-3 多路访问链路和协议
目录 一、网络链路 二、广播信道要解决问题 三、多路访问协议 1、基本介绍 2、多路访问协议的类型(3) 四、信道划分协议 1、时分多路访问 TDMA 2、频分多路访问 FDMA 3、码分多路访问 CDMA(略) 五、随机访问协议 1、纯…...
技术领导力?
作品集(Portfolio)会比简历(Resume)更有参考意义。 怎么才算有技术领导力? 1) 能够发现问题,并能够提供解决问题的思路和方案,并能比较方案的优缺点。 2) 能用更简洁有效的方式解决问题。 3…...
计算机的基本工作原理
参考资料: L-1.6: Common Bus system| How basic computer works - YouTube 准备好内存单元、不同类型的寄存器,内存和寄存器、寄存器和寄存器之间都是通过总线连接(假设是直接把数据总线、控制总线、地址总线变成一条总线)。 使用多路复用器实现的总线&…...
【论文简述】Cross-Attentional Flow Transformer for Robust Optical Flow(CVPR 2022)
一、论文简述 1. 第一作者:Xiuchao Sui、Shaohua Li 2. 发表年份:2021 3. 发表期刊:arxiv 4. 关键词:光流、Transformer、自注意力、交叉注意力、相关体 5. 探索动机:由于卷积的局部性和刚性权重,有限…...
【JAVA】Java中方法的使用,理解方法重载和递归
目录 1.方法的概念及使用 1.1什么是方法 1.2方法的定义 1.3方法调用的执行过程 1.4实参和形参 2.方法重载 2.1为什么需要使用方法重载 2.2什么是方法重载 3.递归 3.1什么是递归 3.2递归执行的过程 3.3递归的使用 1.方法的概念及使用 1.1什么是方法 方法就是一个代…...
高级网络计算模式复习
P2P 对等网络(Peer-to-Peer Networks)是分布式系统和计算机网络相结合的产物,在应用领域和学术界获得了广泛的重视和成功,被称为“改变Internet的一代网络技术”。 peer指网络结点,在行为上是自由的——任意加入、退…...
【笔试强训选择题】Day15.习题(错题)解析
作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!! 文章目录 前言 一、…...
图论专题(一)
图论专题(一) 参考文献 BFS和DFS的直观解释 https://blog.csdn.net/c406495762/article/details/117307841Leetcode岛屿问题系列分析 https://blog.csdn.net/qq_39144436/article/details/124173504多源广度优先 https://blog.csdn.net/peko1/article/details/121989497拓扑排…...
黑客入门3个月实战计划(附每日任务),新手照做就能从0到1
前言 新手学黑客,没有计划很容易“三天打鱼两天晒网”。本文给你制定一份3个月实战计划,分阶段拆解每日任务,从零基础到能独立做基础渗透测试,每天1-2小时,照做就能完成目标。全程合规,只在靶场练习。 一、…...
告别串口助手!用VOFA+和STM32的DMA串口实现高刷波形监控(附完整工程)
STM32与VOFA的高频数据可视化实战:DMA串口优化全解析 在嵌入式开发中,实时监控传感器数据或系统状态是调试过程中不可或缺的环节。传统串口助手配合printf的方式虽然简单,但在处理高频数据时往往力不从心——数据刷新率低、CPU占用高、波形显…...
GD32F103待机模式实测:功耗从30mA降到3mA,手把手教你用按键唤醒(附源码)
GD32F103待机模式实战:从30mA到3mA的功耗优化全解析 引言 在嵌入式系统设计中,功耗优化一直是开发者面临的永恒课题。想象一下,你设计的智能门锁因为功耗问题需要频繁更换电池,或者野外监测设备因为电量耗尽而失去关键数据采集机会…...
从零开始撸一个线控转向系统
线控转向,包含设计说明书,carsim模型,MATLAB Simulink模型全套(工程项目线上支持)"线控转向是一个工程项目,其中包含设计说明书、carsim模型以及MATLAB Simulink模型的全套。这个项目提供在线支持&…...
omniMath:嵌入式轻量级数学表达式求值与单位转换库
1. omniMath 库深度解析:面向嵌入式系统的轻量级数学表达式求值与单位转换引擎1.1 库定位与工程价值omniMath 是一款专为 Arduino 及兼容平台(如 Raspberry Pi Pico、ESP32、STM32duino)设计的嵌入式数学计算库。其核心价值不在于替代浮点协处…...
3步让老Mac焕发新生:OpenCore Legacy Patcher终极升级指南
3步让老Mac焕发新生:OpenCore Legacy Patcher终极升级指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为老Mac无法升级到最新macOS…...
HagiCode Desktop 混合分发架构解析:如何用 PP 加速大文件下载成
一、Actor 模型:不是并发技巧,而是领域单元 Actor 模型的本质是: Actor 是独立运行的实体 Actor 之间只通过消息交互 Actor 内部状态不可被外部直接访问 Actor 自行决定如何处理收到的消息 Actor 模型真正解决的是: 如何在不共享状…...
ArcGIS新手必看:用‘镶嵌至新栅格’搞定不同分辨率DEM的无缝拼接(附像素类型避坑点)
ArcGIS DEM融合实战:从参数原理到完美拼接的完整指南 当你第一次尝试将不同分辨率的DEM数据拼接在一起时,那种"平地起高楼"的突兀感可能让你抓狂——低分辨率区域像模糊的马赛克,而高精度部分则像孤岛般突兀隆起。这不是你操作的问…...
显示屏适配优势深度解析:交期与服务双维赋能品质把控
作为仪器设备厂商的客户品质人员,在显示屏选型过程中,交期稳定性与全流程服务能力是保障设备研发进度、量产交付及长期运维的核心要素。恒域威显示屏通过供应链整合、生产管控优化及服务体系创新,在交期响应与柔性交付、全周期服务支持等方面…...
蓝桥杯第15届单片机满分
1. 为什么会在第 5 位显示出 8?freq_jiaofreqseg_jiao;//频率数据的最终结果 if(freq_jiao<0) {wrong1;//频率界面数码管显示LL,表示此状态错误 } else wrong0;而在 serviceT1 的中断里,每 1000ms 更新一次 freq:当测试系统改变输入频率&a…...

