[CI/CD] 使用Gitlab实现CI/CD

238 阅读1分钟

概念介绍

GitLab CI/CD 是一个内置在GitLab中的工具,用于通过持续方法进行软件开发:

  • Continuous Integration (CI)  持续集成
  • Continuous Delivery (CD)     持续交付
  • Continuous Deployment (CD)   持续部署

持续集成的工作原理是将小的代码块推送到Git仓库中托管的应用程序代码库中,并且每次推送时,都要运行一系列脚本来构建、测试和验证代码更改,然后再将其合并到主分支中。

持续交付和部署相当于更进一步的CI,可以在每次推送到仓库默认分支的同时将应用程序部署到生产环境。

这些方法使得可以在开发周期的早期发现bugs和errors,从而确保部署到生产环境的所有代码都符合为应用程序建立的代码标准。

GitLab的CI/CD使用文件.gitlab-ci.yml文件配置并放在reporoot directory。文件中定义要运行的脚本并由GitLab Runner执行。Pipeline中的script按job进行分组,为yaml文件格式。

构建working CI的条件:

  1. 添加.gitlab-ci.yml文件;
  2. 配置runner;

这样,之后的每次push都会触发pipeline。

1. Gitlab CI/CD工作流程

1.1 基本CI/CD工作流程

1297175-20230630095349102-156306994.png

1.2 深入CI/CD基本工作流程

如果我们深入研究基本工作流程,则可以在DevOps生命周期的每个阶段看到GitLab中可用的功能,如下图所示:

1297175-20230630095542978-512112486.png

2. 创建.gitlab-ci.yml文件

variables: # 定义全局变量  
    PROJECT_IMAGES: "irweb:$CI_COMMIT_TAG" # gitlab系统变量,获取提交tag的信息
stages:  # 声明阶段
  - build
  - docker
  - test
  - deploy

yarn-build-job:
  stage: build  # 阶段标签
  image: node:18.0.0 # 基于docker镜像
  tags: # 此处为选择gitlab-runner服务的标签
    - 203web
  script: # 执行脚本命令
    - echo "开始构建打包"
    - yarn install
    - yarn build
    - echo "构建完成"
  artifacts: # 使用artifacts关键词可以将当前作业的一些文件存储起来,以便后边job使用
    paths:
      - build/ # 此处我们缓存了yarn build打包生成的文件,以便后续docker build的时候使用
  only: # 此处定义只有git push tag的时候才会触发此job
    - tags

docker-build-job:
  stage: docker
  tags:
    - 203web
  script:
    - echo "开始docker build"
    - echo $PROJECT_IMAGES
    - docker build -t $PROJECT_IMAGES .
    - echo "构建完成"
  needs: # 此处声明依赖于yarn-build-job,确保不会找不到build文件夹
    - job: yarn-build-job
      artifacts: true
  only:
    - tags

lint-test-job:
  stage: test
  tags:
    - 203web
  script:
    - echo "查看镜像"
    - docker images
  only:
    - tags

deploy-job:
  stage: deploy
  tags:
    - 203web
  script:
    - echo "开始部署"
    - echo "Application successfully deployed." # 此处替换为docker run的执行命令即可,在此处可以优化,例如 docker stop容器,然后docker rm删除容器,然后启动本次跟新的容器    - echo "部署成功"
  rules: # 跟only一个意思
    - if: $CI_COMMIT_TAG

注意:YAML文件中使用spaces,不要使用tabs。

更多内容参考Gitlab官方文档:CI/CD YAML syntax reference | GitLab