아니요, 두 가지 이유가 아닙니다.
속도
커밋은 빨라야합니다. 예를 들어, 500ms가 걸리는 커밋은 너무 느리고 개발자가 더 적게 커밋하도록 권장합니다. Hello World보다 큰 프로젝트에서는 수십 또는 수백 가지의 테스트가 수행되므로 사전 커밋 중에 테스트를 실행하는 데 너무 많은 시간이 걸립니다.
물론 분산 아키텍처에서 몇 분 또는 한 대의 컴퓨터에서 몇 주 또는 몇 달 동안 수천 번의 테스트를 수행하는 대규모 프로젝트의 경우 상황이 악화됩니다.
최악의 부분은 더 빨리 만들기 위해 할 수있는 일이 많지 않다는 것입니다. 백 단위 테스트를 수행하는 소규모 Python 프로젝트는 평균 서버에서 실행하는 데 최소 1 초가 걸리지 만 훨씬 더 오래 걸립니다. C # 응용 프로그램의 경우 컴파일 시간으로 인해 평균 4-5 초입니다.
이 시점에서 더 나은 서버에 대해 $ 10 000를 추가로 지불하면 시간이 많이 걸리지 않지만 여러 서버에서 테스트를 실행하면 속도가 느려집니다.
둘 다 수천 개의 테스트 (기능, 시스템 및 통합 테스트)가있을 때 비용이 많이 들기 때문에 몇 주가 아닌 몇 분만에 테스트를 실행할 수 있지만 소규모 프로젝트에는 도움이되지 않습니다.
대신에 할 수있는 일은 :
커밋을 수행하기 전에 로컬에서 수정 한 코드와 관련된 테스트를 개발자가 실행하도록 권장하십시오. 수천 개의 단위 테스트를 실행할 수는 없지만 5-10 개를 실행할 수 있습니다.
관련 테스트를 찾아서 실행하는 것이 실제로 쉽고 빠릅니다. 예를 들어 Visual Studio는 마지막 실행 이후에 수행 된 변경으로 인해 영향을받을 수있는 테스트를 감지 할 수 있습니다. 다른 IDE / 플랫폼 / 언어 / 프레임 워크도 비슷한 기능을 할 수 있습니다.
커밋을 최대한 빨리 유지하십시오. 스타일 규칙을 적용하는 것이 좋습니다. 종종 유일한 방법이기 때문에 그러한 검사는 놀랍도록 빠르기 때문입니다. 정적 분석은 빠르게 진행 되 자마자 괜찮습니다. 단위 테스트 실행이 정상이 아닙니다.
Continuous Integration 서버에서 단위 테스트를 실행하십시오.
개발자가 빌드를 중단했을 때 (또는 단위 테스트가 실패했을 때 자동으로 알려야합니다. 이는 컴파일러를 코드에 도입 할 수있는 가능한 실수 중 일부를 검사하는 도구로 간주하는 경우와 거의 같습니다).
예를 들어, 마지막 빌드를 확인하기 위해 웹 페이지로 이동하는 것은 해결책이 아닙니다. 자동으로 알려야 합니다. 팝업 표시 또는 SMS 전송은 정보를받는 방법의 두 가지 예입니다.
개발자가 빌드를 중단 (또는 회귀 테스트 실패)하는 것이 좋지 않다는 것을 이해하고, 그것이 발생하자마자 가장 우선 순위는 문제를 해결하는 것입니다. 상사가 내일 배송을 요청한 우선 순위가 높은 기능을 수행하고 있는지 여부는 중요하지 않습니다. 빌드를 실패하면 수정해야합니다.
보안
리포지토리를 호스팅하는 서버는 특히 보안상의 이유로 단위 테스트와 같은 사용자 지정 코드를 실행해서는 안됩니다. 이러한 이유는 동일한 GitLab 서버의 CI 러너에서 이미 설명 되었습니까?
반면, 사전 커밋 후크에서 빌드 서버의 프로세스를 시작하려는 경우 커밋 속도가 훨씬 느려집니다.