셸 스크립트 표준 및 스타일 가이드
GitLab은 다양한 서비스 및 하위 프로젝트로 구성되어 있습니다. 그들의 백엔드 코드 대부분은 Ruby 및 Go로 작성되었습니다. 그러나 몇몇은 배포, 설치 등과 같은 루틴 시스템 관리 작업의 자동화를 위해 셸 스크립트를 사용합니다. 이는 역사적인 이유로든, Docker 이미지를 위해 의존성을 최소화하는 노력으로든 수행됩니다.
본 페이지는 우리의 다양한 경험을 기반으로 셸 스크립트 가이드라인을 정의하고 조직화하는 것을 목표로 합니다. GitLab 프로젝트 전반의 셸 스크립트는 최종적으로이 안내와 조화를 이룰 것으로 기대됩니다. 이 안내에서 벗어나는 경우 해당 프로젝트의 README.md
또는 PROCESS.md
파일에 설명해야 합니다.
셸 스크립트 사용을 피하십시오
위에서 말한 모든 것을 감안할 때 가능한 한 셸 스크립트 사용을 피하는 것을 권장합니다. Ruby나 Python(우리가 leverage하는 코드베이스와 일관성을 유지해야하는 경우)와 같은 언어가 거의 항상 더 나은 선택입니다. 고수준 해석형 언어는 더 읽기 쉬운 구문을 가지고 있으며 훨씬 더 성숙한 단위 테스트, 린팅 및 오류 보고 기능을 제공합니다.
특정 케이스에서 프로젝트의 의존성 크기나 다른 중요한 요구 사항에 강력한 제한이 있는 경우에만 셸 스크립트를 사용하십시오.
이 가이드의 범위
GitLab 설치 요구 사항에 따르면 이 안내서는 지원되는 Linux 배포판에서 사용되는 셸에 대해서만 다룹니다. 즉 다음과 같습니다:
셸 언어 선택
- 의존성 디렉터리을 줄이고 싶을 때 환경에서 제공하는 것을 사용하십시오. 예를 들어, 대부분의 도구 이미지에 대한 기본 이미지인
alpine
의sh
를 사용하십시오. - 다른 모든 곳에서 가능하다면
bash
를 사용하십시오.sh
보다 더 강력하지만 여전히 널리 사용되는 셸입니다.
코드 스타일 및 형식
이 섹션은 프로젝트에 셸 스크립트가 포함되어 있다면 필수적으로 프로젝트의 CI 파이프라인의 일부로 만들어져야 하는 도구를 설명합니다. 이러한 도구들은 셸 코드 형식 지정, 오류 또는 취약점 확인 등을 자동화합니다.
린팅
우리는 기본 구성에서 ShellCheck 유틸리티를 사용하여 셸 스크립트를 린트합니다.
셸 스크립트를 사용하는 모든 프로젝트는 다음 GitLab CI/CD 작업을 사용해야 합니다:
shell check:
image: koalaman/shellcheck-alpine:stable
stage: test
before_script:
- shellcheck --version
script:
- shellcheck scripts/**/*.sh # 셸 스크립트의 경로
-s
플래그를 사용하여 지정합니다: -s sh
또는 -s bash
.형식 지정
일관된 형식 지정을 유지하기 위해 shfmt 도구를 사용하는 것이 좋습니다.
따라서 프로젝트의 스크립트 파일에 다음 shfmt
호출을 적용해야 합니다:
shfmt -i 2 -ci -w scripts/**/*.sh
Linting GitLab CI/CD 작업 외에도 셸 스크립트가 있는 모든 프로젝트는 다음 작업을 사용해야 합니다:
shfmt:
image: mvdan/shfmt:v3.2.0-alpine
stage: test
before_script:
- shfmt -version
script:
- shfmt -i 2 -ci -d scripts # 셸 스크립트의 경로
-ln
플래그를 사용하여 셸 다이얼렉트를 지정하십시오:
-ln posix
또는 -ln bash
.테스트
셸 스크립트의 자동화된 테스트를 위한 다양한 도구 (BATS 등)를 평가하는 것은 지속적인 노력입니다.
코드 리뷰
코드 리뷰는 다음에 따라 수행되어야 합니다:
그러나 권장되는 조치는 상기 도구를 사용하고 보고된 위반 사항을 해결하는 것입니다. 이렇게 하면 코드 리뷰가 필요하지 않을 것입니다.