我正在尝试在主 git 存储库中创建 git hook on update。我想防止破坏任何测试的推送。如何获取将在更新后运行测试的项目的裸存储库代码?
PS:当然可以使用预提交挂钩而不是更新,在这种情况下挂钩应该在提交者PC上,但我相信这应该是在服务器上进行验证的一种方式。
使用这种方法:禁止开发人员推送到主仓库。相反,强迫人们推动构建回购。将 CI 服务器指向该构建存储库。如果构建成功,让构建服务器推送到主仓库。
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 语句)。