「GitLab CI/CD」- 编写 .gitlab-ci.yaml 文件(学习笔记)

示例 .gitlab-ci.yaml 文件

如下内容,为示例 .gitlab-ci.yaml 文件,记录我们的常用指令及含义:

variables:
  PROJECT_FOLDER: /data/${CI_PROJECT_NAMESPACE}_${CI_PROJECT_NAME}

stages:
  - build
  - test
  - deploy

default:
  before_script:
    - # run some shell cmds

####### 项目构建 #######

build:
  stage: build
  tags:
    - "<tag of gitlab runner>"
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - mvn $MAVEN_CLI_OPTS compile
    - docker-compose build
    - docker-compose push

####### 项目测试 #######

unit_tests:
  stage: test
  tags:
    - "<tag of gitlab runner>"
  script:
    - mvn $MAVEN_CLI_OPTS test

integration_tests:
  stage: test
  tags:
    - "<tag of gitlab runner>"
  script:
    - mvn $MAVEN_CLI_OPTS test

####### 代码分析 #######

# https://docs.gitlab.com/ee/user/project/merge_requests/code_quality.html
code_quality:
  stage: test
  except:
    - master
  tags:
    - "<tag of gitlab runner>"

####### 应用部署 #######

deploy_to_staging:
  stage: deploy
  only:
    - develop
  tags:
    - "<tag of gitlab runner>"
  before_script:
    - mkdir -pv ${PROJECT_FOLDER} && rsync -av ./ ${PROJECT_FOLDER}/ && cd ${PROJECT_FOLDER} && pwd
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - docker-compose down
    - docker-compose pull
    - docker-compose up -d

deploy_to_production:
  stage: deploy
  only:
    - master
  tags:
    - "<tag of gitlab runner>"
  before_script:
    - mkdir -pv ${PROJECT_FOLDER} && rsync -av ./ ${PROJECT_FOLDER}/ && cd ${PROJECT_FOLDER} && pwd
	- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - docker-compose down
    - docker-compose pull
    - docker-compose up -d

.gitlab-ci.yaml

before_script

Using SSH keys with GitLab CI/CD | GitLab
GitLab CI/CD pipeline configuration reference | GitLab

通过 before_script 指令,可以在运行 script 指令前,执行某些命令

variables

GitLab CI/CD environment variables | GitLab
Go.gitlab-ci.yml · master · GitLab.org / GitLab CI Yml – Deprecated · GitLab

用于定义环境变量,以在后面进行引用。

include

GitLab CI/CD pipeline configuration reference | GitLab

通过 include 指令,可以引入其他路径(或其他仓库)的 gitlab-ci.yml 文件。

cache

Keyword reference for the .gitlab-ci.yml file / cache

作用:在多个 Job 之间,缓存指定的文件和目录。

为了缓存 maven 下载的 .m2/ 模块,我们修改 GitLab Runner Docker Execuotr 的配置,将宿主机的目录挂载到容器:

[runners.docker]
  ...
  volumes = ["/home:/home", "/root:/root"]
  ...

参考文献

The .gitlab-ci.yml file | GitLab
docs/configuration/advanced-configuration.md · master · GitLab.org / gitlab-runner · GitLab