Skip to content

Commit

Permalink
refactor: refactor the design
Browse files Browse the repository at this point in the history
  • Loading branch information
WGrape committed Mar 3, 2024
1 parent 8402a98 commit c6bcf92
Show file tree
Hide file tree
Showing 9 changed files with 173 additions and 344 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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: |
Expand Down
2 changes: 1 addition & 1 deletion .pipeline/cd/stage_monitor/job_health_check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions .pipeline/internal/helper.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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
Expand Down
56 changes: 0 additions & 56 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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))
86 changes: 22 additions & 64 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,102 +17,60 @@
<img src="https://img.shields.io/badge/License-MIT-green.svg">
</p>

- [一、介绍](#1)
- [二、快速上手](#2)
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[1、为您的项目添加x-ci.yml文件](#21)
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[2、正常提交您的项目](#22)
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[3、CIManager开始工作](#23)
- [三、CI/CD配置](#3)
- [四、私有化部署](#4)
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[1、下载项目](#41)
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[2、部署至私有仓库](#42)
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[3、自定义扩展](#43)
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[4、多语言支持](#44)
- [五、帮助文档](#5)
- [六、贡献榜](#6)

## <span id="1">一、介绍</span>
## 一、介绍
在微服务下,每一个项目仓库都需要维护独立的```CI/CD```,一旦```CI/CD```有设计升级或变更,所有仓库都需要配合做联动性调整,维护成本极高。

为了解决这个问题,曾经提出过一种方案,详细请见文章 [《多项目下CI管理方案的设计与实现》](https://github.com/WGrape/Blog/issues/249)

本项目是基于文章中的```远程管理```方案设计而实现的一个用于高效管理多个项目通用CI的轻量级开源框架,它不但完全开箱即用,而且方便定制化开发与扩展。

## <span id="2">二、快速上手</span>
## 二、快速上手

> 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```中使用的
### <span id="21">1、为您的项目添加x-ci.yml文件</span>
### 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
```

### <span id="22">2、正常提交您的项目</span>
### 2、正常提交您的项目
添加完之后,如往常一样,正常编写并提交您的项目即可

### <span id="23">3、CIManager开始工作</span>
### 3、CIManager开始工作
当您每次提交项目的时候,在runner机器上都会运行CIManager,它的底层[运行原理](https://github.com/WGrape/Blog/issues/249)如下图所示,详细运行过程可以 [查看这里](https://jihulab.com/WGrape/apimock-example/-/jobs/4354428)

<img src="https://user-images.githubusercontent.com/35942268/184865495-ca6b8491-6f23-4db6-80c8-9853f677dacb.png" height="600px">
## <span id="3">三、CI/CD配置</span>
基于低耦合、易扩展、高效率的思想,CIManager框架内部集成了非常丰富的Stage,通过不同Stage的组合构成了一个完整的集成和发布流程。
<img width="491" alt="image" src="https://user-images.githubusercontent.com/35942268/188272087-7e502181-4c4e-4342-8124-7dae22ddbfd9.png">
<img src="https://user-images.githubusercontent.com/35942268/184865495-ca6b8491-6f23-4db6-80c8-9853f677dacb.png" height="400">

那么是如何实现的呢?在 [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)

## <span id="4">四、私有化部署</span>
## 四、私有化部署

### <span id="41">1、下载项目</span>
### 1、下载项目

无需任务复杂安装过程,直接通过Git方式clone到本地即可。

```bash
git clone https://github.com/WGrape/CIManager.git
```

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

### <span id="43">3、自定义扩展</span>
本框架源码轻量简单,如果不满足您的需求,您可以在```CIManager```框架基础上进行自定义扩展的开发。
### 3、自定义开发
本框架源码轻量简单,如果不满足您的需求,您可以在```CIManager```框架基础上进行自定义开发,比如新增配置检查、依赖检查等丰富和加强```CI/CD```的流水线功能。具体请参考[设计原理文档](./doc/DESIGN.md)

当然也可以新增配置检查、依赖检查等加强```CI/CD```的阶段(Stage)操作,直接修改源码即可。具体请参考[设计原理文档](./doc/design.md)
## 五、贡献

### <span id="44">4、多语言支持</span>
虽然本项目以```golang```语言为例,但是您只需要简单修改源码,即可实现任何语言多项目的CI/CD统一管理。

## <span id="5">五、问题与解答</span>
如果在您使用过程中遇到问题,可以查看[使用教程](./doc/Usage.md#1),或在```ISSUE```中提问。

## <span id="6">六、贡献与使用榜</span>

<img src="https://contrib.rocks/image?repo=wgrape/cimanager" >
欢迎大家的参与,如果在您使用过程中遇到任何问题,可以随时在 [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的统一管理

<img src="https://contrib.rocks/image?repo=wgrape/cimanager" >
22 changes: 22 additions & 0 deletions doc/QA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<div align="center"><h1>常见问题</h1></div>

## 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
```
112 changes: 55 additions & 57 deletions doc/USAGE.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# 官方文档
<div align="center"><h1>使用文档</h1></div>

> 文档版本若存在不更新问题,请大家即时在 Issues 中反馈
## <span id="1">一、CI/CD配置</span>
## 一、变量配置

> 关于变量配置可以参考项目 [apimock-example](https://jihulab.com/WGrape/apimock-example)
Expand All @@ -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)
| 变量名 | 必须 | 含义 | 备注 |
|-------------------------------------------|----|--------------|-----|
| CD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD || 执行健康检查的命令 ||
| CD_STAGE_MONITOR_JOB_HEALTH_CHECK_CMD_RES || 健康检查成功时的返回内容 ||
Loading

0 comments on commit c6bcf92

Please sign in to comment.