Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目

我之前做这个实验的时候卡了很久。所以写一篇博客纪念一下。
由于网上教程很多,所以如果你已经成功安装了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
本地主机:代码编写

第一步(主机,代码编写机):

先创建一个简单的java的SpringBoot项目:
Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第1张图片

然后将项目添加到gitlab中:

创建ssh key:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第2张图片

将ssh-key添加到gitlab上:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第3张图片

第二步(gitlab-server、web-server | vm3):

在虚拟机中下载gitlab-ce

image-20230320161813420

下载完成:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第4张图片

添加配置:

image-20230320205842721

重新配置:

image-20230320205906944

启动服务:

image-20230320210505598

查看密码:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第5张图片

在浏览器输入网址:http://192.168.126.131/

账号是root, 密码是我们刚刚查看的密码(出现502等等问题的原因大概率是内存不够)

然后就可以进入界面了:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第6张图片

第三步(Harbor server | redis):

第一步:安装docker

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第7张图片

启动docker服务:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第8张图片

第二步:docker-compose的安装:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7RbiiuB1-1680186433295)(https://gitee.com/leaf32379/images/raw/master/newBranch4/202303302215489.png)]

第三步:下载docker compose

image-20230320162518070

下载完成:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第9张图片

下载完成之后安装和测试docker compose:

image-20230320163251489

成功之后就可以开始Harbor的部署:

下载文件:

wget https://github.com/goharbor/harbor/releases/download/v2.5.6/harbor-offline-installer-v2.5.6.tgz

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第10张图片

image-20230320163504138

下载成功:

image-20230320191128266

解压到 /home:

image-20230327141342188

执行操作:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第11张图片

修改配置文件:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第12张图片

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第13张图片

执行命令

./prepare
./install.sh

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第14张图片

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第15张图片

执行完成:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第16张图片

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第17张图片

第四步(jenkins-server | vm4):

  1. 安装JDK

    Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第18张图片

centos自带了JDK环境。

2.安装Jenkins

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第19张图片

下载完成:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第20张图片

由于需要java环境,检查发现系统存在java环境:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第21张图片

查看本机的java环境:知道了java的安装路径

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第22张图片

编辑配置文件:

vim /etc/profile

添加内容:

image-20230322214717852

profile生效:

source /etc/profile 

修改jenkins的配置文件

vim /etc/init.d/jenkins

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第23张图片

vim /etc/sysconfig/jenkins

image-20230322220215098

启动jenkins服务:

java -jar jenkins.war --httpPort=9090
   
192.168.126.132:9090

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第24张图片

进入到jenkins界面:(出现了插件下载失败的错误)

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第25张图片

完成初始化设置之后进入到主界面:Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第26张图片

git下载:

image-20230327103443796

下载maven:

image-20230327111649103

添加maven的环境变量:

image-20230327111531325

查看是否配置成功:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第27张图片

docker安装(之前已经装好了):

image-20230327114004375

第五步:配置docker主机使用Harbor:

jenkins

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第28张图片

harbor:

image-20230327143103251

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第29张图片

image-20230327143203859

web-server:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第30张图片

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第31张图片

第六步:配置jenkins使用docker

安装一系列插件:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第32张图片

JDK配置:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第33张图片

git配置:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第34张图片

Maven配置:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第35张图片

配置ssh连接主机:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第36张图片

第七步:上传项目到gitlab:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第37张图片

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第38张图片

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第39张图片

在gitlab中查看:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第40张图片

第八步:创建一个jenkins项目:

基础配置:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第41张图片

配置git来拉取代码:这里选择利用tag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l58s3ONG-1680186433330)(https://gitee.com/leaf32379/images/raw/master/newBranch4/202303302222892.png)]

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第42张图片

webhook配置:

首先在jenkins添加一个触发器:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第43张图片

这里接受了一个Tag_from参数,因为我们是按照tag来构建镜像的,所以需要传输一个tag参数

这个参数在gitlab发送的请求体中,是这种形式。

"ref": "refs/tags/1.0.11",

并创建一个token:

image-20230330213228200

在gitlab的项目设置中,添加一个webhook

URL是jenkins中提供的连接,Secert令牌是在jenkins中设置的token

image-20230330213311307

触发方式选择的是提交tag:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第44张图片

这样就可以做到在提交代码到gitlab时,让jenkins自动构建。

执行时的指令(Build Step):

首先,我们需要使用mvn打包项目:指令是

### 调用顶层Maven目标时,不需要写 mvn
mvn clean install -DshipTests

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第45张图片

下一步,就是在jenkins主机上将程序打包成镜像,并发送到harbor服务器上:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第46张图片

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的全局设置中配置):

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第47张图片

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中查看:

image-20230330214759086

可以发现我们的程序正在执行。

image-20230330214820321

第九步:自动化部署

准备工作:

1. gitlab-server
### 启动docker,关闭防火墙,运行gitlab
systemctl stop firewalld
systemctl start docker
gitlab-ctl start
### 访问gitlab
192.168.126.131

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第48张图片

2. harbor启动
### 启动docker,关闭防火墙,运行gitlab
systemctl stop firewalld
systemctl start docker
### 启动harbor
cd /home/harbor
./prepare
./install.sh
### 访问harbor
192.168.126.129

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第49张图片

3. jenkins启动:
### 启动docker,关闭防火墙,运行gitlab
systemctl stop firewalld
systemctl start docker
### 启动jenkins
cd /etc/init.d
./jenkins start
### 访问jenkins
192.168.126.132

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第50张图片

4. 部署机
### 启动docker,关闭防火墙
systemctl stop firewalld
systemctl start docker
### 启动上次部署好的项目
docker start ps

项目效果:

image-20230330212108283

自动化部署:

第一步:修改项目代码,并利用git上传到gitlab中

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第51张图片

给提交打上tag:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第52张图片

推送代码:(要同时推送标记)

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第53张图片

第二步:gitlab收到推送通知jenkins自动构建并打包镜像。

image-20230330212244828

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第54张图片

jenkins构建完成:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第55张图片

同时将镜像打包发送到harbor服务器中:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第56张图片

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第57张图片

第三步:jenkins利用ssh远程连接web-server主机,拉取镜像并启动容器:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第58张图片

启动完成:

Docker+jenkins+Harbor+gitlab自动部署最简单的SpringBoot项目_第59张图片

发现web-server运行的服务已经更换了:

image-20230330212552083

image-20230330212600363

(img-Wqqxy0AP-1680186433339)]

[外链图片转存中…(img-rUzF7tzh-1680186433339)]

jenkins构建完成:

[外链图片转存中…(img-vraUzlSF-1680186433339)]

同时将镜像打包发送到harbor服务器中:

[外链图片转存中…(img-Ex8ca3Nd-1680186433340)]

[外链图片转存中…(img-dLclmkOP-1680186433341)]

第三步:jenkins利用ssh远程连接web-server主机,拉取镜像并启动容器:

[外链图片转存中…(img-d7ApIscU-1680186433341)]

启动完成:

[外链图片转存中…(img-o6QFncwF-1680186433342)]

发现web-server运行的服务已经更换了:

[外链图片转存中…(img-Gy7Ra7kf-1680186433342)]

[外链图片转存中…(img-HnG9NTri-1680186433343)]

以上就是全部过程。

你可能感兴趣的:(jenkins,docker,gitlab,spring,boot,java)