From c6bcf925b7bea1ff79f99f6b9c20d43ebe9d13ab Mon Sep 17 00:00:00 2001 From: lvsi <15239928381@163.com> Date: Sun, 3 Mar 2024 21:18:00 +0800 Subject: [PATCH] refactor: refactor the design --- .github/workflows/cicd.yml | 3 + .../cd/stage_monitor/job_health_check.sh | 2 +- .pipeline/internal/helper.sh | 4 +- CHANGELOG.md | 56 ------ README.md | 86 +++------ doc/QA.md | 22 +++ doc/USAGE.md | 112 ++++++------ doc/design.md | 63 +------ index.html | 169 +++++++----------- 9 files changed, 173 insertions(+), 344 deletions(-) create mode 100644 doc/QA.md diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index c84c499..8256129 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -8,6 +8,8 @@ jobs: CIManager: runs-on: ubuntu-latest env: + PROJECT_NAME: "CIManager" + # ========================= CI ========================= # [stage] = pre CI_STAGE_PRE_JOB_PRE_CHECK_SWITCH: "ON" @@ -33,6 +35,7 @@ jobs: CD_STAGE_MONITOR_JOB_API_TEST_CMD: "" CD_STAGE_MONITOR_JOB_HEALTH_CHECK_SWITCH: "ON" CD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD: "" + CD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD_RES: "ok" steps: - uses: actions/checkout@v1 - run: | diff --git a/.pipeline/cd/stage_monitor/job_health_check.sh b/.pipeline/cd/stage_monitor/job_health_check.sh index 9f7f846..95b89fa 100644 --- a/.pipeline/cd/stage_monitor/job_health_check.sh +++ b/.pipeline/cd/stage_monitor/job_health_check.sh @@ -8,7 +8,7 @@ if [ "${global_job_cmd}" != "" ]; then ((i++)) res=$(eval $global_job_cmd) - if [ "${res}" == "${global_job_cmd_res}" ]; then + if [ "${res}" == "${CD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD_RES}" ]; then echo "health check success" break fi diff --git a/.pipeline/internal/helper.sh b/.pipeline/internal/helper.sh index 55e5461..bf1b2a3 100644 --- a/.pipeline/internal/helper.sh +++ b/.pipeline/internal/helper.sh @@ -19,7 +19,7 @@ print_phase() { PHASE_ID=0 fi ((PHASE_ID++)) - printf "\e[36m+++++ Phase$PHASE_ID: $1 +++++\e[0m\n\n" + printf "\n\n\e[36m+++++ Phase$PHASE_ID: $1 +++++\e[0m\n\n" } # print step message. @@ -28,7 +28,7 @@ print_step() { STAGE_ID=0 fi ((STAGE_ID++)) - printf "\033[34m----- Step($STAGE_ID): $1 -----\e[0m\n\n" + printf "\n\n\033[34m----- Step($STAGE_ID): $1 -----\e[0m\n\n" } # before job diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d96043..825c32f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,57 +1 @@ # Changelog - -## [1.3.0](https://github.com/WGrape/CIManager/compare/v1.2.0...v1.3.0) (2022-12-03) - - -### Features - -* CIManager支持github项目 ([0cb0644](https://github.com/WGrape/CIManager/commit/0cb064484f783d74009267039188cd7a5c9f335b)) -* 新增.gitlab-ci.yml样例文件 ([aa62bca](https://github.com/WGrape/CIManager/commit/aa62bca44d490790d9da3fdefed6fbc88342f495)) -* 新增接口自动化测试任务 ([e2e6df6](https://github.com/WGrape/CIManager/commit/e2e6df61791b7874f8cc6c9867758f94b1ce2bc0)) -* 新增重大功能对github的支持 ([14bd92a](https://github.com/WGrape/CIManager/commit/14bd92ac3e052d13a8355fd7ebcecf79f232d808)) - - -### Code Refactoring - -* gitlab模块内部代码重构优化 ([9e72278](https://github.com/WGrape/CIManager/commit/9e72278679d0f6ce34950e85f9ee431684dbc2bc)) -* 代码内部逻辑小幅度重构优化 ([63ae395](https://github.com/WGrape/CIManager/commit/63ae395b3925d6cb4fab574da60535198cd97e89)) - - -### Styling - -* 修改.github-ci.yml示例文件的位置 ([b3bea88](https://github.com/WGrape/CIManager/commit/b3bea8831b981a8c5a95c68b738f6685e8660e76)) - - -### Docs - -* make doc better ([10bd10b](https://github.com/WGrape/CIManager/commit/10bd10b04903f26e9eaf1c6f20bf29763820b86d)) -* 修改完善文档中对github的支持 ([51fc814](https://github.com/WGrape/CIManager/commit/51fc8145dc38bd6ff8d302eaca1a1172ca7dd60e)) -* 修改完善文档中对github的支持 ([1f4f59f](https://github.com/WGrape/CIManager/commit/1f4f59f17fa153dc2ecb5d5e0120f8fbbdeba1c3)) - -## [1.2.0](https://github.com/WGrape/CIManager/compare/v1.1.1...v1.2.0) (2022-10-15) - - -### Features - -* 官网新增评论反馈区 ([36ead74](https://github.com/WGrape/CIManager/commit/36ead74bb36349fb1adf9ca540819528d5d4ee37)) - - -### Code Refactoring - -* make the start.sh and pre_check.sh more simple ([92a8f76](https://github.com/WGrape/CIManager/commit/92a8f76ee6bc49f7ef24d39eacc235e79444842b)) - - -### Docs - -* make doc better ([0f94cfa](https://github.com/WGrape/CIManager/commit/0f94cfa973dcd9ee6365baf5e207a7de4afded29)) - -## [1.1.1](https://github.com/WGrape/CIManager/compare/v1.1.0...v1.1.1) (2022-09-19) - - -### Docs - -* 完善文档 ([d2073b8](https://github.com/WGrape/CIManager/commit/d2073b845753a17bbc02fdccf6f765fd53a91201)) -* 添加CODE_OF_CONDUCT ([8d2fa7a](https://github.com/WGrape/CIManager/commit/8d2fa7ab473de2be9a3370446f7ff01048f8b383)) -* 添加徽章 ([8bdadee](https://github.com/WGrape/CIManager/commit/8bdadee50931a0024b79f6a7a155464ff6fa9a88)) -* 添加贡献榜 ([57bfbc2](https://github.com/WGrape/CIManager/commit/57bfbc2936edc8ebe58967213b597d316c604ffa)) -* 调整CODE_OF_CONDUCT位置 ([04da6f6](https://github.com/WGrape/CIManager/commit/04da6f64b09c6018ce81a83a3270759e2d56b319)) diff --git a/README.md b/README.md index f7a6b4f..06e4801 100644 --- a/README.md +++ b/README.md @@ -17,78 +17,42 @@

