六、 CI/CD入门操作
基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成
基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署
1. 创建springboot项目
编写简单的程序
- 修改pom.xml,添加打包的名称配置
xml
<build>
<!-- 打包的名称 -->
<finalName>test</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
- 创建Dockerfile,docker-compose.yml
Dockerfile文件
dockerfile
FROM openjdk:8-jdk-alpine
COPY test.jar /usr/local/
WORKDIR /usr/local/
CMD java -jar test.jar
docker-compose.yml文件
yaml
version: '3.1'
services:
test:
build:
context: ./
dockerfile: Dockerfile
image: test:v1.0.0
container_name: test
ports:
- 8080:8080
- 提交代码,推送到gitlab上
2. 持续交付、部署
程序代码在经过多次集成操作到达最终可以交付,持续交付整体流程和持续集成类似,不过需要选取指定的发行版本
1. Jenkins中创建一个item
在Jenkins的首页,点击新建Item
2. 配置Item的git仓库
进入新建的Item中,配置Git的远程仓库
3. 配置Item的Build Steps
然后配置maven,拉取代码后需要用maven打包。选择调用顶层maven目标,选择你的maven。
构建后操作,把jar推送至目标服务器,然后运行。
Jenkins点击立即构建,jenkins会拉取最近的代码,重新构建,然后把打包后的文件上传到容器根目录下的workspace
要想运行上传过来的文件,还需要进行 以下操作;
点击配置,找到构建后操作
进入配置页面后,找到构建后操作
修改 Source files下面的配置,添加docker配置的目录
txt
target/*.jar docker/*
Exec command下面添加下面配置
bash
cd docker
mv ../target/*.jar ./
docker-compose down
docker-compose up -d --build
点击应用,保存。然后再次构建,再次构建后,发现构建失败,报了下面的问题:
解决方法:**
1.cd docker 要采用绝对路径
Exec command下面添加下面配置
bash
cd /usr/local/test/docker
mv ../target/*.jar ./
docker-compose down
docker-compose up -d --build
2.宿主机的端口号已经被Jenkins占用,修改docker-compose.yml文件中宿主机映射的端口号
yaml
version: '3.1'
services:
test:
build:
context: ./
dockerfile: Dockerfile
image: test:v1.0.0
container_name: test
ports:
- 8081:8080
完成上述步骤之后,再次构建,构建成功。然后去宿主机查看docker容器,docker ps
发现容器运行失败了。
这也是一个小插曲。查看日志
bash
[root@clear test]# docker logs -f 64b464420c8d
no main manifest attribute, in test.jar
修改项目的pox.xml
- 添加下面配置
xml
<packaging>jar</packaging>
- 检查中标签下面是否有个 true,有则去掉这个标签。
操作完成后,再次重新构建,docker-ps查看容器,成功了。
访问192.168.201.111:8081,成功了
虽然已经可以访问,但是还存在一个小问题,就是我修改代码,重新构建之后,原来的重名的镜像都变成了none,
需要一个命令,添加到构建后执行的命令中
bash
# 删除为none的镜像
docker image prune -f
# 完整命令
cd /usr/local/test/docker
mv ../target/*.jar ./
docker-compose down
docker-compose up -d --build
docker image prune -f
CI的整个流程就搞定了,但是我们每次都是拉取最新的代码进行构建的,我们需要不同的环境进行不同的部署。这就需要git pameter插件了。
配置git参数。
配置把代码切换到当前的tag上,选择不同的提交点。需要在maven打包之前,先切换代码的提交点。
添加配置 git checkout $tag,切换提交点。
把执行步骤拖到maven构建的前面
给代码打上不同的标签。
再次到构建的页面,就可以选择对应的标签进行构建了。