Skip to content

huoxuhuoxu/git-hooks

Repository files navigation

依赖

nodeJs Version 8.0.0
流程图

流程图

流程图说明

分为两个部分:
hooks部分,也就是这个项目
监听进程部分前往仓库

hooks部分负责存在push时执行脚本
    post-receive 
        1. 部署此项目自身(你得给这个项目建立个仓库)
        2. 通知各主机的监控进程有仓库存在新的提交
    update
        检查提交文件的语法规范,存在不符合的,提交失败

监控进程部分负责等待hooks部分通知 某项目/某分支 存在新的提交,拉取代码并重启项目
使用的环境变量

eslint Version 3.0.0
cnpm/npm Version 5.0.0
安装

1. 在git服务器上部署此项目, 并安装依赖
    e.g: npm install

2. 全局安装 eslint: 
    e.g: sudo npm install eslint -g

2. 新建仓库 
    e.g: git init --bare test.git

3. 进入test.git, 删除仓库内的hooks文件,将此项目下hooks文件与仓库建立 *软链接* 
    e.g: ln -s /xx/git-hooks/hooks /xx/xx/test.git

4. 修改hooks/post-receive文件40行,将其改成此项目在你主机上的路径

5. 建议将此项目部署在 git仓库 所在的同一用户下
配置

config.yaml
    ips:                有项目提交需要通知运行了监控进程的主机
    api_post_receive:   hooks - post-receive 触发时调用监控进程的接口
    api_is_running:     检查监控进程是否正常运作接口,用于自动化部署监控进程项目导致其重启后检查是否成功重启
    git_hooks_env:      git的hooks有独立的环境变量,需要把实际用到的环境变量在运行命令时导入进去

deploy.yaml
    run:                自动化部署此项目时需要额外运行的脚本, 最终以数组形式遍历执行

注: deploy.yaml 作用是 自动化部署系统 部署此项目时额外需要执行的配置, 
    如果你需要修改这个项目并且使其能够自动化部署, 那么需要给这个项目建立仓库
说明

hooks
    post-receive:   push成功后通知各主机更新项目
    update:         push时检测语法

post-receive说明:
    1. 提交的项目就是此项目,切换目录执行git pull
    2. 提交的项目是监控进程项目,通知所有主机更新,并且通知完成后等待5秒,检查监控进程是否成功重启
    3. 提交的项目为其他时, 通知所有主机有项目更新了,传递仓库名称,分支

updates说明:
    找出提交时的commit id与版本库<head>的commit id存在差异的文件,对这些文件进行语法检查,只有检查全部通过,push才会成功
    warning会显示出来但不会阻止提交, 只有error才会阻止提交

    目前只检查*.js文件: hooks/update 34行配置
测试

1. npm run test_service:    启动测试服务器
2. npm run test:            启动测试
后续待开发与改进的内容

  1. 执行hooks: update时, 检查差异文件的大小,过大的情况下不检查,防止卡死/检查速度过慢
  2. 目前只对master进行自动化部署, 之后增加其他分支的自动化部署
  3. 目前默认语法检查只有.js, 之后新增其他默认检查
  4. 由于现在是找出有差异的文件, 在进行遍历检查语法, 导致.eslintignore没有生效
  5. 目前需要部署项目的主机使用的监听进程是 Web-Server , 后续改为 RPC 形式

About

Node.js 实现Git分布式自动化部署系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published