GitLab Runner CI 自动化部署
在部署服务器上安装gitlab-runner
yum install gitlab-runner向GitLab-CI注册gitlab-runner
找到你的gitlab上存放的项目,找到settings–>CI/CD–>Runner

部署服务器上进行runner注册gitlab-runner register
1. url:gitlab所在的测试服务器地址
2. token:项目的token,用于关联runner和项目
3. name:runner的名字,用于区分runner
4. tags:用于匹配任务(jobs)和执行任务的设备(runners),此处不填直接回车时,默认Can run untagged jobs值为true
准备gitlab-ci.yml文件
在gitlabci-service根目录下:
在ci目录下创建.gitlab-ci.yml文件
include:
- project: "ci-devops/gitlabci-service"
ref: main
file: "be/java_build.yml"
- project: "ci-devops/gitlabci-service"
ref: main
file: "be/dingTalk_ci.yml"
variables:
TIMESTAMP: 'date -d $CI_COMMIT_TIMESTAMP +%Y%m%d%H%M'
BUILD_SHELL: "mvn clean package -T 2C -Dmaven.test.skip=true -Dmaven.compile.fork=true"
ARTIFACT_REPOSITORY_NAME: "java"
TARGET_FILE_PATH: "$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA-$CI_PIPELINE_ID"
TARGET_ARTIFACT_NAME: "$CI_PROJECT_NAME-$CI_COMMIT_REF_NAME"
#IMAGE_TAG: "$HARBOR_URL/$CI_PROJECT_NAME/$CI_JOB_NAME:`$TIMESTAMP`"
stages:
- build_image
- dingTalk
auto-deploy-demo:
stage: build_image
extends: .data-platform-common-template
dingTalk:
rules:
- if: '$CI_COMMIT_REF_NAME == "dev/auto-deploy"'
stage: dingTalk
extends: .dingTalk
在buildfile目录下创建${projectName}.Dockerfile文件,用于docker构建镜像
FROM openjdk:17
WORKDIR /app
COPY demo2/target/*.jar /app/demo2.jar
EXPOSE 8090
CMD ["java", "-jar", "demo2.jar"]在deployfile目录下创建deploy-${projectName}.yml文件,用于执行k8s相关命令
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: demo2
name: demo2
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo2
template:
metadata:
labels:
app: demo2
spec:
containers:
- image: APP_IMAGE
imagePullPolicy: IfNotPresent
name: demo2
ports:
- containerPort: 8090
protocol: TCP
在ci目录下创建java_build.yml文件,用于处理在自动化部署中,打包、推包等流程
.data-platform-common-template:
stage: build_image
tags:
# 指定runner
- server
rules:
# 指定分支
- if: '$CI_COMMIT_REF_NAME == "dev/auto-deploy"'
changes:
- $CI_JOB_NAME/**/*
script:
- |
- echo "====================进入$CI_BUILD_NAME======================="
- echo "========定义变量:$CI_JOB_NAME========="
#打印所有的环境变量,用于调试
- env
- echo "====================编译======================="
- java -version
- mvn -version
# 如果是多层目录,需要进入当前项目所在目录
- cd $CI_JOB_NAME/
# - mvn clean
# - mvn compile
- echo "====================开始打包======================="
- $BUILD_SHELL
- echo "====================打包完毕======================="
- cd target/
- ls
- pwd
- echo "=================================================="
# 退出到根目录
- cd ..
- cd ..
- ls
# 拉取Dockerfile文件,用于docker build
- wget -O Dockerfile http://192.168.6.246:70/ci-devops/gitlabci-service/-/raw/main/buildfile/$CI_JOB_NAME.Dockerfile
# 打印Dockerfile
- ls && cat Dockerfile
# 构建镜像
- docker build . -t $HARBOR_URL/demo/$CI_JOB_NAME:$($TIMESTAMP)
# 推送镜像至仓库
- docker push $HARBOR_URL/demo/$CI_JOB_NAME:$($TIMESTAMP)
- docker rmi $HARBOR_URL/demo/$CI_JOB_NAME:$($TIMESTAMP)
- IMAGES=$HARBOR_URL/demo/$CI_JOB_NAME:$($TIMESTAMP)
- echo $IMAGES
# 拉去deploy.yml,用于执行k8s相关命令
- wget -O deploy.yml http://192.168.6.246:70/ci-devops/gitlabci-service/-/raw/main/deployfile/deploy_$CI_JOB_NAME.yml
- ls
# 替换变量
- sed -i "s@APP_IMAGE@$IMAGES@g" deploy.yml
- cat deploy.yml
# 暂时关闭
- kubectl apply -f deploy.yml在需要加入自动化部署的gitlab项目下引入.gitlab-ci.yml文件
Settings-CI_CD/-General pipelines选项中引入.gitlab-ci.yml文件
提交代码后,会触发pipeline
构建过程
构建完成后发送钉钉通知

评论区