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

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服务器完成】

当前的整体架构如下:

相关文章:

  • Java集合框架中的List、Map、Set详解
  • 【unity】Vulkan模式下部分Android机型使用VideoPlayer组件播放视频异常问题
  • 超简单的git学习教程
  • 又来聊一下加班的问题
  • jenkins尾随命令
  • Stable Diffusion秋叶整合包V4独立版Python本地API连接指南
  • 【AI提示词】IT专家顾问
  • 【Docker-14】容器操作案例
  • Java Web 之 互联网协议 100问
  • 向量陷阱:关键词、长度与相关性如何误导Embedding模型?
  • Spring中的AOP基础理解
  • 【网络篇】TCP vs UDP底层区别+网络编程概念
  • 数据结构排序算法全解析:从基础原理到实战应用
  • MySQL游标的定义和应用
  • Kubernetes相关的名词解释CNI插件(1)
  • 【Easylive】seataServer.properties 配置文件详细解析
  • stm32(gpio的四种输出)
  • 2025年渗透测试面试题总结-拷打题库06(题目+回答)
  • 网络--socket编程(2)
  • 【Linux】条件变量、基于阻塞队列的生产者消费者模型
  • 上海古籍书店重新开卷,在这里淘旧书获新知
  • 林间徐行寻风眠——关于浙美“徐宗帅捐赠纪念展”
  • “杭州六小龙”爆火出圈后,浙江高规格部署人工智能发展
  • 遭遇FIFA三个转会窗禁令,申花有苦难言将选择赔偿
  • 国常会:要持续稳定股市,持续推动房地产市场平稳健康发展
  • 在历史上遭到起诉的杀人动物记录中,为什么猪如此普遍?