V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xiqingongzi
V2EX  ›  分享创造

GitHook - 项目部署工具

  •  
  •   xiqingongzi ·
    bestony · 2016-12-28 10:53:48 +08:00 · 3116 次点击
    这是一个创建于 2915 天前的主题,其中的信息可能已经有所发展或是发生改变。

    缘起: 我自己是一个 PHP 开发者,使用 Laravel 开发,在开发时,我希望能够更加便捷的部署项目。

    我搜了很多教程,包括Laravel EnvoyWebHook 部署的教程,还有很多教程包括安正超的教程,希望能够让我快速部署我的 Laravel 应用。

    但是,在我使用时,我遇见了一个很大的问题:

    教程虽然是好的,但是使用起来总是不太方便。

    Envoy 我觉得污染了项目目录, WebHook 部署起来教程复杂,而且权限、用户搞的非常麻烦。

    所以我希望能够有一个东西,可以帮助我自己来快速部署项目

    但是找了一下,发现没有合适的轮子,便决定自己造一个轮子:

    GitHook - 项目部署工具

    GitHook 是一个快速帮助程序部署的工具。提供了基于 Github\Coding 的 Webhooks 自动部署,配置简单易懂

    特性

    • 自定义 Token
    • 自定义端口
    • 自定义命令

    使用教程

    1. 下载 GitHook 的二进制文件到你的服务器上
    2. 执行 chmod a+x githook 为 GitHook 添加权限
    3. 执行 ./githook new 生成一个新的配置文件
    4. 修改config.json为你自己需要的,配置项说明可以参见下方
    5. 登录 Github/Coding,在项目设置中的新增一个 GitHook , token 是配置文件设置的, url 是你的服务器 IP:端口号,如http://192.179.11.32:3320/
    6. 提交 git commit ,GitHook 会自动执行你在config.json中设置的命令

    Todo

    1. 提供不同语言的不同种类的部署脚本,目前没有部署脚本的 template ,所以新手上手还是有一定难度。
    2. 实现 git@osc 的适配

    期望

    希望大家来给个 Star,然后多使用,多提意见和建议,也欢迎提交 PR.

    Wiki

    http://githook.io/

    项目地址

    https://github.com/bestony/githook

    中文说明

    https://github.com/bestony/githook/blob/master/readme_zh.md

    25 条回复    2016-12-30 10:51:20 +08:00
    erbajie
        1
    erbajie  
       2016-12-28 12:16:56 +08:00
    可以的~
    SoloCompany
        2
    SoloCompany  
       2016-12-28 12:19:09 +08:00
    > 登录 Github/Coding,在项目设置中的新增一个 GitHook
    这应该是 webhook 吧

    > 提交 git commit ,GitHook 会自动执行你在 config.json 中设置的命令
    你是否混淆了 commit hook 和 push hook / push request (merge request) hook 的概念?
    xjoker
        3
    xjoker  
       2016-12-28 13:33:29 +08:00
    WOW 这个想法很早就有了~ 已 Star
    xiqingongzi
        4
    xiqingongzi  
    OP
       2016-12-28 14:53:42 +08:00 via Android
    @SoloCompany 应该是 WebHook ,我改下😂
    目前这个版本其实是安正超大神教程的 golang 版,并没有去校验具体的参数值。因为我目前也不是非常顺手写 golang 。不过你这个需求我加到 todolist 中,通过判断请求信息来拉指定的 commit
    xiqingongzi
        5
    xiqingongzi  
    OP
       2016-12-28 14:53:51 +08:00 via Android
    @xjoker 谢谢!
    SoloCompany
        6
    SoloCompany  
       2016-12-28 14:57:41 +08:00
    @xiqingongzi 不是这个意思啊,不知道是不是我理解不对, commit hook 是 local 的啊并不能分发,协作层面的 hook 只能是针对 push 或 merge request 这类操作吧,而且一般都无法 pre hook 只能是 tigger ;当然 trigger 也可以做到比如自动 reject merge request 之类的
    xiqingongzi
        7
    xiqingongzi  
    OP
       2016-12-28 15:08:27 +08:00
    @SoloCompany 你写的那么多...我有些看不懂...英语有点烂。但是我最初的想法就是因为开发时有些时候在本地调试完成后,我想要上传到云端去查看效果,但是我不想用 FTP 上传所有文件,再到 SSH 里去 composer update ,所以造出了这个工具,我在本地 commit 后上传到云端,然后云端发送 webhook ,给一个程序,然后这个程序自动帮我拉取代码,然后执行某些操作,我只需稍等就可以去查看效果,从而造的一个轮子,你说的那个就比较全面了,涉及到很多的操作,对于我一个人来说,实现可能会难度比较大。比如自动的 reject ,那个我觉得倒不如用 PHP 这样的程序写 Web 来进行控制。

    ![截图-1612280522.png]( https://ooo.0o0.ooo/2016/12/28/586364867b211.png)
    SoloCompany
        8
    SoloCompany  
       2016-12-28 15:15:49 +08:00
    @xiqingongzi 看来我第一个回复没说错,这个贴图不是已经很清楚了吗,是 push / merge (push) request 的 hook 而不是针对 commit 的 hook, 概念不同的
    xiqingongzi
        9
    xiqingongzi  
    OP
       2016-12-28 15:21:16 +08:00
    @SoloCompany 哦哦哦。。。。可能是我理解错了。。应该是 Push 和 PR 的 hook 还需要学习一下
    SoloCompany
        10
    SoloCompany  
       2016-12-28 15:25:50 +08:00
    @xiqingongzi 因为我最近也在找合适的 CI 工具,所以就多看了下,其实你的需求,直接用 CI 似乎比 WebHook 更合理呢
    huijiewei
        11
    huijiewei  
       2016-12-28 15:31:22 +08:00
    xiqingongzi
        12
    xiqingongzi  
    OP
       2016-12-28 15:32:24 +08:00
    @SoloCompany CI 的话我记得好像很多都是要该好多。按说这个应该是 CI 的活,不过我可以做个轻量版的 。各有各的好处。对于我这样的个人来说,小的工具或许会更好
    xiqingongzi
        13
    xiqingongzi  
    OP
       2016-12-28 15:33:45 +08:00
    @huijiewei 但是我对这个东西还是有点懵,比如 PHP 的权限,命令的权限,目录的权限,等等一堆事,略麻烦,所以做了 Golang,直接运行二进制,简单省事~
    huijiewei
        14
    huijiewei  
       2016-12-28 15:37:03 +08:00
    @xiqingongzi 权限第一次设定了就好了。 webhook 也是通过 http 触发运行的,统一用 www-data 的权限就好了
    Showfom
        15
    Showfom  
       2016-12-28 15:43:32 +08:00
    支持一下楼主
    xiqingongzi
        16
    xiqingongzi  
    OP
       2016-12-28 17:01:33 +08:00 via Android
    @huijiewei 我知道一次就好了,但是因为环境不同,有的设置也不同。各家还有不同的教程🙄,一键包也比较多,反正就是各种配不成,所以直接写了这个,省心。
    xiqingongzi
        17
    xiqingongzi  
    OP
       2016-12-28 17:07:56 +08:00 via Android
    @Showfom 😁谢谢
    firescorpio
        18
    firescorpio  
       2016-12-28 19:00:08 +08:00
    我都还没有测试!
    lance26
        19
    lance26  
       2016-12-29 12:02:40 +08:00
    @huijiewei 写过类似的,不是有只有读权限的 token 么,用那个比密码好点吧
    50vip
        20
    50vip  
       2016-12-29 14:05:55 +08:00   ❤️ 1
    我用 flask + react 也做了一个: https://github.com/NetEaseGame/git-webhook

    demo 地址: https://webhook.hust.cc/

    直接 pip install git-webhook 即可安装
    xiqingongzi
        21
    xiqingongzi  
    OP
       2016-12-29 14:31:23 +08:00
    @50vip 厉害了 。可视化要方便不少!杭州雷火?
    50vip
        22
    50vip  
       2016-12-29 14:42:29 +08:00
    @xiqingongzi 在线的~~~不是内部人?
    xiqingongzi
        23
    xiqingongzi  
    OP
       2016-12-29 14:46:24 +08:00
    @50vip 之前在杭研实习,现在滚回学校上课了
    50vip
        24
    50vip  
       2016-12-29 14:50:24 +08:00
    justudy
        25
    justudy  
       2016-12-30 10:51:20 +08:00
    @50vip coding 支持吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2587 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:36 · PVG 18:36 · LAX 02:36 · JFK 05:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.