首先需要配置jenkins + gitlab自动触发更新:https://blog.csdn.net/qq_35887546/article/details/106304046
首先需要在jenkins安装docker的插件:
准备harbor仓库:
https://blog.csdn.net/qq_35887546/article/details/105411743
我们将harbor仓库部署在server3 (172.25.63.3)上。
配置项目test:
添加认证如下:
其中需要在server2安装docker,可以参考之前的博客,还需要更改docker.sock的权限(jenkins使用的是普通用户jenkins,因此需要添加权限):
[root@server2 ~]# chmod 777 /run/docker.sock
同时确保server2可以连接上server3部署的harbor仓库(比如证书,解析等都需要做)。
可以先在server2拉取nginx节省以后的时间。
之后进行保存。
接下来需要进行测试,在git仓库主机server1创建Dockerfile:
vim Dockerfile
FROM nginx
EXPOSE 80
COPY index.html /usr/share/nginx/html
cat index.html
8888888888
git add Dockerfile
git commit -m "add dockerfile"
git push -u origin master
push后查看gitlab可以看出已经变更:
这个变更就会触发jenkins的更新:
可以看到构建成功:
现在我们将跳过push取消掉,之后保存手动触发,可以看到构建成功:
我的编号为20是因为中间更改了很多错误。
之后在harbor仓库里面就可以看到是上传的镜像:
这个latest标签的镜像始终和最新一次构建的版本相同。
也可以添加构建后的动作。
接下来我们新建一个项目docker:
配置项目docker:
设置在test构建稳定后执行触发:
其动作为使用刚刚创建的镜像构建一个容器:
保存。
手动触发test项目:
可以看出docker项目构建成功。
我们在docker主机查看:
容器成功运行。
这一系列就部署成功,我们的流程是 用户通过git将代码提交到gitlab,gitlab通过其配置的webhook方式触发jenkins,jenkins调用docker build 插件通过dockerfile创建镜像然后推送到harbor仓库上,之后触发jenkins 里的项目docker执行docker run命令,创建容器。
完整流程
我们接下来再次进行一遍完整的流程,实验之前首先需要更改docker项目的构建动作,因为当运行有同名容器时容器会启动失败:
保存后开始实验:
现在server1更改index.html
文件并提交:
[root@server1 ~]# cd demo/
[root@server1 demo]# ls
Dockerfile index.html README.md
[root@server1 demo]# vim index.html
[root@server1 demo]# cat index.html
8888888888
8888888888
8888888888
8888888888
8888888888
8888888888
[root@server1 demo]# git add index.html
[root@server1 demo]# git commit -m "update index.html"
[master 1cfa872] update index.html
1 file changed, 5 insertions(+)
[root@server1 demo]# git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 249 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@172.25.63.1:root/demo.git
4c0b5bd..1cfa872 master -> master
Branch master set up to track remote branch master from origin.
push后会更新gitlab:
之后会触发jenkins项目test和docker的构建:
可以看出都构建成功。
再docker主机访问容器地址:
[root@server2 ~]# curl 172.17.0.2
8888888888
8888888888
8888888888
8888888888
8888888888
8888888888
查看harbor仓库:
可以看出镜像已经更新。
实验结束。