강력한 테스트 제품군이 있는 프로젝트에서 작업할 때 리포지토리에 푸시하는 모든 작업이 프로젝트의 테스트에 영향을 미치지 않도록 해야 합니다.
즉, git push를 미리 만들기 전에 phpunit을 실행하고 모든 테스트를 통과했는지 확인해야 합니다. 이 튜토리얼에서는 git 리포지토리에 규칙을 추가하여 테스트가 통과되지 않으면 리포지토리에 새 코드를 넣을 수 없도록 하고 이를 위해 git 후크를 사용합니다.
Git Hooks
Git 후크를 사용하면 git 프로세스의 여러 단계에서 이벤트를 실행할 수 있습니다. 이러한 이벤트에서 명령이 실패할 경우 프로세스를 종료할 명령을 실행할 수 있습니다.
이것들은 사용할 수 있는 git 훅입니다.
- applypatch-msg
- commit-msg
- post-update
- pre-applypatch
- pre-commit
- pre-commit
- prepare-commit-msg
- pre-push
- pre-rebase
- pre-receive
- update
이러한 각 항목은 git 프로세스에서 서로 다른 시간에 트리거됩니다. 모든 git 후크를 보려면 프로젝트의 루트로 이동하여 ls .git/hooks/를 입력합니다. 이 경우 사용 가능한 git 후크 목록이 표시됩니다.
phpunit 테스트를 실행하기 위해 리포지토리로 이동하기 전에 실행되는 pre-push 훅을 사용할 것입니다.
Pre-push
.git/hooks/pre-push에 새 파일을 추가하고 파일을 열고 다음을 추가합니다.
#!/bin/bash
git diff --cached --name-only | while read FILE; do
if [[ "$FILE" =~ ^.+(php|inc|module|install|test)$ ]]; then
echo "Running tests..."
cd "${0%/*}/.."
phpunit 1> /dev/null
if [ $? -ne 0 ]; then
echo -e "\e[1;31m\tUnit tests failed ! Aborting commit.\e[0m" >&2
exit 1;
fi
fi
done || exit $?
git diff --cached --name-only | while read FILE; do
커밋에서 변경된 모든 파일을 반환합니다.
if [[ "$FILE" =~ ^.+(php|inc|module|install|test)$ ]]; then
그러면 위의 패턴에서만 일치하도록 하여 php 또는 테스트 파일이 변경되었음을 알 수 있으므로 테스트를 실행해야 합니다.
cd "${0%/*}/.."
프로젝트 루트가 cd에 표시됩니다.
phpunit 1> /dev/null
if [ $? -ne 0 ]; then
echo -e "\e[1;31m\tUnit tests failed ! Aborting commit.\e[0m" >&2
exit 1;
fi
그런 다음 phpunit 명령을 실행하고 명령이 0이 아니면 유닛 테스트가 실패하여 커밋을 중단합니다.
'SW > Git' 카테고리의 다른 글
Git : Git Remote URL 변경 방법, 예제, 명령어 (0) | 2022.04.05 |
---|---|
Git : .gitignore : 파일과 디렉토리 무시 방법, 예제, 명령어 (0) | 2022.03.30 |
Git : Push를 사용하여 코드 배포 방법 : 예제, 구현 (0) | 2020.07.12 |
Git : Docker 이미지를 푸시하는 Github 작업 : 예제, 방법 (0) | 2020.07.11 |
git : Git Repository의 URL을 변경하기 : 명령어, 예제 (0) | 2020.07.10 |