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

当前的整体架构如下:

相关推荐
网安INF10 小时前
CVE-2024-23897源码分析与漏洞复现(Jenkins 任意文件读取)
java·web安全·网络安全·jenkins·漏洞
测试开发Kevin1 天前
详解Jenkins Pipeline 中git 命令的使用方法
运维·jenkins
远方16091 天前
0x-4-Oracle 23 ai-sqlcl 25.1.1 独立安装-配置和优化
数据库·ci/cd·oracle
leblancAndSherry1 天前
Gitlab + Jenkins 实现 CICD
linux·运维·docker·kubernetes·gitlab·jenkins
不爱学英文的码字机器2 天前
持续交付的进化:从DevOps到AI驱动的IT新动能
运维·人工智能·devops
kkk_皮蛋2 天前
深入解析CI/CD开发流程
ci/cd
三劫散仙2 天前
kubernetes jenkins pipeline优化拉取大仓库性能指定分支+深度
容器·kubernetes·jenkins
亚林瓜子3 天前
AWS Elastic Beanstalk + CodePipeline(Python Flask Web的国区CI/CD)
python·ci/cd·flask·web·aws·beanstalk·codepipeline
龙智DevSecOps解决方案3 天前
游戏开发中的CI/CD优化案例:知名游戏公司Gearbox使用TeamCity简化CI/CD流程
ci/cd·游戏开发·jetbrains·teamcity
猴哥聊项目管理4 天前
什么是DevOps智能平台的核心功能?
运维·项目管理·制造·devops·软件·项目管理软件·软件分享