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

构建过程

构建完成后发送钉钉通知

GitHub开源地址:https://github.com/xiaodonglicn/gitlab-runner-ci