09-DevOps-Jenkins实现CI持续集成

前面已经把harbor搭建好了,也可以向harbor中推送自定义镜像。

原计划是在Jenkins这台服务器上,完成镜像构建,然后把镜像推送的harbor仓库中。现在改变计划了,Jenkins所在的服务器(192.168.1.10)不负责镜像构建工作,镜像构建工作放到harbor所在的服务器(192.168.1.12)上完成。

这样做的好处是,Jenkins的职责更加清晰,它只是为了完成流水线的事情(自动化工具)。

为了完成整个CI/CD的工作,在harbor所在的服务器上,完成自定义镜像的构建及将镜像推送至harbor镜像仓库。

实现后的架构如下图:

docker配置镜像地址

为了能够在harbor所在的服务器(192.168.1.12)上完成镜像的构建和推送。需要修改 /etc/docker/daemon.json 文件内容,把harbor镜像仓库地址配置进去。

修改后的文件内容如下:

{
"registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://docker.1panel.live",
    "https://hub.rat.dev",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://kfwkfulq.mirror.aliyuncs.com",
    "https://k8s.m.daocloud.io"
],
"insecure-registries": ["192.168.1.12:85"]

}                     

"insecure-registries": ["192.168.1.12:85"]是Docker守护进程配置文件daemon.json中的一项配置,用于指定Docker镜像仓库。

刷新配置,重启docker

systemctl daemon-reload

systemctl restart docker

登录harbor

docker login -u admin -p Harbor12345 192.168.1.12:85

如果出现这个错误,则将harbor容器移除,重新启动一下容器

切换到harbor目录

cd /usr/local/harbor

执行移除容器命令

docker-compose down

启动harbor

./install.sh

再次登录harbor,就成功了。

环境就搭建好了,下面开始配置Jenkins,将目标服务器(192.168.1.11)中的Dockerfile和程序包文件传输到harbor所在的服务器(192.168.1.12)。

配置Jenkins

新增SSH服务

点击高级

填写配置信息

接着配置当前的任务

在构建后操作的地方,增加新的服务器

第一段SSH Server配置如下图所示:

在harbor所在服务器(192.168.1.12)上,完成镜像的构建和推送镜像到harbor仓库的工作:

docker build -t 192.168.1.12:85/public/myproject:1.0 /usr/local/
docker login -u admin -p Harbor12345 192.168.1.12:85
docker push 192.168.1.12:85/public/myproject:1.0

命令解读:

1.构建一个名称为 192.168.1.12:85/public/myproject:1.0 的镜像,Dockerfile文件在/usr/local/目录。

2.登录到harbor镜像仓库,用户名admin  密码Harbor12345  harbor的ip为192.168.1.12,端口85。

3.将构建好的镜像推送到harbor镜像仓库。

第二段SSH Server配置如下图所示:

在目标服务器(192.168.1.11)上,完成容器的删除和重新运行的工作。

docker rm -f myproject
docker run -d -p 81:81 --name=myproject 192.168.1.12:85/public/myproject:1.0

命令解读:

1.删除已经存在的名称为 myproject 的容器。

2.生成名称为 myproject 的容器,用到的镜像名称为 192.168.1.12:85/public/myproject:1.0,启动的端口为81。

以上两段配置的整体结构如图:

在目标服务器(192.168.1.11)上,因为要拉取harbor服务器上的镜像,所以要在docker中配置上远程镜像的地址。

操作方法是在/etc/docker/daemon.json文件中配置"insecure-registries": ["192.168.1.12:85"],这样才能让docker知道镜像仓库地址,否则docker无法拉取镜像。

Jenkins重新构建

查看构建的控制台输出

构建成功。

在目标服务器(192.168.1.11)上,可以看到最新生成的容器。这个过程就是由Jenkins进行驱动的。

访问应用程序

http://192.168.1.11:81/

复盘

回顾一下,到这一步为止,已经完成的事情:

1.搭建了GitLab代码仓库,将本地代码提交到仓库。【在192.168.1.10服务器完成】

