我的流程有问题,我设置了一个pre-receive
钩子,以对分支master
和dev
进行单元测试,如下所示:
#!/bin/bash
while read oldrev newrev ref
do
if [[ ${ref} = refs/heads/master ]];
then
BRANCH=master
WORKING_DIR="/var/www/project/project_api"
elif [[ ${ref} = refs/heads/dev ]]
then
BRANCH=dev
WORKING_DIR="/var/www/project/project_api_dev"
else
echo "Ref $ref received. Will not run unit tests."
fi
done
if (test "$BRANCH" != ""); then
echo "Running Unit Tests..."
cd "$WORKING_DIR"
npm test
rc=$?
if [[ $rc != 0 ]] ; then
echo "Unit Tests FAILED"
echo "Push is REJECTED"
exit $rc
fi
echo "Unit Tests PASSED"
fi
exit 0
通过这种设置,如果其中一个单元测试(被推送)失败,我想拒绝推送。
问题是它运行已经检出到工作目录$WORKING_DIR
的测试,而不是运行在当前ref
中推送的测试。
我想到总是在运行npm测试之前检出tests
文件夹,但是我不确定这是否是在推送之前自动执行正在运行的单元测试的正确方法。
答案 0 :(得分:1)
pre-receive
hook被调用...就在之前开始更新远程存储库上的引用。
所以您的文件不会反映您所推送的内容。
您应该推送到一个中间的“ gate”存储库,其中有一个post-receveive
钩子:
答案 1 :(得分:-1)
您可以“前进”到 Subversion。