Git 自动预接收挂钩 运行 单元测试被推送到当前 ref
Git pre-receive hook automatically run unit tests being pushed in the current ref
我的流程有问题,我设置了一个 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
文件夹,但我不确定这是否是自动化 运行 进行单元测试的正确方法推动之前。
pre-receive
hook 被调用...就在之前 开始更新远程存储库上的引用。
所以您的文件不会反映您推送的内容。
您应该推送到中间 "gate" 存储库,其中 post-receveive
挂钩将:
- 运行 测试
- 如果通过则推送到实际的目标存储库
- 发回电子邮件并在失败时重置目标分支
我的流程有问题,我设置了一个 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
文件夹,但我不确定这是否是自动化 运行 进行单元测试的正确方法推动之前。
pre-receive
hook 被调用...就在之前 开始更新远程存储库上的引用。
所以您的文件不会反映您推送的内容。
您应该推送到中间 "gate" 存储库,其中 post-receveive
挂钩将:
- 运行 测试
- 如果通过则推送到实际的目标存储库
- 发回电子邮件并在失败时重置目标分支