2.从GitLab代码仓库中克隆代码到Jenkins的工作区【在192.168.1.10服务器完成】

3.完成代码的编译和测试代码【在192.168.1.10服务器完成】

4.打包Spring Boot应用【在192.168.1.10服务器完成】

5.通过SSH传输,将Spring Boot应用最终的jar包和Dockerfile文件,上传到harbor所在的服务器(192.168.1.12)【在192.168.1.12服务器完成】

6.在harbor所在的服务器(192.168.1.12)完成自定义镜像的构建及把镜像推送至harbor镜像仓库【在192.168.1.12服务器完成】

7.在目标服务器(192.168.1.11)上从harbor镜像仓库中找到自定义的镜像并完成容器启动。【在192.168.1.11服务器完成】

当前的整体架构如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postman设置了Cookies但是请求不携带Cookie

1 问题说明 使用Postman工具往往要向本地服务器发送请求携带Cookie便于测试接口,但是在Send下面的Cookies选项中设置域名127.0.0.1,并添加Cookie,发现发送的请求怎么都不会携带Cookie: 通过Fiddler抓包发现并没有Cookie&#xff1…

【unity】Vulkan模式下部分Android机型使用VideoPlayer组件播放视频异常问题

一、问题背景 考虑到Vulkan高性能的优势,项目组决定打包设置为vulkan优先,opengl es次之的方案;但由于部分低端设备或者部分模拟器对Vulkan的兼容性良莠不齐,导致诸如使用VideoPlayer组件无法正常播放视频等问题频发,而…

0802api设计和实战-网络ajax请求1-react-仿低代码平台项目

文章目录 1 API设计1.1 用户功能1.1.1 获取用户信息1.1.2 注册1.1.3 登录 1.2 问卷功能1.2.1 获取单个问卷1.2.2 获取问卷列表1.2.3 创建问卷1.2.4 更新问卷1.2.5 批量彻底删除问卷1.2.6 复制问卷 1.3 小结 2 实战2.1配置axios2.2 封装API和测试2.3 新建问卷2.4 自定义hooks封装…

Android Kotlin AIDL 完整实现与优化指南

本文将详细介绍如何在Android中使用Kotlin实现AIDL(Android Interface Definition Language),并提供多种优化方案。 一、基础实现 1. 创建AIDL文件 在src/main/aidl/com/example/myapplication/目录下创建: IMyAidlInterface.…

【数据结构】_栈和队列相关面试题

