【问题标题】:Git main repository update only if all tests pass, how to do?仅当所有测试都通过时才更新 Git 主存储库,怎么办?
【发布时间】:2012-08-05 17:38:06
【问题描述】:

我正在尝试在主 git 存储库中创建 git hook on update。我想防止破坏任何测试的推送。如何获取更新后的项目的裸存储库代码以对其运行测试?

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

【问题讨论】:

    标签: git tdd githooks git-bare


    【解决方案1】:

    CI 服务器可以为您做这件事,但一个简单的脚本也可以做到这一点。 David Gageot 不久前在他的博客上介绍了一个非常简单的使用 git 进行私有构建的解决方案(这个想法是在推送到远程服务器之前先在辅助本地 repo 上构建测试):

    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 语句)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2013-12-05
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        • 2012-01-28
        • 1970-01-01
        • 2013-08-11
        • 1970-01-01
        相关资源
        最近更新 更多