zoukankan      html  css  js  c++  java
  • Git服务器,仓库的hook监控

    简单应用场景:代码提交到git仓库,仓库监控到变化的jar包,然后把变化的jar包推到私服maven仓库。

    Git预定义了触发时机:

    ClientSide hooks:

    1 pre-commit,当执行commit动作时先执行此hook,可以用此hook做一些检查,比如代码风格检查,或者先跑测试。

    2 prepare-commit-msg, 当commit时需要输入message前会触发此hook,可以用此hook来定制自己的default message信息。

    3 commit-msg,当用户输入commit的message后被触发,可以用此hook校验message的信息,比如是否符合规定,有没有cr等。

    4 post-commit, 当commit完成后被触发,可以用此hook发送notification等。

    5 pre-rebase, rebase之前会被触发,可以用此hook来拒绝所有的已经push的commits进行rebase操作。

    6 post-merge, 当merge成功后,会触发此hook。

    7 pre-push, 当push时,remote refs被更新,但是在所有的objects传输前被触发。

    8 pre-auto-gc, 当git gc --auto执行前被触发。在垃圾回收之前做一些验证或备份是挺不错的。

    ServerSide hooks:

    1 pre-receive, 当收到push动作之前会被执行。

    2 update, 也是收到push动作之前被执行,但是有可能被执行多次,每个branch一次。

    3 post-receive, 当push动作已经完成的时候会被触发,可以用此hook来push notification等,比如发邮件,通知持续构建服务器等。

    简单解决方案(git仓库使用的是裸仓库):由于裸仓库不保存实际文件,只保存变化过程。所以在检测到仓库有变化是,需要先把变化git pull到服务器的另外一个单独的目录,这样才能获取到实际存在仓库的代码或者文件,之后再deloy到私服。在钩子脚本post-receive阶段使用read oldValue newValue refName 获取到变化之前的commitId1 和变化后的commitId2,然后执行git diff commitId1 commitId2 --name-only 得到变化的文件,然后使用mvn deloy 把变化的文件推到仓库。

    注意点

    1. 在 post-receive阶段调用git pull报错 提示 fatal: Not a git repository: '.' 。需要在最前面加上unset $(git rev-parse --local-env-vars)
    2. 在 post-receive脚本中无法调用mvn自己设定的环境变量问题,可以使用软连接,把自己设置的环境变量软链到以下提示的目录,比如/usr/local/bin
  • 相关阅读:
    java如何将char类型的数字转换成int型的数字,而不是Ascii
    java 二分查找的注意事项
    IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
    java中Math的常用方法整理
    判断字符串是否可由重复子字符串组成
    P3558 [POI2013]BAJ-Bytecomputer
    BZOJ 3329. Xorequ
    Codeforces 1221F. Choose a Square
    Codeforces 1221E. Game With String
    Codeforces 1221D. Make The Fence Great Again
  • 原文地址:https://www.cnblogs.com/hts-technology/p/9931787.html
Copyright © 2011-2022 走看看