CICD搭建流程
前提:已经完成gitlab以及gitlab-runner的安装注册操作,服务器以安装maven和java并配好系统环境变量
开始模拟构建一个简单的springboot项目,访问/test1/hello,页面会返回hello
下面开始实现CICD自动化部署
需要在项目文件下新建一个docker-ci的文件夹,里面有一个cicdhello-hello的文件夹和docker-compose.yml文件(这两个文件是同级),可以参考上图的文件目录
cicdhello-hello文件夹下主要放两个东西,其中一个是构建镜像所需要的Dockerfile文件,还有一个是对应的本次单体服务的jar包(现在还没有)
Dockerfile文件内容参考如下
FROM java:8
#Copy the jar file
RUN mkdir -p /opt/run/
ADD ./cicd_hello-0.0.1-SNAPSHOT.jar /opt/run/
WORKDIR /opt/run/
上面代码意思是,基于java:8这个基础镜像(前提是docker已经拉取了java:8这个官方镜像),创建/opt/run文件夹,将jar包添加到/opt/run下,然后切换到/opt/run/目录下
docker-compose.yml文件
version: '3'
services:
cicdhello-hello:
build:
context: ./cicdhello-hello
dockerfile: Dockerfile
image: cicdhello-hello:latest
container_name: cicdhello-hello
ports:
- "9777:9777"
entrypoint: ["java","-jar","-Xms1024m","-Xmx1024m","/opt/run/cicd_hello-0.0.1-SNAPSHOT.jar"]
要注意服务器的安全组9777端口要确保开放才可以访问到
.gitlab-ci.yml文件
stages:
- build
- deploy
build:
stage: build
tags:
- build
only:
- master
script:
- echo "mvn clean"
- echo "mvn install"
- mvn clean compile
deploy:
stage: deploy
tags:
- deploy
only:
- master
script:
- mvn clean package -Dmaven.test.skip=true
- echo "starting scp jar to dev sever"
- mv ./target/cicd_hello-0.0.1-SNAPSHOT.jar docker-ci/cicdhello-hello
- cd docker-ci && docker-compose stop && docker-compose rm -f
- pwd
- docker-compose up -d --force-recreate --build
两个stage,一个是build,负责maven clean和compile
另一个是deploy,负责打jar包,将jar包文件移动到刚刚创建的docker-ci/cicdhello-hello下面,进入到docker-ci文件中,先停止掉以前的docker-compose启动的容器,然后重新docker-compose up -d进行容器的启动
注意:可能会出现以下报错
Couldn’t connect to Docker daemon at http+docker://localhost - is it running?
这时需要把gitlab-runner这个用户添加到docker用户组里才可以
操作步骤:
sudo groupadd docker #添加docker用户组
cat /etc/group #查看服务器所有的group组
因为是gitlab-runner作为用户,所以要把gitlab-runner加入到docker用户组里
执行指令:
usermod -aG docker gitlab-runner
重启docker
systemctl restart docker
再次执行deploy方法即可成功。访问ip:9777/test1/hello即可看到访问成功的页面