当前位置: 首页 > java >正文

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.xdnf.cn/news/371.html

相关文章:

  • MCP 应用案例-网络设备批量管理
  • 混合精度训练中的算力浪费分析:FP16/FP8/BF16的隐藏成本
  • Sentinel源码—5.FlowSlot借鉴Guava的限流算法一
  • leetcode 300. Longest Increasing Subsequence
  • Ethan独立开发产品日报 | 2025-04-18
  • Gradle与Idea整合
  • 【Android面试八股文】Android系统架构【一】
  • x-ui重新申请ssl证书失败
  • VSCode安装与环境配置(Mac环境)
  • 智能语音备忘录:SpeechRecognition与gTTS的奇妙融合
  • 桌面应用UI开发方案
  • 【Redis】从单机架构到分布式,回溯架构的成长设计美学
  • 数据结构——快排和归并排序(非递归)
  • arkTs:使用setTimeout / setInterval 实现透明度切换的轮播图
  • 【论文阅读20】-CNN-Attention-BiGRU-滑坡预测(2025-03)
  • 【Linux】深入理解Linux文件系统:从C接口到内核设计哲学
  • InternVL 3的技术深度分析,代码与原理
  • uboot下读取ubifs分区的方法
  • 树莓派超全系列教程文档--(31)config.txt常用选项介绍
  • 【AI News | 20250418】每日AI进展
  • `peft` 和 `transformers` 库 实现 LoRA的 内部计算流程
  • 基础知识-指针
  • 航电系统之通信技术篇
  • 函数与数组---------C语言经典题目(1)
  • EndNote教程 | 使用EndNote管理文献,从下载到使用
  • Shell脚本-变量是什么
  • 《软件设计师》复习笔记(14.1)——面向对象基本概念、分析设计测试
  • Qt文件操作
  • 影楼精修行业浅见-序言
  • 使用人工智能大模型,如何免费快速把文本转成语音,保存mp3文件