🔥 数据结构修炼场 🔥 💥 栈与队列 终极试炼 💥 🚀 理论已加载完毕,代码之魂觉醒时刻! ⚡️ 是时候用实战点燃你的算法之力了—— 「题目风暴,来袭!」 (握…

精益数据分析(8/126):从Airbnb案例看精益创业与数据驱动增长

精益数据分析(8/126):从Airbnb案例看精益创业与数据驱动增长 大家好!一直以来,我都坚信在创业和技术的领域里,持续学习与分享是不断进步的关键。今天,咱们继续深入学习《精益数据分析》&#x…

专题二十:路由策略与策略路由

一、路由策略 1.1 路由策略的概念 路由策略是通过修改路由表的路由条目来控制数据流量的可达性。即对接受和发布的路由进过滤。这种方式称为路由策略 路由策略功能相关作用控制路由的发布可通过路由策略对所要发布的路由信息进行过滤,只允许发布满足条件的路由信…

VSCode 扩展离线下载方法

学习自该文章,感谢作者! 2025 年 VSCode 插件离线下载攻略:官方渠道一键获取 - 知乎 获取扩展关键信息 方法一:官网获取 打开 VSCode 扩展官方网站 搜索要下载的扩展,以 CodeGeeX 为例,网址为&#xf…

一 、环境的安装 Anaconda + Pycharm + PaddlePaddle

《从零到一实践:系统性学习生成式 AI(NLP)》 一 、环境的安装 Anaconda Pycharm PaddlePaddle 1. Anaconda 软件安装 Anaconda 软件安装有大量的教程,此处不在说明,安装完成之后界面如下: 2. 创建 Anaconda 虚拟环境 Paddl…

软考教材重点内容 信息安全工程师 第23章 云计算安全需求分析与安全保护工程

23.1.云计算基本概念 云计算就是在这样的需求驱动下而产生的一种计算模式。云计算通过虚拟化及网络通信技术,提供一种按需服务、弹性化的 IT 资源池服务平台。云计算的主要特征如下。 1. IT 资源以服务的形式提供 IT 资源以一种服务产品的形式提供,满…

蓝桥杯 19. 最大比例

最大比例 原题目链接 题目描述 X 星球的某个大奖赛设了 M 级奖励。每个级别的奖金是一个正整数。 并且,相邻两个级别间的比例是一个固定值,也就是说:所有级别的奖金构成一个等比数列。 例如: 奖金数列为 16, 24, 36, 54&…

基于 Python 的自然语言处理系列(82):Transformer Reinforcement Learning

🔗 本文所用工具:trl、transformers、peft、bitsandbytes 📘 官方文档参考:https://huggingface.co/docs/trl 一、引言:从有监督微调到 RLHF 全流程 随着语言大模型的发展,如何在大规模预训练模型基础上更精…

JAVA猜数小游戏

import java.util.Random; import java.util.Scanner;public class HelloWorld {public static void main(String[] args) {Random rnew Random();int luck_number r.nextInt(100)1;while (true){System.out.println("输入猜数字");Scanner sc new Scanner(System…

GPU渲染阶段介绍+Shader基础结构实现

GPU是什么 (CPU)Center Processing Unit:逻辑编程 (GPU)Graphics Processing Unit:图形处理(矩阵运算,数据公式运算,光栅化) 渲染管线 渲染管线也称为渲染流水线&#x…

Spring Boot + MyBatis 动态字段更新方法

在Spring Boot和MyBatis中,实现动态更新不固定字段的步骤如下: 方法一:使用MyBatis动态SQL(适合字段允许为null的场景) 定义实体类 包含所有可能被更新的字段。 Mapper接口 定义更新方法,参数为实体对象&…

单例模式:确保唯一实例的设计模式

单例模式:确保唯一实例的设计模式 一、模式核心:保证类仅有一个实例并提供全局访问点 在软件开发中,有些类需要确保只有一个实例(如系统配置类、日志管理器),避免因多个实例导致状态混乱或资源浪费。 单…

UnoCSS原子CSS引擎-前端福音

UnoCSS是一款原子化的即时按需 CSS 引擎,其中没有核心实用程序,所有功能都是通过预设提供的。默认情况下UnoCSS应用通过预设来实现相关功能。 UnoCSS中文文档: https://www.unocss.com.cn 前有很多种原子化的框架,例如 Tailwind…

【Qwen2.5-VL 踩坑记录】本地 + 海外账号和国内账号的 API 调用区别(阿里云百炼平台)

API 调用 阿里云百炼平台的海内外 API 的区别: 海外版:需要进行 API 基础 URL 设置国内版:无需设置。 本人的服务器在香港,采用海外版的 API 时,需要进行如下API端点配置 / API基础URL设置 / API客户端配置&#xf…

C语言笔记(鹏哥)上课板书+课件汇总(结构体)-----数据结构常用

结构体 目录: 1、结构体类型声明 2、结构体变量的创建和初始化 3、结构体成员访问操作符 4、结构体内存对齐*****(重要指数五颗星) 5、结构体传参 6、结构体实现位段 一、结构体类型声明 其实在指针中我们已经讲解了一些结构体内容了&…

UV: Python包和项目管理器(从入门到不放弃教程)

目录 UV: Python包和项目管理器(从入门到不放弃教程)1. 为什么用uv,而不是conda或者pip2. 安装uv(Windows)2.1 powershell下载2.2 winget下载2.3 直接下载安装包 3. uv教程3.1 创建虚拟环境 (uv venv) 4. uvx5. 此pip非…