-- [一、介绍](#1) -- [二、快速上手](#2) --      [1、为您的项目添加x-ci.yml文件](#21) --      [2、正常提交您的项目](#22) --      [3、CIManager开始工作](#23) -- [三、CI/CD配置](#3) -- [四、私有化部署](#4) --      [1、下载项目](#41) --      [2、部署至私有仓库](#42) --      [3、自定义扩展](#43) --      [4、多语言支持](#44) -- [五、帮助文档](#5) -- [六、贡献榜](#6) - -## 一、介绍 +## 一、介绍 在微服务下,每一个项目仓库都需要维护独立的```CI/CD```,一旦```CI/CD```有设计升级或变更,所有仓库都需要配合做联动性调整,维护成本极高。 为了解决这个问题,曾经提出过一种方案,详细请见文章 [《多项目下CI管理方案的设计与实现》](https://github.com/WGrape/Blog/issues/249) 。 本项目是基于文章中的```远程管理```方案设计而实现的一个用于高效管理多个项目通用CI的轻量级开源框架,它不但完全开箱即用,而且方便定制化开发与扩展。 -## 二、快速上手 +## 二、快速上手 -> 1、在```CIManager```的早期版本中仅支持```gitlab```项目,但在 [v1.3.0](https://github.com/WGrape/CIManager/releases/tag/v1.3.0) 版本后新增了对```github```项目的支持。 -> -> 2、为了方便您快速应用,可以参考 [apimock-example](https://jihulab.com/WGrape/apimock-example/) 和 [matching](https://github.com/WGrape/matching) 项目是如何在```gitlab```和```github```中使用```CIManager```进行```CI/CD```管理的 +> 您可以参考 [apimock-example](https://jihulab.com/WGrape/apimock-example/) 和 [matching](https://github.com/WGrape/matching) 项目是如何在```gitlab```和```github```中使用的 -### 1、为您的项目添加x-ci.yml文件 +### 1、为您的项目添加ci.yml文件 -> 如果您使用的github项目,需要创建```.github/workflows/.github-ci.yml```配置文件。如果您使用的gitlab项目,需要创建```.gitlab-ci.yml```配置文件。 - -首先,和单项目下的CI管理方式一样,在您的各个项目下添加一个```.gitlab-ci.yml```或```.github/workflows/.github-ci.yml```配置文件,它的内容如下所示 +首先,和单项目下的CI管理方式一样,在您的各个项目下添加一个```.gitlab-ci.yml```或```.github/workflows/.github-ci.yml```配置文件。在```/template```目录下有定义好配置文件,您可以直接使用。 ```yaml -image: golang:1.17 - -before_script: - - echo '====== CIManager Start Running =========' - -after_script: - - echo '====== CIManager Stopped Successfully =========' - -stages: - - CIManager - -CIManager: - stage: CIManager - script: - # 注意如果是github项目, 则需要使用 bash start.sh github - - git clone https://github.com/wgrape/CIManager.git ; cp -an ./CIManager/. ./ ; rm -rf ./CIManager ; bash start.sh gitlab +cp {CIManager_path}/template/.gitlab-ci.yml {your_project}/.gitlab-ci.yml ``` -### 2、正常提交您的项目 +### 2、正常提交您的项目 添加完之后,如往常一样,正常编写并提交您的项目即可 -### 3、CIManager开始工作 +### 3、CIManager开始工作 当您每次提交项目的时候,在runner机器上都会运行CIManager,它的底层[运行原理](https://github.com/WGrape/Blog/issues/249)如下图所示,详细运行过程可以 [查看这里](https://jihulab.com/WGrape/apimock-example/-/jobs/4354428) - - -## 三、CI/CD配置 -基于低耦合、易扩展、高效率的思想,CIManager框架内部集成了非常丰富的Stage,通过不同Stage的组合构成了一个完整的集成和发布流程。 - -image + -那么是如何实现的呢?在 [apimock-example](https://jihulab.com/WGrape/apimock-example/-/blob/main/.gitlab-ci.yml) 项目例子中,会发现定义了大量的```variables```变量,正是这些变量被应用于不同的Stage,才实现了强大丰富的```CI/CD```功能。 +## 三、更多文档 -默认情况下,即使不配置任何变量,也可以正常使用部分功能。如果您想要了解更多```CI/CD```的配置,请查看[使用教程](./doc/Usage.md#1) +- [1. 使用文档](./doc/USAGE.md) +- [2. 设计文档](./doc/DESIGN.md) +- [3. 常见问题](./doc/QA.md) -## 四、私有化部署 +## 四、私有化部署 -### 1、下载项目 +### 1、下载项目 无需任务复杂安装过程,直接通过Git方式clone到本地即可。 @@ -96,23 +60,17 @@ CIManager: git clone https://github.com/WGrape/CIManager.git ``` -### 2、部署至私有仓库 +### 2、部署至私有仓库 如果您不需要对```CIManager```框架进行扩展开发,那么直接把它提交至您的私有仓库,并在您各个项目中的```.gitlab-ci.yml```或```.github/workflows/.github-ci.yml```配置文件中的```https://github.com/WGrape/CIManager.git```替换为CIManager在您私有仓库中的地址即可。 -### 3、自定义扩展 -本框架源码轻量简单,如果不满足您的需求,您可以在```CIManager```框架基础上进行自定义扩展的开发。 +### 3、自定义开发 +本框架源码轻量简单,如果不满足您的需求,您可以在```CIManager```框架基础上进行自定义开发,比如新增配置检查、依赖检查等丰富和加强```CI/CD```的流水线功能。具体请参考[设计原理文档](./doc/DESIGN.md) -当然也可以新增配置检查、依赖检查等加强```CI/CD```的阶段(Stage)操作,直接修改源码即可。具体请参考[设计原理文档](./doc/design.md) +## 五、贡献 -### 4、多语言支持 -虽然本项目以```golang```语言为例,但是您只需要简单修改源码,即可实现任何语言多项目的CI/CD统一管理。 - -## 五、问题与解答 -如果在您使用过程中遇到问题,可以查看[使用教程](./doc/Usage.md#1),或在```ISSUE```中提问。 - -## 六、贡献与使用榜 - - +欢迎大家的参与,如果在您使用过程中遇到任何问题,可以随时在 [ISSUE](https://github.com/WGrape/CIManager/issues) 中提问,也欢迎大家的 [PR](https://github.com/WGrape/CIManager/pulls) 对本项目优化。 - [WGrape/matching](https://github.com/WGrape/matching) :基于CIManager实现在github上对CI/CD的统一管理 - [apimock-example](https://jihulab.com/WGrape/apimock-example/) :基于CIManager实现在gitlab上对CI/CD的统一管理 + + diff --git a/doc/QA.md b/doc/QA.md new file mode 100644 index 0000000..77ca339 --- /dev/null +++ b/doc/QA.md @@ -0,0 +1,22 @@ +

常见问题

+ +## 1、如何安装golangci-lint +官方提供了如下的安装方式 + +```bash +curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.46.2 +``` + +由于官方安装可能会有网络限制,所以在CIManager中使用了基于 [第三方缓存](https://github.com/WGrape/cache) 的安装 + +## 2、CURL: command not found问题 +在Ubuntu系统下,使用```apt-get```安装```curl```即可。特别需要注意的是。如果没有特殊兼容处理是无法使用```CURL```这种大写拼写命令的,需要使用小写的```curl```命令 + +```bash +mv /etc/apt/sources.list /etc/apt/sources.list.bak \ + && echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib' > /etc/apt/sources.list \ + && echo 'deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \ + && echo 'deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >> /etc/apt/sources.list \ + && apt-get update -y +apt-get install curl -y +``` diff --git a/doc/USAGE.md b/doc/USAGE.md index a6a5763..f65760c 100644 --- a/doc/USAGE.md +++ b/doc/USAGE.md @@ -1,8 +1,6 @@ -# 官方文档 +

使用文档

-> 文档版本若存在不更新问题,请大家即时在 Issues 中反馈 - -## 一、CI/CD配置 +## 一、变量配置 > 关于变量配置可以参考项目 [apimock-example](https://jihulab.com/WGrape/apimock-example) @@ -19,78 +17,78 @@ | 变量名 | 必须 | 含义 | 备注 | |--------------|-----|-------|-----| | PROJECT_NAME | 否 | 项目名称 | 无 | -| PROJECT_ID | 否 | 项目的ID | 无 | -### 3、阶段变量 -下面是在不同阶段(Stage)所支持的变量 +### 3、Job变量 +下面是在不同Job中所支持的变量 + +#### (1) CI_STAGE_PRE + +##### ① 预检查 + +| 变量名 | 必须 | 含义 | 备注 | +|----------------------------------|-----|---------|-----| +| CI_STAGE_BUILD_JOB_PRE_CHECK_CMD | 否 | 预先检查的命令 | 无 | + +##### ② 预安装 -#### (1) 单元测试 +| 变量名 | 必须 | 含义 | 备注 | +|------------------------------------|-----|---------|-----| +| CI_STAGE_BUILD_JOB_PRE_INSTALL_CMD | 否 | 预先安装的命令 | 无 | -| 变量名 | 必须 | 含义 | 备注 | -|--------------|-----|-----------|-----| -| UNIT_TEST_TRIGGER_CMD | 否 | 触发单元测试的命令 | 无 | +#### (2) CI_STAGE_TEST -#### (2) 接口文档生成 +##### ① 代码检查 -| 变量名 | 必须 | 含义 | 备注 | -|--------------|-----|--------------------|-----| -| APIDOC_TRIGGER_CMD | 否 | 触发生成接口文档的命令 | 无 | -| APIDOC_FILE | 否 | 生成的接口文档路径 | 无 | -| GITLAB_HOST | 否 | gitlab私有化部署的域名 | 无 | -| GITLAB_API_TOKEN | 否 | gitlab配置的API Token | 无 | +| 变量名 | 必须 | 含义 | 备注 | +|-----------------------------------|-----|---------|-----| +| CI_STAGE_BUILD_JOB_CHECK_CODE_CMD | 否 | 代码检查的命令 | 无 | -#### (3) 本地构建 +##### ② 单元测试 -| 变量名 | 必须 | 含义 | 备注 | -|--------------|-----|---------|-----| -| LOCAL_BUILD_TRIGGER_CMD | 是 | 构建项目的命令 | 无 | +| 变量名 | 必须 | 含义 | 备注 | +|----------------------------------|-----|---------|-----| +| CI_STAGE_BUILD_JOB_UNIT_TEST_CMD | 否 | 单元测试的命令 | 无 | -#### (4) 健康检查 +#### (3) CI_STAGE_BUILD -| 变量名 | 必须 | 含义 | 备注 | -|--------------|-----|----------------|-----| -| HEALTH_CHECK_TRIGGER_CMD | 是 | 健康检查和检测成功运行的命令 | 无 | -| HEALTH_CHECK_SUCCESS | 是 | 健康检查成功的返回内容 | 无 | +#### ① 接口文档生成 -### 4、其他变量 -下面是所支持的其它变量 +| 变量名 | 必须 | 含义 | 备注 | +|-----------------------------------|-----|--------------------|-----| +| CI_STAGE_BUILD_JOB_APIDOC_GEN_CMD | 否 | 生成接口文档时的命令 | 无 | -| 变量名 | 必须 | 含义 | 备注 | -|--------------|-----|---------------------|-----| -| DING_KEYWORD | 否 | 钉钉群通知关键字 | 无 | -| DING_ACCESS_TOKEN | 否 | 钉钉群通知的WebHook Token | 无 | -| DING_NOTICE_SWITCH | 否 | 是否开启钉钉群通知 | 无 | +#### ② 本地构建 +| 变量名 | 必须 | 含义 | 备注 | +|------------------------------------|----|----------|-----| +| CI_STAGE_BUILD_JOB_LOCAL_BUILD_CMD | 时 | 项目构建时的命令 | 无 | +#### (4) CD_STAGE_DEPLOY -## 二、常见问题 +##### ① SSH部署 -### 1、如何安装golangci-lint -官方提供了如下的安装方式 +| 变量名 | 必须 | 含义 | 备注 | +|------------------------------|----|-------------|-----| +| CD_STAGE_MONITOR_JOB_SSH_CMD | 否 | 执行SSH部署时的命令 | 无 | -```bash -curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.46.2 -``` +##### ② 拉取制品部署 -由于官方安装可能会有网络限制,所以在CIManager中使用了基于 [第三方缓存](https://github.com/WGrape/cache) 的安装 +| 变量名 | 必须 | 含义 | 备注 | +|----------------------------------------|----|--------------|-----| +| CD_STAGE_MONITOR_JOB_PULL_ARTIFACT_CMD | 否 | 使用拉取镜像部署时的命令 | 无 | -### 2、CURL: command not found问题 -在Ubuntu系统下,使用```apt-get```安装```curl```即可。特别需要注意的是。如果没有特殊兼容处理是无法使用```CURL```这种大写拼写命令的,需要使用小写的```curl```命令 +#### (5) CD_STAGE_MONITOR -```bash -mv /etc/apt/sources.list /etc/apt/sources.list.bak \ - && echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib' > /etc/apt/sources.list \ - && echo 'deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \ - && echo 'deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >> /etc/apt/sources.list \ - && apt-get update -y -apt-get install curl -y -``` +##### ① 接口测试检查 -## 三、如何参与 -欢迎大家的参与,更欢迎大家的项目PR,请先提交至testing分支,经过review并且在 [apimock-example](https://jihulab.com/WGrape/apimock-example/-/pipelines) 项目的 Pipeline 成功运行后,即可合入。 +| 变量名 | 必须 | 含义 | 备注 | +|---------------------------------------|----|--------------|-----| +| CD_STAGE_MONITOR_JOB_API_TEST_CMD | 否 | 执行接口测试的命令 | 无 | +| CD_STAGE_MONITOR_JOB_API_TEST_CMD_RES | 否 | 接口请求成功时的返回内容 | 无 | -## 四、附录参考文档 -下面提供了一些可供您使用的参考文档 +##### ② 健康检查 -- [Gitlab Wiki API](https://docs.gitlab.cn/jh/api/wikis.html) -- [极狐WikiAPI](https://docs.gitlab.cn/jh/api/wikis.html) \ No newline at end of file +| 变量名 | 必须 | 含义 | 备注 | +|-------------------------------------------|----|--------------|-----| +| CD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD | 否 | 执行健康检查的命令 | 无 | +| CD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD_RES | 否 | 健康检查成功时的返回内容 | 无 | diff --git a/doc/design.md b/doc/design.md index 6c92492..b027928 100644 --- a/doc/design.md +++ b/doc/design.md @@ -1,61 +1,10 @@ -

设计原理文档

+

设计文档

-## 一、设计架构 +> 文档版本若存在不更新问题,请大家即时在 Issues 中反馈 -### 1、 +## 一、架构概览 +整个架构是基于变量驱动的CI/CD组成式的流水线设计,CI/CD由多个Stage组成,每个Stage内部又有多个不同的job组成。 +整个项目都是基于变量配置的,也就是说我们只需要按要求配置好需要的变量,即可正常驱动起job的运行,进而控制整个CI/CD流水线。 - -## 一、项目规范 - -### 1、变量的检查 - -> 规则 :假设B变量依赖A变量,如果定义了A变量,却没有定义B变量,那么变量的检查就需要检查出来这个问题 - -变量的检查可以提前检查出配置的错误,方便即时纠正和快速定位,它主要定义在```pre_check.sh```脚本中,如下代码所示。 - -```bash -if [ "${DING_NOTICE_SWITCH}" == "on" ]; then - if [ "${DING_ACCESS_TOKEN}" == "" ]; then - FAILURE_REASON="Failed to run pre_check.sh: the variables DING_ACCESS_TOKEN empty" - send_failure_notice - exit 1 - fi -fi -``` - -简单说如果不定义某些变量,会导致系统出错的话,那么这个检查的代码就需要写在这里。当然```pre_check.sh```脚本并不只做变量检查的事情,还有可能包含系统环境检查等操作。 - -### 2、不同任务的启动 - -我们把代码检查、单元测试、编译构建等每一个操作定义为在CI/CD中的任务。这些任务的启动,都在```start.sh```脚本中启动,启动条件是用户在配置中手动配置了任务开关为```on```状态,如下代码所示。 - -``` -if [ "${CHECK_CODE_SWITCH}" == "on" ]; then - bash ./.gitlab/check_code.sh - if [ $? -ne 0 ]; then - echo " - CIManager Running Result: check_code.sh failed" - exit 1 - fi -else - echo "apidoc_gen.sh is skipped due to the switch is off" -fi -``` - -### 3、在任务中检查变量 - -由于可能有单独运行任务的需求,所以为了脚本可以正常执行不出错,即使在```[1,2]```中已经检查了变量,那么在任务脚本中时,仍然要写检查变量是否存在的代码,如下代码所示。 - -```bash -if [ "${API_TEST_CMD}" != "" ]; then - eval $API_TEST_CMD - if [ $? -ne 0 ]; then - FAILURE_REASON="run API Test failed" - send_failure_notice - exit 1 - else - echo "run API Test success" - fi -fi -``` +image diff --git a/index.html b/index.html index dd73457..2c61045 100644 --- a/index.html +++ b/index.html @@ -445,9 +445,8 @@ @@ -470,26 +469,11 @@

快速上手

为了方便您快速应用,可以参考 apimock-example 项目是如何使用CIManager

-

1、为您的项目添加.gitlab-ci.yml文件

+

1、为您的项目添加ci.yml文件

-

首先,和单项目下的CI管理方式一样,在您的各个项目下添加一个.gitlab-ci.yml配置文件,它的内容如下所示

+

首先,和单项目下的CI管理方式一样,在您的各个项目下添加一个```.gitlab-ci.yml```或```.github/workflows/.github-ci.yml```配置文件。在```/template```目录下有定义好配置文件,您可以直接使用。

-
-image: golang:1.17
-
-before_script:
-  - echo '====== CIManager Start Running ========='
-
-after_script:
-  - echo '====== CIManager Stopped Successfully ========='
-
-stages:
-  - CIManager
-
-CIManager:
-  stage: CIManager
-  script:
-    - git clone https://github.com/wgrape/CIManager.git ; cp -an ./CIManager/. ./ ; rm -rf ./CIManager ; bash start.sh
+
cp {CIManager_path}/template/.gitlab-ci.yml {your_project}/.gitlab-ci.yml

2、正常提交您的项目

@@ -499,7 +483,7 @@

3、CIManager开始工作

当您每次提交项目的时候,在runner机器上都会运行CIManager,它的底层运行原理如下图所示,详细运行过程可以查看这里

-

+

@@ -508,16 +492,10 @@

3、CIManager开始工作

-

CI/CD配置

+

使用文档

-

基于低耦合、易扩展、高效率的思想,CIManager框架内部集成了非常丰富的Stage,通过不同Stage的组合构成了一个完整的集成和发布流程。

- - image - -

那么是如何实现的呢?在apimock-example项目例子中,会发现定义了大量的variables变量,正是这些变量被应用于不同的Stage,才实现了强大丰富的CI/CD功能。

- -

默认情况下,即使不配置任何变量,也可以正常使用部分功能。如果您想要了解更多CI/CD配置,请查看文档

+

一、变量配置

1、系统变量

下面是所支持的系统级别的变量

@@ -539,6 +517,7 @@

1、系统变量

+

2、项目变量

下面是所支持的项目级别的变量

@@ -557,17 +536,12 @@

2、项目变量

- - - - - -
项目名称
PROJECT_ID项目的ID
-

3、阶段变量

-

下面是在不同阶段(Stage)所支持的变量

-

(1) 单元测试

+

3、JOB变量

+

下面是在不同Job中所支持的变量

+ +

(1) CI_STAGE_PRE

@@ -579,14 +553,21 @@

(1) 单元测试

- + + + + + + + - +
UNIT_TEST_TRIGGER_CMDCI_STAGE_BUILD_JOB_PRE_CHECK_CMD预检查的命令
CI_STAGE_BUILD_JOB_PRE_INSTALL_CMD 触发单元测试的命令预安装的命令
-

(2) 接口文档生成

+ +

(2) CI_STAGE_TEST

@@ -598,32 +579,21 @@

(2) 接口文档生成

- + - + - + - - - - - - - - - - - - - +
APIDOC_TRIGGER_CMDCI_STAGE_BUILD_JOB_CHECK_CODE_CMD 触发生成接口文档的命令代码检查的命令
APIDOC_FILECI_STAGE_BUILD_JOB_UNIT_TEST_CMD 生成的接口文档路径
GITLAB_HOSTgitlab私有化部署的域名
GITLAB_API_TOKENgitlab配置的API Token单元测试的命令
-

(3) 本地构建

+ +

(3) CI_STAGE_BUILD

@@ -635,14 +605,21 @@

(3) 本地构建

- + + + + + + + - +
LOCAL_BUILD_TRIGGER_CMDCI_STAGE_BUILD_JOB_APIDOC_GEN_CMD生成接口文档时的命令
CI_STAGE_BUILD_JOB_LOCAL_BUILD_CMD 构建项目的命令项目构建时的命令
-

(4) 健康检查

+ +

(4) CD_STAGE_DEPLOY

@@ -654,21 +631,21 @@

(4) 健康检查

- - - + + + - - - + + +
HEALTH_CHECK_TRIGGER_CMD健康检查和检测成功运行的命令CD_STAGE_MONITOR_JOB_SSH_CMD执行SSH部署时的命令
HEALTH_CHECK_SUCCESS健康检查成功的返回内容CD_STAGE_MONITOR_JOB_PULL_ARTIFACT_CMD使用拉取镜像部署时的命令
-

4、其他变量

-

下面是所支持的其它变量

+ +

(5) CD_STAGE_MONITOR

@@ -680,21 +657,27 @@

4、其他变量

- + + + + + + + - + - + - + - + - + @@ -715,39 +698,11 @@

1、下载项目

git clone https://github.com/WGrape/CIManager.git
-

2、部署至私有gitlab

-

如果您不需要对CIManager框架进行扩展开发,那么直接把它提交至您的私有仓库,并在您各个项目中的 .gitlab-ci.yml 配置文件中的 https://github.com/WGrape/CIManager.git 替换为CIManager在您私有仓库中的地址即可。

+

2、部署至私有仓库

+

如果您不需要对CIManager框架进行扩展开发,那么直接把它提交至您的私有仓库,并在您各个项目中的 .gitlab-ci.yml.github/workflows/.github-ci.yml 配置文件中的 https://github.com/WGrape/CIManager.git 替换为CIManager在您私有仓库中的地址即可。

-

3、扩展开发

-

本框架是基于 gitlab golang 开发的框架,如果您项目中使用的是其他git仓库或语言,那么可以在CIManager框架基础上进行扩展开发。您当然也可以新增配置检查、依赖检查等加强CI/CD的阶段(Stage)操作,直接修改源码即可。具体请参考设计原理文档

- - -
- -
- -
-

帮助文档

- -
-

1、如何安装golangci-lint

-

官方提供了如下的安装方式

-
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.46.2
-

由于官方安装可能会有网络限制,所以在CIManager中使用了基于 第三方缓存 的安装

-

2、CURL: command not found问题

-

在Ubuntu系统下,使用apt-get安装curl即可。特别需要注意的是。如果没有特殊兼容处理是无法使用CURL这种大写拼写命令的,需要使用小写的curl命令

-
mv /etc/apt/sources.list /etc/apt/sources.list.bak \
-    && echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib' > /etc/apt/sources.list \
-    && echo 'deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib' >> /etc/apt/sources.list \
-    && echo 'deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >> /etc/apt/sources.list \
-    && apt-get update -y
-apt-get install curl -y
-

3、附录参考文档

-

下面提供了一些可供您使用的参考文档

- +

3、自定义开发

+

本框架源码轻量简单,如果不满足您的需求,您可以在CIManager框架基础上进行自定义开发,比如新增配置检查、依赖检查等丰富和加强CI/CD的流水线功能。具体请参考设计原理文档

DING_KEYWORDCD_STAGE_MONITOR_JOB_API_TEST_CMD执行接口测试的命令
CD_STAGE_MONITOR_JOB_API_TEST_CMD_RES 钉钉群通知关键字接口请求成功时的返回内容
DING_ACCESS_TOKENCD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD 钉钉群通知的WebHook Token执行健康检查的命令
DING_NOTICE_SWITCHCD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD_RES 是否开启钉钉群通知健康检查成功时的返回内容