暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

项目开发规范

codefan 2021-08-04
395

1.项目目录规范  mk_pyproject工具创建 统一项目目录

├── README.md 项目文档 项目做什么的?大致的设计及设计图
├── bin       shell脚本
├── config    项目配置文件(json结尾)
├── docs/images  项目里一些doc文件 便于其他人查看
├── log       日志目录
├── logstreaming
│   ├── __init__.py
│   ├── 模块A
│   │   └── __init__.py
│   ├── 模块B
│   │   └── __init__.py
│   └── 模块C
│       └── __init__.py
├── main.py   入口main函数
├── requirements.txt 依赖包-版本号

├── test 测试脚本

2.配置中心

  • 2.1 考虑程序共用配置文件 prod.json/dev.json/test.json 放到服务器公有目录

  • 2.2 配置文件统一格式使用json配置文件,便于统一维护管理。

  • 2.3 禁止代码里出现密码/token明文,以免代码误提交到github或者gitlab泄露,配置文件里使用环境变量

dev.json
{
  "mysql":{
    "host":"$DEV_MYSQL_HOST",
    "user":"$DEV_MYSQL_USER",
    "password":"$DEV_MYSQL_PASSWORD"
  }
}

test.json
{
  "mysql":{
    "host":"$TEST_MYSQL_HOST",
    "user":"$TEST_MYSQL_USER",
    "password":"$TEST_MYSQL_PASSWORD"
  }
}

prod.json
{
  "mysql":{
    "host":"$PROD_MYSQL_HOST",
    "user":"$PROD_MYSQL_USER",
    "password":"$PROD_MYSQL_PASSWORD"
  }
}


3.程序设计

3.1 问题

  • 3.1.1 目前许多项目各自带一套配置文件,历史原因不便于维护

  • 3.1.2 重复代码封装成包,数据库中间件的使用 已开发出一套公用模块,新老项目改造问题普及率不高,可review代码 可用的话后续各个中间件使用统一模块 这样即使有bug,基础模块升级一下即可,避免出现昨天消费mq-eval函数的出bug改许多地方,消息中间件序列化/反序列化 应是同一个包的2个方法

  • 设计常用工具开发,提高开发效率 避免重复逻辑开发。比如自动生成shell工具,目前ds调度配置的是shell,当发版的时候是否可以配置到jenkins里面 调用python3 bin/gen_shell.py 自动生成本项目的启动脚本

3.2 灵活性

  • 3.2.1 支持命令行传参  考虑我们有时候会一套代码同一台机器运行在不同环境 最好支持命令行传入 便于拓展

    --config_path  配置文件路径 比如配置中心的 data/config

    --env 运行环境 dev/test/pre/prod

    --is_used_env 是否使用环境变量

    公用基础模块对json配置文件解析已封装了解析类,可以很方便的使用

4.任务管理 Q3

  • 4.1 全局任务表,目前开发任务分散 没有全局的任务管理概念  离线任务/api服务/常驻消费进程

  • 4.2 程序日志 建议使用统一log目录  格式启动时间、运行时间、运行时长、运行状态 便于日志收集

  • 4.3 全任务每天固定时间扫描 任务表状态(可由日志文件正则匹配到) 服务类查看进程是否存在

  • 4.4 代码扫描 特别是封禁的账号的扫描是否还在占用(邮箱通知bug,收件人邮箱已删除 代码未更新 造成脚本运行失败)

5.开发规范

  • 5.1 管理工具:统一使用git管理

  • 5.2 程序error报警机制。因任务健康度检查并非是每时每刻都执行 最好是程序有错误自动报警

  • 5.3 log日志。按任务名_日期或者日期_任务名生成日志 便于查找定位 避免一直往同一log文件写,文件太大,查找定位很慢

  • 5.4文档。需求文档 README.md 工欲善其事,必先利其器。文档,设计方案决定着代码设计

  • 5.5 代码分支。master/test/dev/feature 分支

    目前我们dev和test是共用一套环境,这几个分支 逻辑上便于区分
    1. 首先dev分支本地开发调试通过,切换到test分支 合并代码 git merge dev
    2. review code
    3.测试环境部署
      3.1 与后端交互的测试同学通过后合并代码到master;未通过或者有bug dev分支修复后发布到test
      3.2 与后端无交互,自测通过合并代码到master;未通过或者有bug dev分支修复后发布到test
    4.切换到master git merge test

  • 5.6 部署 统一走jenkins 统一部署到服务器 data/www/

    测试 git项目名_test 作为项目名 拉取git test分支 部署到测试机器
    生产 git项目名 作为项目名 拉取git master分支 部署到生产机器


  • 5.7 bug修复

    5.7.1 bug不可避免,出现bug时需评估影响,快速定位到问题,记录到bug汇总日志,以后避免类似的情况再出现
    5.7.2 之前有bug时 创建feature_日期_bug分支合并到test后无问题可删除该分支

6.任务开发进度

  • 6.1 任务有截止时间点 需求不明确的待定

  • 6.2 周一计划本周内的排期 完成不了的周会向大家说明,还是要有时间观念+目标驱动


文章转载自codefan,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论