跳转至

基于Gitlab的Devops实战

源码

Gitlab仓库部署:采用 Gitlab 进行源码管理

  • master :版本发布
  • dev :功能开发合并,合并到 master
  • feature:相关功能开发分支,合并到 dev

持续集成CI:采用 Gitlab CI Pipeline 做持续集成

  • 注意:新建分支会触发 Push Webhook,不应该触发 CI;
  • 不足:测试MergeRequest是否可以合并:Merge Request Result Pipeline 企业版只有;

版本自动发布 :采用规范的 commit 信息

  • master 分支出 release 版本形成 tag,从 dev 提交 PR 合并;
  • dev 分支做开发,从 feature 分支提交 PR 合并,出 snapshot 版本,不发布版本;
  • dev 测试完成后,合入 master,后续版本开发在发布版本前不合入 dev;
  • master 出版本后,会生成版本commit记录,合并回 dev;

CI

持续集成CI:采用 Gitlab CI 做持续集成

  • 集成环境独立于开发/测试/生产环境;
  • 可以通过 docker runner / k8s runner;

自动构建

  • feature 分支:自动触发构建,发布 SNAPSHOT 版本 ?

  • dev 分支 :自动触发构建,发布 SNAPSHOT 版本;

  • 测试人员更希望手动触发版本?

  • master:自动触发构建,发布 RELEASE 版本;

  • 同 DEV 分支进行构建,但版本为 RELEASE 的版本;

  • 仅对 master 分支,执行semantic-release生成版本CHANGELOG信息;

手动构建:

  • 选择 feature 触发构建,发布 SNAPSHOT 版本,在 开发 环境验证;
  • 选择 dev 触发构建,发布 SNAPSHOT 版本,在 测试 环境验证;
  • 选择 master 触发构建,发布 RELEASE 版本,部署 生产 环境;

CD

自动部署:argocd 采用监听 git 仓库特定分支的特定目录下的Yaml的形式,自动进行部署。

采用 master/dev/feature 分支模型 进行开发:

  • 开发环境:监听特性分支的变动;
  • argocd 监听的分支名不支持正则,如何处理?;
  • 开发环境主动推送?
  • 测试环境:监听 dev 分支的 yaml 变动;
  • dev 分支并不支持 Git 变更回推

  • 生产环境:监听 master 分支的 yaml 变动;

手动部署:

  • 选择手工构建完成后的相应版本,部署到环境;

Issue Tracker

问题跟踪:采用Gitlab 集成 Jira 进行问题跟踪(创建,修改,关闭等)

  • 使用 dev 作为默认分支

Artifacts

制品库:采用 nexus 作制品库(maven/npm/image 等)

  • 可选:采用 habor 作为 docker image 库

Notifier

事件通知:钉钉集成

  • CI 通知,Gitlab Webhook 配置 Pipeline 结果;(钉钉的极弧Gitlab不支持)
  • CD 通知,Argo Workflow ?

CheckGate

本地

IDEA 中的代码检查:SonarLint

服务器

代码质量管理的开源平台:SonarQube

Git -> CI/CD(Jenkins, GitlabCI) -> SonarQube + Webhook -> Message Notifier

Chatops:TODO

  • Tekton Pipeline:https://github.com/jenkins-x/lighthouse/blob/main/docs/install_lighthouse_with_tekton.md
  • Jenkins Job:https://github.com/jenkins-x/lighthouse/blob/main/docs/install_lighthouse_with_jenkins.md