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的组合构成了一个完整的集成和发布流程。 - - + -那么是如何实现的呢?在 [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 @@ +-为了方便您快速应用,可以参考 apimock-example 项目是如何使用
CIManager
的
首先,和单项目下的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
当您每次提交项目的时候,在runner机器上都会运行CIManager,它的底层运行原理如下图所示,详细运行过程可以查看这里
- + @@ -508,16 +492,10 @@基于低耦合、易扩展、高效率的思想,CIManager框架内部集成了非常丰富的Stage,通过不同Stage的组合构成了一个完整的集成和发布流程。
- - - -那么是如何实现的呢?在apimock-example项目例子中,会发现定义了大量的variables变量,正是这些变量被应用于不同的Stage,才实现了强大丰富的CI/CD功能。
- -默认情况下,即使不配置任何变量,也可以正常使用部分功能。如果您想要了解更多CI/CD配置,请查看文档
+下面是所支持的系统级别的变量
@@ -539,6 +517,7 @@下面是所支持的项目级别的变量
项目名称 | 无 | -||
PROJECT_ID | -否 | -项目的ID | -无 | -
下面是在不同阶段(Stage)所支持的变量
-下面是在不同Job中所支持的变量
+ +UNIT_TEST_TRIGGER_CMD | +CI_STAGE_BUILD_JOB_PRE_CHECK_CMD | +否 | +预检查的命令 | +无 | +
CI_STAGE_BUILD_JOB_PRE_INSTALL_CMD | 否 | -触发单元测试的命令 | +预安装的命令 | 无 |
APIDOC_TRIGGER_CMD | +CI_STAGE_BUILD_JOB_CHECK_CODE_CMD | 否 | -触发生成接口文档的命令 | +代码检查的命令 | 无 |
APIDOC_FILE | +CI_STAGE_BUILD_JOB_UNIT_TEST_CMD | 否 | -生成的接口文档路径 | -无 | -|
GITLAB_HOST | -否 | -gitlab私有化部署的域名 | -无 | -||
GITLAB_API_TOKEN | -否 | -gitlab配置的API Token | +单元测试的命令 | 无 |
LOCAL_BUILD_TRIGGER_CMD | +CI_STAGE_BUILD_JOB_APIDOC_GEN_CMD | +否 | +生成接口文档时的命令 | +无 | +
CI_STAGE_BUILD_JOB_LOCAL_BUILD_CMD | 是 | -构建项目的命令 | +项目构建时的命令 | 无 |
HEALTH_CHECK_TRIGGER_CMD | -是 | -健康检查和检测成功运行的命令 | +CD_STAGE_MONITOR_JOB_SSH_CMD | +否 | +执行SSH部署时的命令 | 无 |
HEALTH_CHECK_SUCCESS | -是 | -健康检查成功的返回内容 | +CD_STAGE_MONITOR_JOB_PULL_ARTIFACT_CMD | +否 | +使用拉取镜像部署时的命令 | 无 |
下面是所支持的其它变量
+ +DING_KEYWORD | +CD_STAGE_MONITOR_JOB_API_TEST_CMD | +否 | +执行接口测试的命令 | +无 | +|
CD_STAGE_MONITOR_JOB_API_TEST_CMD_RES | 否 | -钉钉群通知关键字 | +接口请求成功时的返回内容 | 无 | |
DING_ACCESS_TOKEN | +CD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD | 否 | -钉钉群通知的WebHook Token | +执行健康检查的命令 | 无 |
DING_NOTICE_SWITCH | +CD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD_RES | 否 | -是否开启钉钉群通知 | +健康检查成功时的返回内容 | 无 |