Shell 스크립트 표준 및 스타일 가이드라인

GitLab은 다양한 서비스와 하위 프로젝트로 구성되어 있습니다. 그들의 대부분의 백엔드 코드는 RubyGo로 작성되어 있습니다. 그러나 일부는 배포, 설치 등의 루틴 시스템 관리 작업을 자동화하기 위해 셸 스크립트를 사용합니다. 이는 역사적인 이유로 수행되거나 Docker 이미지를 위한 의존성을 최소화하기 위한 노력으로 이루어집니다.

본 페이지는 다양한 경험을 바탕으로 셸 스크립트 가이드라인을 정의하고 체계화하는 것을 목표로 합니다. GitLab 프로젝트의 모든 셸 스크립트는 이 가이드와 결국 조화를 이루어야 합니다. 이 가이드와의 프로젝트별 차이가 있다면 해당 프로젝트의 README.md 또는 PROCESS.md 파일에 설명되어야 합니다.

셸 스크립트 사용 피하기

caution
반드시 읽어야 할 섹션입니다.

위에서 말한 모든 것을 고려할 때, 가능한 한 셸 스크립트 사용을 피하는 것을 권장합니다. Ruby나 (우리가 활용하는 코드베이스와 일관성을 유지하기 위해 필요한 경우) Python과 같은 언어가 거의 항상 더 나은 선택입니다. 고수준 인터프리티드 언어는 더 읽기 쉬운 구문을 가지고 있으며, 단위 테스트, 린팅 및 오류 보고 기능이 훨씬 더 능숙합니다.

프로젝트의 의존성 크기에 강력한 제한이 있거나 특정한 경우에 더 중요한 요구 사항이 있다면 셸 스크립트를 사용하세요.

이 가이드의 범위

GitLab 설치 요구사항에 따르면, 이 가이드는 지원되는 Linux 배포에서 사용되는 셸에 대해서만 다룹니다.

셸 언어 선택

  • 의존성 디렉터리을 줄이려면 환경에서 제공되는 것을 사용하세요. 예를 들어 Docker 이미지의 경우, 대부분의 도구 이미지에 대한 기본 이미지인 alpinesh를 사용합니다.
  • 다른 모든 곳에서 가능하다면 bash를 사용하세요. sh보다 더 강력하지만 여전히 널리 사용되는 셸입니다.

코드 스타일 및 포맷

이 섹션에서는 프로젝트에 포함된 셸 스크립트의 필수 컴포넌트로 작성되어야 하는 도구들을 설명합니다. 이러한 도구들은 셸 코드 포맷팅, 오류 또는 취약점 확인 등을 자동화합니다.

린팅

우리는 기본 설정에서 ShellCheck 유틸리티를 사용하여 셸 스크립트를 린트합니다.

셸 스크립트를 가진 모든 프로젝트는 다음 GitLab CI/CD 작업을 사용해야 합니다:

shell check:
  image: koalaman/shellcheck-alpine:stable
  stage: test
  before_script:
    - shellcheck --version
  script:
    - shellcheck scripts/**/*.sh  # 여러분의 셸 스크립트 경로
note
기본 설정에서 ShellCheck는 셸 탐지를 사용하여 사용 중인 셸 언어를 결정합니다. 셸 파일이 여러분의 통제를 벗어나 있고 ShellCheck가 언어를 감지할 수 없는 경우, -s 플래그를 사용하여 언어를 지정하세요: -s sh 또는 -s bash.

포맷팅

일관된 포맷을 유지하기 위해 shfmt 도구를 사용하는 것이 좋습니다. 따라서 프로젝트의 스크립트 파일에 다음과 같은 shfmt 호출을 적용해야 합니다:

shfmt -i 2 -ci -w scripts/**/*.sh

린팅 GitLab CI/CD 작업에 추가로, 셸 스크립트를 포함하는 모든 프로젝트는 다음 작업을 사용해야 합니다:

shfmt:
  image: mvdan/shfmt:v3.2.0-alpine
  stage: test
  before_script:
    - shfmt -version
  script:
    - shfmt -i 2 -ci -d scripts  # 여러분의 셸 스크립트 경로
note
기본 설정에서 shfmt는 셸 탐지와 ShellCheck와 유사하게 사용되며 점으로 시작하는 파일을 무시합니다. 이를 재정의하려면 -ln 플래그를 사용하여 셸 언어를 지정하세요: -ln posix 또는 -ln bash.

테스팅

note
이 작업은 진행 중인 작업입니다.

셸 스크립트의 자동화된 테스팅을 평가하기 위해 다양한 도구를 평가하는 지속적인 노력이 이루어지고 있습니다 (BATS와 같은).

코드 리뷰

코드 리뷰는 다음에 따라 수행되어야 합니다:

그러나 권장되는 조치는 상기 도구를 사용하고 보고된 offenses를 해결하는 것입니다. 이로써 코드 리뷰가 필요없게 될 것입니다.


개발 문서로 돌아가기.