GitLab Runner 리뷰하기
GitLab v19.2이 문서는 GitLab Runner 프로젝트 리뷰어를 위한 규칙과 제안 사항을 담고 있습니다. GitLab Runner 프로젝트에는 많은 코드가 있습니다. 레거시 코드에 테스트를 추가하는 것은 어려운 작업이지만, 프로젝트에 추가되는 새 코드에는 충분한 테스트 커버리지가 있어야 합니다.
이 문서는 GitLab Runner 프로젝트 리뷰어를 위한 규칙과 제안 사항을 담고 있습니다.
테스트 커버리지 보고서 검토#
GitLab Runner 프로젝트에는 많은 코드가 있습니다. 안타깝게도 코드 커버리지는 포괄적이지 않습니다. 현재(2019년 초) 커버리지는 약 55% 수준입니다.
레거시 코드에 테스트를 추가하는 것은 어려운 작업이지만, 프로젝트에 추가되는 새 코드에는 충분한 테스트 커버리지가 있어야 합니다. 코드 리뷰어는 커버리지 보고서를 살펴보고 새 코드가 커버되는지 확인하는 것이 좋습니다.
새 코드에 대해 가능한 한 많은 테스트 커버리지를 목표로 해야 합니다. 특정 변경에 필요한 커버리지 수준을 정의하는 것은 리뷰어의 판단에 맡겨집니다. 때로는 100% 커버리지가 달성하기 간단할 수 있습니다. 때로는 20% 커버리지만 있는 코드를 추가하는 것이 현실적이고 가장 중요한 것들이 테스트되도록 보장합니다. 리뷰어 여러분 - 현명하게 선택하세요 :)
기술적인 세부 사항으로 돌아가서...
GitLab Runner CI/CD 파이프라인은 이 부분에서 도움을 주며, 일반(count) 및 경쟁(atomic) 모드에서 실행된 테스트에
대한 HTML 형식의 커버리지 보고서를 제공합니다.
파일 이름의 일부로 .race와 .regular를 포함하는 두 가지 유형의 보고서가 있습니다.
파일들은 커버리지 옵션과 함께 실행된 go test 명령의 추적 출력입니다. .race. 파일에는 -race 플래그로
시작된 테스트의 소스와 보고서가 포함되어 있으며, .regular. 파일은 이 옵션 없이 시작된 테스트의 소스와 보고서입니다.
세부 사항에 관심이 있는 분들을 위해, -race 테스트는 atomic 커버리지 모드를 사용하고, 표준 테스트는
count 커버리지 모드를 사용합니다.
우리의 경우, 살펴봐야 할 것은 coverage/coverprofile.regular.html 파일입니다. .race. 테스트는 경쟁 조건 상황에서
실패할 수 있으며(그래서 실행하는 것) 현재 지속적으로 실패하는 것들이 여러 개 있습니다. 이는 커버리지 프로파일이
완전하지 않을 수 있음을 의미합니다.
.regular. 테스트는 대신 코드 내부에서 테스트된 것의 전체 개요를 제공합니다.
머지 리퀘스트에 대한 코드 커버리지 보고서를 보려면:
-
머지 리퀘스트의 Overview 탭에서 파이프라인 결과 아래의 View exposed artifact를 클릭하여 섹션을 확장합니다.
-
Code Coverage를 클릭합니다.
-
아티팩트 브라우저를 사용하여
out/coverage/디렉토리로 이동합니다. 예를 들어,https://gitlab.com/gitlab-org/gitlab-runner/-/jobs/172824578/artifacts/browse/out/coverage/. 이 디렉토리에는 항상 여섯 개의 파일이 포함됩니다 -.race.파일 세 개와.regular.파일 세 개.변경 사항을 검토할 때는 주로
.regular.HTML 보고서(coverprofile.regular.html파일)를 살펴보는 데 관심이 있습니다. 보시다시피, 모든 파일은 외부 링크로 표시되므로 예시로https://gitlab.com/gitlab-org/gitlab-runner/-/jobs/172824578/artifacts/file/out/coverage/coverprofile.regular.html을 열면 보고서가 저장된https://gitlab-org.gitlab.io/-/gitlab-runner/-/jobs/172824578/artifacts/out/coverage/coverprofile.regular.html로 리다이렉션됩니다.
커버리지 데이터는 머지 리퀘스트 UI에서도 확인할 수 있어야 합니다.
머지 리퀘스트 제목 검토#
머지 리퀘스트 제목에서 CHANGELOG.md 항목을
생성하기 때문에, 제목이 유효하고 정보를 제공하는지 확인하는 것은 리뷰어와 메인테이너의 책임 중 일부입니다.
머지 리퀘스트를 머지하기 전에, 제목을 확인하고 CHANGELOG.md 파일에서 명확하지 않을 것 같으면 업데이트하세요.
더 많은 컨텍스트를 제공하는 머지 리퀘스트 설명, 토론 또는 diff 없이 변경 로그에는 이 한 줄만 있다는 점을 명심하세요.
예를 들어, https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/1812를 살펴보고 다음을 비교하세요:
yml to yaml- 원래 제목으로 스크립트로 변경 로그에 추가됨,Fix values.yaml filename in documentation- 변경 로그에서 업데이트한 내용.
yml to yaml이 GitLab Runner 관리자가 최신 버전으로 업데이트하기 전에 변경 로그를 검토할 때 무엇을 알려줄까요?
업데이트 위험, 구현된 동작 변경, 추가된 새 동작/기능을 보여주나요? 머지 리퀘스트와 제목을 검토할 때 이러한 질문을
염두에 두세요.
기여자들이 위의 정보를 인식하지 못할 수 있으며, 제목이 요구 사항과 일치하지 않을 수 있습니다. 기여자에게 이에 대해 교육하도록 노력하세요.
결국, 머지 리퀘스트가 머지되기 전에 제목을 확인하고 업데이트하는 것은 여러분의 책임입니다.
머지 리퀘스트 레이블 검토#
우리는 머지 리퀘스트에 할당된 레이블을 사용하여 변경 로그 항목을 다양한 그룹으로 분류하고 개별 항목의 일부 특별한 기능을 정의합니다.
변경 로그 생성을 위해 자체 Changelog generator를 사용합니다. 이 도구는 GitLab Runner 리포지터리에 커밋된 구성 파일을 사용합니다.
리뷰어가 Changelog generator에 대해 알아야 할 몇 가지 중요한 사항이 있습니다:
-
GitLab Changelog는
label_matchers가 정의된 순서대로 머지 리퀘스트 레이블을 분석합니다. 첫 번째로 일치하는 범위가 분석된 머지 리퀘스트에 사용됩니다.예를 들어, 두 개의 머지 리퀘스트가 있다고 가정합니다 - 첫 번째는
security와bug레이블을 포함하고, 두 번째는bug레이블만 포함하며 - 세 개의 매처가 이 순서로 정의되어 있습니다:[security, bug] -> [security] -> [bug]. 그러면 첫 번째 머지 리퀘스트는[security, bug]로 일치하는 범위에 추가되고(목록에서 첫 번째로 정의된 것) 두 번째 머지 리퀘스트는[bug]로 일치하는 범위에 추가됩니다(목록의 마지막 정의된 범위). -
authorship_labels에 정의된 레이블로 표시된 머지 리퀘스트는 변경 로그에 작성자 사용자 이름이 끝에 추가되어 포함됩니다. 이렇게 표시되려면 모든authorship_labels레이블이 머지 리퀘스트에 추가되어야 합니다. -
skip_changelog_labels에 정의된 레이블로 표시된 머지 리퀘스트는 변경 로그에서 건너뜁니다. 건너뛰려면 모든skip_changelog_labels레이블이 머지 리퀘스트에 추가되어야 합니다. -
정의된
label_matchers와 일치하지 않는 머지 리퀘스트는Other changes범위 버킷에 추가됩니다.
이 모든 것을 염두에 두고, 머지 리퀘스트를 머지할 때 다음 몇 가지 규칙을 따르세요:
-
GitLab Runner 또는 그 부분이 배포되는 방식과 관련된 모든 머지 리퀘스트에는
runner-distribution레이블을 붙여야 합니다. -
새 기능이든 버그 수정이든 보안과 관련된 모든 머지 리퀘스트에는
security레이블이 있어야 합니다.feature::addition이 아닌 모든 머지 리퀘스트는 보안 범위에 추가됩니다. -
모든 버그 수정 머지 리퀘스트에는
bug레이블이 있어야 합니다. -
문서 업데이트만이거나 명시적으로 버그 수정이 아닌 대부분의 머지 리퀘스트에서
feature::또는tooling::레이블 중 하나가 추가되어 있는지 확인하세요. 이는 변경 로그 항목을 적절히 정렬하는 데 도움이 됩니다. -
documentation레이블은 Technical Writing 리뷰가 완료될 때 자동으로 추가됩니다. 머지 리퀘스트가 문서만이 아닌 다른 것도 업데이트할 때도 마찬가지입니다. 머지 리퀘스트에documentation레이블만 있고 정의된label_matchers중 어떤 것과도 일치하는 다른 레이블이 없다면 - 머지 리퀘스트가 문서만 업데이트하는지 다시 확인하세요. 그렇지 않으면 추가되는 변경 유형과 일치하는 특정 레이블 중 하나를 사용하세요! -
동일한 릴리스 사이클 동안 머지된 변경 사항을 되돌릴 때는 원래 머지 리퀘스트와 되돌린 머지 리퀘스트 모두에
skip_changelog_labels에 정의된 레이블을 붙이세요. 이렇게 하면 릴리스 매니저가 릴리스를 준비할 때 해야 하는 수동 작업이 줄어듭니다. 두 이벤트가 동일한 버전에서 발생한 경우 변경 사항 추가와 변경 사항 되돌리기에 대한 항목을 추가해서는 안 됩니다.되돌린 머지 리퀘스트가 이미 릴리스된 버전의 GitLab Runner에 머지된 것을 되돌리는 경우에는, 올바른 범위 레이블을 붙이기만 하면 됩니다. 그 경우에는 변경 로그에서 되돌리기를 표시하고자 합니다.
-
특정 레이블을 사용해야 하는 시기에 대한 지침을 제공하는 Engineering metrics data classification 페이지를 잠시 읽어보세요.
요약#
리뷰어 여러분, 검을 갖게 되었습니다. 이제 용과 싸우러 가세요!