本手册面向零基础或初学者,通过极简步骤实现CI/CD(持续集成/持续交付)的快速落地。
主要步骤
- 编写.gitlab-ci.yml
- 编写dockerfile,如果不用docker部署,也可以不用写
- 功能验证
gitlab-ci 编排文件
- gitlab-ci文件主要控制流水线,主要定义阶段、任务、变量及制品库的缓存等等
- 功能验证的.gitlab-ci.yml内容
before_script:
image:
name: runner-maven-java:v1.0
entrypoint: [""]
stages:
- init
- compile
- build
- deploy
variables:
MAVEN_REPO: "-Dmaven.repo.local=/root/.m2/repository"
PROJECT: project-nexus
IMAGE_FULL_NAME: 192.168.56.10:8080/depository/project-nexus:v1.0
docker_hub: http://192.168.56.10:8080
docker_user: admin
docker_pwd: Harbor
cache:
key: gitlab-cache
paths:
- .m2/repository
init:
stage: init
tags:
- nexus-runner
script:
- docker -v
env:
stage: init
tags:
- nexus-runner
script:
- env
compile:
stage: compile
allow_failure: false
only:
- master
tags:
- nexus-runner
script:
- find / -name settings.xml
- cat ./settings.xml > /usr/local/bin/apache-maven-3.3.9/conf/settings.xml
- mvn -Dmaven.repo.local=$MAVEN_REPO clean package -Dmaven.test.skip=true
artifacts:
name: $PROJECT
expire_in: 1 days
paths:
- target/*.jar
build:
stage: build
script:
- docker login --username=$docker_user --password=$docker_pwd $docker_hub
- docker build -t $IMAGE_FULL_NAME .
- docker push $IMAGE_FULL_NAME
- rm -rf target
- docker rmi $IMAGE_FULL_NAME
when: manual
tags:
- nexus-runner
deploy:
stage: deploy
script:
- docker-compose down
- docker-compose pull project-nexus
- docker-compose up -d
when: manual
tags:
- nexus-runner
- 关键配置项
- image 执行器要使用的容器镜像
- stages 定义流水线需要的任务阶段,我这里设置了init、compile、build、deploy
- variablesd 设置全局变量,主要设置一些公共属性值
- cache 缓存设置
- docker-compose.yml文件内容
- 主要是设置编排服务的容器化规则,包括镜像、暴露的端口号
services:
project-nexus:
image: 192.168.56.10:8080/depository/project-nexus:v1.0
container_name: project-nexus
restart: always
privileged: true
ports:
- mode: ingress
target: 8080
published: "18080"
protocol: tcp
- image 从流程水推到镜像仓库中的镜像
- ports 设置端口号,target 容器端口, published 映射到宿主机的端口号
- dockerfile文件内容
- 镜像生成文件,主要是把CI/CD生成的jar打成镜像
FROM openjdk:8-jdk
Maintainer allen <1441299@qq.com>
ADD ./target/project-nexus-0.0.1-SNAPSHOT.jar /app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
- ADD 把项目打包后的jar,添加到镜像内
- TZ 设置镜像时区
- 项目整体结构
- docker-compose.yml 也可以放到其他固定目录下,运行的时候用 -f 设置文件路径
功能验证
- 功能验证
- 代码提交
- 流水线执行
镜像库
- 登录Harbor,查看镜像是否推到仓库
- 部署服务
- 18080端口号就是docker-compose.yml映射的宿主机端口号
- 整体pipeline效果图
- 执行中
- 执行完
整个流程环节有些多,涉及到的东西也比较多,如果想实践,要沉下心动起手来吧