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

当前的整体架构如下:

相关推荐
小马爱打代码7 小时前
K8S - GitLab CI 自动化构建镜像入门
ci/cd·kubernetes·gitlab
深海蜗牛11 小时前
Jenkins linux安装
linux·jenkins
阳光普照世界和平11 小时前
Jenkins:库博静态工具CI/CD 的卓越之选
运维·ci/cd·jenkins
liudongyang12312 小时前
jenkins 启动报错
java·运维·jenkins
木二_12 小时前
实践005-Gitlab CICD全项目整合
ci/cd·gitlab
xbd_zc14 小时前
【Jenkins简单自动化部署案例:基于Docker和Harbor的自动化部署流程记录】
docker·自动化·jenkins·harbor
lisw051 天前
网络化:DevOps 工程的必要基础(Networking: The Essential Foundation for DevOps Engineering)
网络·devops
云攀登者-望正茂2 天前
通过 Azure DevOps 探索 Helm 和 Azure AKS
azure·devops
nangonghen2 天前
jenkins built-in节点如何删除
jenkins
木二_2 天前
实践003-Gitlab CICD编译构建
ci/cd·gitlab·devops