【Gitlab CI/CD】.gitlab-ci.yml文件工作原理讲解

2,531 阅读3分钟

.gitlab-ci.yml使gitlab自动检测push代码并将通过代码封装为Docker上传


非常感谢博主清晰讲解,本文部分图文出自该篇博客:www.jianshu.com/p/4cc441b1c…

初步认识CICD

CI:Continuous Integration 持续集成
CD:Continuous Delivery/Deployment 持续交付/部署

当前项目需求需要接入Gitlab的CICD功能,CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。
在这里插入图片描述CICD工作流:
在这里插入图片描述1.当前的代码库托管在Gitlab上, 且已经为代码仓库配置了gitlab-runner服务, 它是用来实际执行CI任务的服务器;GitLab-Runner就是一个用来执行软件集成脚本的东西。

你可以想象一下:Runner就像一个个的工人,而GitLab-CI就是这些工人的一个管理中心,所有工人都要在GitLab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,GitLab-CI就会通知相应的工人执行软件集成脚本。

一般来说,gitlab上已由负责人配置好了gitlab-runner,我们只需要编写好.gitlab.yml文件提交代码即可触发runner进行工作。

2.提交代码,且根目录中包含一个名为.gitlab-ci.yml文件,该文件是用来指定构建、测试和部署流程、以及CI触发条件的脚本,其概念类似于docker-compose.yml文件;

3.Gitlab检测到.gitlab-ci.yml文件,若当前提交符合文件中指定的触发条件,则会使用配置的gitlab-runner服务运行该脚本进行测试等工作;

4.若.gitlab-ci.yml中定义的某个自动化脚本运行失败,将判定为此次CI不通过,则需要提交者修复问题代码后重复提交,直至自动化CI通过。

5.没有问题的提交才能被项目负责人merge到主分支,进行后续的部署工作。

.gitlab-ci.yml文件功能原理介绍

GitLab提供了持续集成服务。如果我们添加一个.gitlab-ci.yml文件到项目的根目录,并配置您的GitLab项目以使用一个Runner,然后每次提交或push都会触发CI管道自动检测被提交代码的合法性。

如果根目录正确配置了.gitlab-ci.yml文件,那么cicd页面将看到【被监控分支】上每次代码提交后状态:
在这里插入图片描述文件示例:(摘自www.jianshu.com/p/4cc441b1c…
在这里插入图片描述Pipeline说明

一个.gitlab-ci.yml文件触发后会形成一个pipeline任务流由gitlab-runner来运行处理,pipeline中stage、job概念如下,需要按照项目实际情况定义不同stage和job, 如下流程示意图帮助理解:
在这里插入图片描述

配置项目自动生成docker

.gitlab-ci.yml 源代码:

before_script:   
  - export env=$(echo ${CI_COMMIT_REF_NAME} | tr '[A-Z]' '[a-z]')   
  - export tag=pipe-$(echo "${CI_PIPELINE_IID}" | sed 's/(//g' | sed 's/)//g')-commit-${CI_COMMIT_SHA:0:8}   
  - export module="${CI_PROJECT_NAME}" # or other value defined globally in gitlab-ci.yml   
  - export imagename= XXX/env/${env}/datanlp/data/file_diff/${module}.tar:${tag} 

stages:   
  - build-docker #自定义阶段

package: #自定义的job名字:package  
  stage: build-docker #和之前定义的阶段名一致  
  only:     
    - master #被监控分支,当该分支有代码变化将唤起CICD检测  
  script:     
    - docker build -f ./docker/Dockerfile -t $imagename .     
    - docker push $imagename

关于变量($XXX)的使用:
blog.csdn.net/github_3563…

参考
[1] www.jianshu.com/p/4cc441b1c…
[2] blog.csdn.net/lizhiqiang1…