gitlab ci/cd实践
这篇文章是根据自己的项目实践编写的,可能有些粗糙,但是流程是没问题的
1. 编写gitlab-ci文件
项目根目录创建.gitlab-ci.yml
variables:
COVERAGE_WEBHOOK_URL: $COVERAGE_WEBHOOK_URI?branch=$CI_COMMIT_REF_NAME&gitlabPipelineId=$CI_PIPELINE_ID&gitlabProjectId=$CI_PROJECT_ID
IMAGE_WEBHOOK_URL: $CI_SERVICE_URL/webhook/gitlabProjects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/images
imageTag: $CI_PROJECT_NAME-$DEPLOY_TIME_TAG-$CI_PIPELINE_ID
DOCKER_TLS_CERTDIR: ''
stages:
- code_check
- push_images
- deploy
code_check:
stage: code_check
image: 10.19.64.xxx:8080/ums/maven:3.6.0-jdk-8
tags:
- devops
script:
- mvn clean package -DskipTests
artifacts:
expire_in: 3 hrs
paths:
- ./ib-provider/target/*.jar
push_images:
stage: push_images
image: 10.19.64.xxx:8080/library/docker:19.03.14
tags:
- devops
services:
- 10.19.64.xxx:8080/library/docker:19.03.14-dind
before_script:
- mkdir -p $HOME/.docker
- echo $DOCKER_AUTH_CONFIG > $HOME/.docker/config.json
- docker info
script:
- docker build -t ${CI_REGISTRY_IMAGE_DIR}:${imageTag} .
- docker push ${CI_REGISTRY_IMAGE_DIR}:${imageTag}
- wget --post-data "imageTag=$imageTag" $IMAGE_WEBHOOK_URL
deploy:
stage: deploy
image: harbor.xxx.cn/devops-ci/mvn:1.0.1
tags:
- devops
script:
- echo $imageTag
- wget --no-check-certificate --header="Authorization:$AUTH_TOKEN" --post-data="pipelineId=$CI_PIPELINE_ID&ref=$CI_COMMIT_REF_NAME&imageName=$imageName&tag=$imageTag&deployVersion=$deployVersion&description=$description&deployParams=$deployParams&envName=$envName&deployType=$deployType" $DEPLOY_WEBHOOK_URL
only:
variables:
- $IS_DEPLOY == "1"
dependencies:
- push_images
定义pipeline的阶段stage,然后定义每个阶段里面干了什么,使用的镜像是什么,执行的脚本是什么,就是定义一系列可执行的行为,然后串联在一起,形成pipeline,具体gitlab-ci文件如何写规则是什么就是另外的篇幅了,可自行查找教程,没学过也不难,文中可以很直观的看出流程和内容的
2. 设定gitlab-ci文件里的参数变量
比如文件中的$CI_SERVICE_URL是以变量形式存在的,对于项目有灵活配置的,以变量形式存在,每个项目可以单独配置,也以变量形式保证项目的安全保密性
进入项目,Settings->CI/CD
里面就是CI/CD要关注的配置,这里配置参数,进入Variables新增变量
3. 配置gitlab runner
怎么安装gitlab runner可以参考官网https://docs.gitlab.com/runner/install/
安装完后将runner注册进gitlab,gitlab上都写着指令教程,放心实践
我这个项目已经有了个组共享的runner,我就直接用就好了,可以在gitlab-ci文件上指定runner ,用tags属性
什么是gitlab runner
gitlab runner是一个用来执行软件集成脚本的系统,打个比喻,runner就是工厂的工人,而gitlab-ci是这个工厂的主管,工厂有多个项目,所有工人招聘进来都需要注册登记,分配给相应的项目,当有项目变化时,活就来了,gitlab-ci就会通知相应的runner工人去执行相应的软件集成脚本
4. 运行pipeline
进入CI/CD->Pipelines->Run pipeline
5. 查看pipe运行状态
进入运行pipeline的状态,这里可以看到pipeline有几个阶段,这里看到有3个job,一个是code_check,一个是push_images,一个是deploy
可以点击pipeline的阶段去看日志
也可以进入CI/CD->Pipelines查看执行流水线的记录以及每个阶段的状态
6. 流水线deploy阶段
这里的deploy没有直接部署应用,而是用wget去调用devops的部署服务,实现部署,这里自己可以改成其他部署形式
我们项目的devops是调用rancher来实现k8s容器部署,实现gitlab+k8s实现了CI/CD
7. 结束
到这就完成了pipeline的流程,写这篇文章是为了分享自己的知识和为自己做一个备忘录。谢谢观看到最后