环境准备
1.、gitLab:因为gitLab需要内存太大(4G起步),我们使用官网的https://gitlab.com/
2.、docker:也安装在宿主机中
3、gitLabRunner:安装在自己服务器宿主机中(不安装在容器里)
注意:gitLabRunner如果安装在容器里,此后在runner环境下 一些docker命令会找不到(容器里面执行不了docker命令)。目前还没找到解决办法
安装好之后 把gitLabRunner注册到gitLab中,这有很多的教程 便不再赘述。
本地代码,通过提交到gitLab之后,会通过gitlab.yml文件,触发gitLabRunner的CICD流程 如下:
代码准备
cicd和docker的配置文件分别为 Dockerfile 和gitlab.yml 均放在根目录下
1.这里是Dockerfile文件内容
maven的打包脚本是在Dockerfile中实现的
# maven 打包 打包过程在Dockerfile FROM maven:3.6.3-jdk-8-slim AS builder ADD ./pom.xml pom.xml ADD ./src src/ RUN mvn clean compile package -Dmaven.test.skip=true FROM openjdk:8-jre-slim-buster # 指定时区 RUN echo "Asia/Shanghai" > /etc/timezone;dpkg-reconfigure -f noninteractive tzdata # 指定工作目录 WORKDIR /app # copy目录 COPY --from=builder target/demo-0.0.1-SNAPSHOT.jar /app/app.jar ENTRYPOINT ["sh","-c","java -jar /app/app.jar"]
2.这里是.gitlab.yml文件的内容,gitlab.yml文件的核心代码就两行 构建和启动。
- docker build -t hello-cicd .
- docker run -d -p 8080:8080 --name hello-cicd hello-cicd
stages: - build - deploy job_build: stage: build tags: - hostrunner script: # 通过Dockerfile生成镜像 - echo "=============== 开始生成镜像 ===============" - docker build -t hello-cicd . job_deploy: stage: deploy tags: - hostrunner script: # 删除已经在运行的容器 - if [ $(docker ps -aq --filter name=hello-cicd) ]; then docker rm -f hello-cicd;fi # 删除none的镜像 - docker rmi $(docker images -f "dangling=true" -q) # 通过镜像启动容器,并把本机端口映射到容器端口 - echo "=============== 通过镜像启动容器,并把本机端口映射到容器端口===============" - docker run -d -p 8080:8080 --name hello-cicd hello-cicd only: - master
源码和后续优化
SpringBoot源码地址 开箱即用提交之后 输入http://ip:8080/test即可访问
1.当我们yml文件很多的时候 可以抽出模板库的方法管理(类似java的父类继承)
2.此时的启动命令是 ENTRYPOINT ["sh","-c","java -jar /app/app.jar"] java -jar 实际工作中 我们会有配置文件 启动命令往往是 java -jar --spring.profiles.active=prod
如果prod配置文件中 一些密码不可以写在开发的配置文件里,我们可以使用变量的方法提取密码