只有当所有测试都通过时,Git主存储库更新,怎么办?

时间:2012-08-08 15:02:17

标签: git tdd githooks git-bare

我正在尝试在主git存储库中的更新上创建git hook。我想阻止破坏任何测试的推动。如何获取将在更新后运行测试的项目的裸存储库代码?

P.S。:当然可以使用预提交钩子而不是更新,在这种情况下钩子应该在commiters PC上,但我相信这应该是在服务器上进行验证的一种方式。

2 个答案:

答案 0 :(得分:4)

使用此方法:禁止开发人员推送到主仓库。相反,迫使人们推动建立回购。将CI服务器指向该构建存储库。如果构建成功,请将构建服务器推送到主仓库。

答案 1 :(得分:3)

CI服务器可以为您完成,但是一个简单的脚本也可以做到这一点。 David Gageot在他的博客上推出了一个非常简单的私人建筑解决方案(他的想法是在推送远程服务器之前使用辅助本地存储库进行测试):

http://blog.javabien.net/tag/git/page/2/

不幸的是,它是用法语编写的,但您仍然可以查看用于执行此操作的脚本:

#!/bin/bash
if [ 0 -eq `git remote -v | grep -c push` ]; then
    REMOTE_REPO=`git remote -v | sed 's/origin//'`
else
    REMOTE_REPO=`git remote -v | grep "(push)" | sed 's/origin//' | sed 's/(push)//'`
fi

if [ ! -z "$1" ]; then
    git add .
    git commit -a -m "$1"
fi

git pull

if [ ! -d ".privatebuild" ]; then
    git clone . .privatebuild
fi

cd .privatebuild
git clean -df
git pull

if [ -e "pom.xml" ]; then
    mvn clean install

    if [ $? -eq 0 ]; then
        echo "Publishing to: $REMOTE_REPO"
        git push $REMOTE_REPO master
    else
        echo "Unable to build"
        exit $?
    fi
fi

非Java用户的编辑

在上面的脚本中,用命令行替换mvn clean install,允许您构建项目(并删除测试maven pom.xml文件存在的if语句)。