前面已经把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服务器完成】
当前的整体架构如下: