# orderlines **Repository Path**: Y-aong/orderlines ## Basic Information - **Project Name**: orderlines - **Description**: 工作流框架 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 3 - **Created**: 2023-10-02 - **Last Updated**: 2025-05-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
使用python开发的一套devops系统。
- **Web UI:**指的是相配套的前端页面,通过接口查看、创建、控制流程。用http接口控制流程。
- **Web Server服务器:**可以接受http请求,用于提供用户界面的操作窗口,主要负责操作,查看流程等。
- **Schedule定时器:**负责定时任务,周期任务,间隔任务,将流程交给Executor执行。
- **Executor执行器:**主要负责流程的运行,以及异常的处理。把每个流程中的任务解析运行。
- **worker:**负责具体的流程运行,目前默认使用celery作为执行者。
- **database数据库:**存储流程信息,流程实例,任务信息,任务实例等相关数据。
### 三、功能介绍
#### **3.1、工作流的主要功能**
- **工作流的基本功能**
- 流程串行,基本功能
- 定时任务,定时执行,间隔执行,周期执行
- 流程版本,一个流程可以对应多个版本
- **变量解析**
- 任务返回值,返回值进行四则运算和变量拼接。(返回值使用`mongodb`或者`redis`进行存储——开发中)
- 运行时增加运行参数变量, 参数变量可以在流程中使用
- **任务网关**
- 流程控制, 根据任务运行状态和上个节点的返回值运行
- 任务组,多个任务合成一个任务
- 流程并行(可选择使用协程io密集型和进程cpu密集型)
- **自定义插件**
- 支持自定义插件安装,方便业务功能扩展
- **任务处理**
- 任务超时,给定超时时间(开发中)
- 异常处理策略,重试,忽略,抛错
- 任务回调,特定任务状态(成功,失败,超时,忽略,重试)可以指定回调函数
- 任务停止,支持有无状态任务和有状态任务的停止
- **使用方式**
- 支持http接口操作
- 命令行模式,详情查看`orderlines --help`
- 增加`grpc`方式操作
- **权限控制**
- `rbac`权限,支持角色和群组两种模式
- **流程配置**
- 前端配置界面
- 支持`yaml`文件,`json`文件创建
- **部署方式**
- docker-compose一键式部署
#### **3.2、整体系统的主要功能**
因为系统主要针对于`devops`流程,所以很多功能也是全面拥抱`devops`全流程的开发。当然由于整个`devops`全流程涉及的知识点特别广泛,所以我也是有所重点的开发。很多功能还是todo状态。
- 运维中心——可以**把它看为流水线**,每个流程就是一个流水线,也是整个系统中最为重要的一部分。这里分为两个部分第一是使用自己的工作流;第二是通过拖拉拽的方式生成`jenkins`流水线。中间可以集成很多的相关业务功能、比如**http请求、ansible、编译、部署**等相关功能。
- 代码中心——这里是和`gitlab`进行联动的。
- 监控中心——主要是调用**Prometheus**的相关接口对于系统进行监控。
- 制品中心——现在是todo状态,目前已经有思路了,后期会和制品仓`JFrog`进行联动。
- 日志中心——目前只有`api`接口日志,后期想和ELK进行结合。
- 插件管理——主要针对的就是**业务功能**的相关任务。
- 权限管理——是系统的相关**权限管理**功能。
- 系统管理——主要针对**系统相关配置**参数。
### 四、页面介绍
#### 1、首页
首页主要展示的是系统最主要功能**流程运行情况**,**告警信息**的大概展示。
#### 2、数据大屏
数据大屏是一些重要信息的摘要。
#### 3、配置流程
流程配置是整个系统最重要的部分。整个页面主要分为左侧任务菜单、顶部工具按钮、右侧任务、变量、流程配置区、中间流程图配置区、底部日志展示区。
- **左侧任务菜单:**这里主要是业务任务菜单,展示的内容都是**标准库和自定义插件中定义的任务**。
- **顶部工具按钮:**这个是信息展示区**流程名称、版本、命名空间**和主要功能操作包括:**保存、编辑、启动、重启、停止、暂停、继续、调试**。
- **右侧任务、变量、流程配置区:**这里主要展示**任务的参数返回值和运行配置**、**变量的配置**、**流程的配置**以及**setup、teardown**。
- **中间流程图配置区:**主要是流程的配置。
- **底部日志展示区:**配置时不显示、在**运行和debug时展示**,是相关日志的展示。
**流程配置**
**debug模式**
**运行完成**
**运行日志**
#### 4、运维中心
这里是整个系统中最重要的一部分。其中主要包括**流程、任务、变量、定时任务、jenkins**。其中流程分为两个部分
- **普通流程:**也就是我们自定义的任务组成的流程
- **jenkins流水线:**通过我们在jenkins中配置的jenkins流水线在这里配置完成后,会生成一个新的流水线,同样可以使用参数和返回值。
**流程、任务、变量**这三个页面都是**相互联系**的。流程需要任务和变量,变量和任务组成了流程。
**定时任务**是针对于**流程**所设置的**定时启动、分为指定时间、间隔时间、Crontab表达式**。
`jenkins`页面是通过数据采集获取`jenkins流水线`,可以在这个页面进行**统一管理**,和启动、停止操作。
**定时任务**
#### 5、代码中心
代码中心主要和`gitlab`集成,通过数据采集对于**`github`数据进行分析**。主要的分析点分为**仓库管理**、**分支管理**、**提交管理**后期还可以集成issue展示、和部门和成员信息进行联动,通过这些页面可以**直观查看成员、部门、项目的代码提交频率、提交质量(issue数量)、评审情况**。这个页面是非常有创造性的,可以展示很多项目问题
#### 6、监控中心
监控中心是和Prometheus进行集成,这个页面是**非常非常重要**的。通过Prometheus可以监控我们服务的运行质量,对于每个节点进行监控分析,及时预警,及时反馈。这个页面我的设计主要分为**监控实例、告警通知、告警规则、以及告警审计**四大部分。
- **监控实例:**主要对于线上节点进行监控,通过Prometheus加定时任务的数据采集展示当前节点的基本状态。
- **告警通知:**这里可以通过配置选择不同的通知方式,一旦发生问题,及时有效的通知相关人员。
- **告警规则:**告警规则是告警的灵魂,规则的设置不好可能会发生告警轰炸,或者无法捕获到正确的告警。
- **告警审计:**告警发生之后我们要怎么办,肯定要及时复盘,这个主要是一个统计,复盘的功能。
**监控页面**
#### 7、制品中心
制品中心现在是未完成的状态,未来会和jfrog集成。制品是CI的终点是CD的起点。一个制品中间会包含多少提交、它的生命周期、生命地图(包含多少功能、多少提交、什么人的提交)在这里应该有体现。还有制品的生命周期,何时过期,以及后面部署的情况。
制品中心做为软件开发三大可信源之一,它的重要性可谓是不言而喻。但是由于个人时间有限,所以未开发完成。
#### 8、日志中心
日志中心目前只包含当前系统的api日志,**未来计划和ELK进行集成**,展示流程日志和其他相关日志,方便查询相关流程信息。
#### 9、插件管理
插件管理这里主要展示的是相关**流程业务功能**,包括**自定义插件的注册功能**。
#### 10、权限管理
老生常谈的权限管理,目前前端权限管理未完成。因为是个不难但是费时费力的功能,后端已完成。
#### 11、系统管理
系统管理主要是**系统参数和主机清单**的配置。系统参数包括流程中的一些默认参数配置,主机清单是因为流程中集成了**ansible**功能所以需要主机清单。
### 五、系统测试
#### 1、测试覆盖率71%
#### 2、单元测试数量323
### 六、流程状态介绍
#### 1、任务状态图
#### 2、流程状态图
#### 3、状态定义
```python
import enum
class ProcessStatus(enum.Enum):
green = 'SUCCESS' # 流程成功
red = 'FAILURE' # 流程失败
yellow = 'STOP' # 流程停止
grey = 'PENDING' # 流程排队中
blue = "RUNNING" # 流程运行中
class StatusEnum(enum.Enum):
grey = 'PENDING' # 任务排队中
blue = 'RUNNING' # 任务运行中
red = 'FAILURE' # 任务失败
green = 'SUCCESS' # 任务成功
pink = 'SKIP' # 跳过任务
yellow = 'STOP' # 任务停止
orange = 'RETRY' # 任务重试中
```
### 七、启动方式
#### 1、docker启动, 直接部署
```shell
bash deploy.sh
```
#### 2、命令行启动
```shell
# 先进行打包
pip install --editable .
# 查看命令行帮助
orderlines --help
Commands:
build-process-by-json build process by json file.
build-process-by-yaml build process by yaml file.
create-super-user create a super administrator.
create-user create a super administrator.
paused-process pause process by process instance id.
recover-process recover process by process instance id.
run-grpc run grpc server.
runserver run orderlines server, default port 15900.
schedule start schedule plan.
start-process start process by process instance id.
stop-process stop process by process instance id.
# 启动命令
orderlines run-server # 启动flask服务
orderlines schedule # 启动定时器
orderlines run-grpc # 启动grpc
celery -A celery_worker.celery worker --loglevel=info --pool=solo # 启动celery
```
#### 3、本地启动
```shell
pip install --editable .
# 启动celery work
cd src
celery -A celery_worker.celery worker --loglevel=info --pool=solo
# 启动celery beat
celery -A celery_worker.celery beat -l info -s celery_logs
# 启动flask
python app.py # 启动flask
```