目录

如何使用 GitLab CI/CD 快速实现自动化构建与发布

背景

现在每次开发完成代码之后,都需要到生产服务器手动编译、打包、运行

我希望能够提交代码之后,自动执行编译、打包、重启运行的流程

这个时候就可以接入 CI/CD 流水线,常见的 CI/CD 流水线有:

  • Github Action
  • Jenkins
  • Gitlab

我用的 Gitlab 的 Saas 版,如果有条件可以自己部署 gitlab,官方有开源代码

见:https://about.gitlab.com/

注册 Gitlab

从官方 https://about.gitlab.com/ 注册,即可使用 Saas 版本

⚠️:gitlab 处于某些原因,现在似乎不对中国用户免费开放了……

创建项目

进入 Saas 版 gitlab 之后,创建一个 git 仓库,基本和 github 操作一致,然后提交自己的代码

创建 GitLab Runner

在你服务器下部署 gitlab runner,然后注册到 gitlab 上

创建 CI/CD 流水线

在自己的项目下创建 .gitlab-ci.yml 文件

模版文件如下:

stages: # 执行的步骤
#  - test
  - build
#  - push
  - deploy
before_script:
  - date
after_script:
  - echo "Job finished at $(date)"
variables: # 环境变量
  GIT_DEPTH: 3 # 抓取代码的深度,如设置 3 ,则 只抓取或克隆最后的3次commits
  GIT_BRANCH: ${CI_COMMIT_REF_NAME} # 内置变量,用于获取当前Git commit所在的分支或标签的名称
  GIT_TAG: ${CI_COMMIT_TAG} # 内置变量,用于获取当前Git commit所在的标签的名称。如果当前Git commit不是一个标签,则${CI_COMMIT_TAG}的值为空字符串。
  GIT_COMMIT: ${CI_COMMIT_SHORT_SHA} # 置变量,用于获取当前Git commit的短哈希值(默认为7位)
  VERSION: ${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}
  CICD_SVC_IMAGE: test-cicd-${VERSION}
# -----------------------------------  test-cicd -------------------------------------
## 1. 单元测试 、golangcli-lint
test-test-cicd:
  stage: test
  tags:
    - master
  script:
    - echo '正在执行单元测试......'
  rules:
    - changes:
        - test-cicd/**/*.*
lint-test-cicd:
  stage: test
  tags:
    - master
  script:
    - echo '正在执行 golangci-lint ......'
  rules:
    - changes:
        - test-cicd/**/*.*

然后提交代码,gitlab 就会自动执行 流水线