我之前做这个实验的时候卡了很久。所以写一篇博客纪念一下。
由于网上教程很多,所以如果你已经成功安装了jenkins,gitlab,harbor等软件,可以直接看第八步。
本人的安装参考的是这篇文章:
基于Docker容器的DevOps应用方案
先说一下感想,我觉得最难得部分就是创建jenkins项目。
而创建jenkins项目的重点就是Build Step中的操作,只要明白了其中的逻辑,就比较简单了。
虚拟机1(redis):harbor-server IP地址:192.168.126.129
虚拟机2 (vm2):web-server Ip地址:192.168.126.130
虚拟机3(vm3):gitlab-server Ip地址:192.168.126.131
虚拟机4 (vm4):jenkins-server IP地址:192.168.126.132
本地主机:代码编写
然后将项目添加到gitlab中:
创建ssh key:
将ssh-key添加到gitlab上:
在虚拟机中下载gitlab-ce
下载完成:
添加配置:
重新配置:
启动服务:
查看密码:
在浏览器输入网址:http://192.168.126.131/
账号是root, 密码是我们刚刚查看的密码(出现502等等问题的原因大概率是内存不够)
然后就可以进入界面了:
第一步:安装docker
启动docker服务:
第二步:docker-compose的安装:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7RbiiuB1-1680186433295)(https://gitee.com/leaf32379/images/raw/master/newBranch4/202303302215489.png)]
第三步:下载docker compose
下载完成:
下载完成之后安装和测试docker compose:
成功之后就可以开始Harbor的部署:
下载文件:
wget https://github.com/goharbor/harbor/releases/download/v2.5.6/harbor-offline-installer-v2.5.6.tgz
下载成功:
解压到 /home:
执行操作:
修改配置文件:
执行命令
./prepare
./install.sh
执行完成:
centos自带了JDK环境。
2.安装Jenkins
下载完成:
由于需要java环境,检查发现系统存在java环境:
查看本机的java环境:知道了java的安装路径
编辑配置文件:
vim /etc/profile
添加内容:
profile生效:
source /etc/profile
修改jenkins的配置文件
vim /etc/init.d/jenkins
vim /etc/sysconfig/jenkins
启动jenkins服务:
java -jar jenkins.war --httpPort=9090
192.168.126.132:9090
进入到jenkins界面:(出现了插件下载失败的错误)
git下载:
下载maven:
添加maven的环境变量:
查看是否配置成功:
docker安装(之前已经装好了):
jenkins
harbor:
web-server:
安装一系列插件:
JDK配置:
git配置:
Maven配置:
配置ssh连接主机:
在gitlab中查看:
配置git来拉取代码:这里选择利用tag
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l58s3ONG-1680186433330)(https://gitee.com/leaf32379/images/raw/master/newBranch4/202303302222892.png)]
这里接受了一个Tag_from参数,因为我们是按照tag来构建镜像的,所以需要传输一个tag参数
这个参数在gitlab发送的请求体中,是这种形式。
"ref": "refs/tags/1.0.11",
并创建一个token:
URL是jenkins中提供的连接,Secert令牌是在jenkins中设置的token
触发方式选择的是提交tag:
这样就可以做到在提交代码到gitlab时,让jenkins自动构建。
首先,我们需要使用mvn打包项目:指令是
### 调用顶层Maven目标时,不需要写 mvn
mvn clean install -DshipTests
下一步,就是在jenkins主机上将程序打包成镜像,并发送到harbor服务器上:
cp target/demo1-0.0.1-SNAPSHOT.jar docker # 首先将打包好的jar包复制到docker文件夹下。
cd docker
echo $Tag_from # Tag_from是 "refs/tags/1.0.11"的形式。
Tag=$(echo $Tag_from | sed 's/refs\/tags\///') # 利用正则表达式取出tag
REP=192.168.126.129/library/test:${Tag} # 镜像存储地址
docker build -f Dockerfile -t $REP . --no-cache # 利用dockerfile构建镜像
docker login 192.168.126.129 -u admin -p 123456Ye # 发送到harbor服务器
docker push $REP
docker logout 192.168.126.129
dockerfile在源码的docker目录下:
FROM openjdk:11-jdk # 项目需要jdk
MAINTAINER yee
ENV JAVA_OPTS "" # 可选的执行参数
ADD *.jar /home/app.jar # 将打包好的jar包放到容器内
EXPOSE 8080 # 暴露容器的8080端口
ENTRYPOINT ["java", "-jar", "/home/app.jar"] # 运行jar包
这样我们构建的镜像就发送到了Harbor服务器,然后我们在jenkins主机上利用ssh远程连接我们的web-server(ssh需要在jenkins的全局设置中配置):
echo $Tag_from
Tag=$(echo $Tag_from | sed 's/refs\/tags\///')
REP=192.168.126.129/library/test:${Tag}
docker rm -f demo |true # 删除原有的镜像和容器
docker image rm $REP | true
docker container run -d --name demo -p 80:8080 $REP # 创建容器,映射端口
在web-server中查看:
可以发现我们的程序正在执行。
### 启动docker,关闭防火墙,运行gitlab
systemctl stop firewalld
systemctl start docker
gitlab-ctl start
### 访问gitlab
192.168.126.131
### 启动docker,关闭防火墙,运行gitlab
systemctl stop firewalld
systemctl start docker
### 启动harbor
cd /home/harbor
./prepare
./install.sh
### 访问harbor
192.168.126.129
### 启动docker,关闭防火墙,运行gitlab
systemctl stop firewalld
systemctl start docker
### 启动jenkins
cd /etc/init.d
./jenkins start
### 访问jenkins
192.168.126.132
### 启动docker,关闭防火墙
systemctl stop firewalld
systemctl start docker
### 启动上次部署好的项目
docker start ps
项目效果:
给提交打上tag:
推送代码:(要同时推送标记)
jenkins构建完成:
同时将镜像打包发送到harbor服务器中:
启动完成:
发现web-server运行的服务已经更换了:
(img-Wqqxy0AP-1680186433339)]
[外链图片转存中…(img-rUzF7tzh-1680186433339)]
jenkins构建完成:
[外链图片转存中…(img-vraUzlSF-1680186433339)]
同时将镜像打包发送到harbor服务器中:
[外链图片转存中…(img-Ex8ca3Nd-1680186433340)]
[外链图片转存中…(img-dLclmkOP-1680186433341)]
[外链图片转存中…(img-d7ApIscU-1680186433341)]
启动完成:
[外链图片转存中…(img-o6QFncwF-1680186433342)]
发现web-server运行的服务已经更换了:
[外链图片转存中…(img-Gy7Ra7kf-1680186433342)]
[外链图片转存中…(img-HnG9NTri-1680186433343)]
以上就是全部过程。