InfoGrab DocsInfoGrab Docs

셸 스크립팅 표준 및 스타일 가이드

요약

GitLab은 다양한 서비스와 하위 프로젝트로 구성되어 있습니다. 이 페이지는 다양한 경험을 바탕으로 GitLab의 셸 스크립팅 가이드라인을 정의하고 정리하는 것을 목표로 합니다. 위의 모든 내용을 고려했을 때, 가능한 한 셸 스크립트를 사용하지 않도록 권장합니다.

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

이 페이지는 다양한 경험을 바탕으로 GitLab의 셸 스크립팅 가이드라인을 정의하고 정리하는 것을 목표로 합니다. GitLab 프로젝트 전반의 모든 셸 스크립트는 결국 이 가이드에 맞게 통일되어야 합니다. 프로젝트별로 이 가이드에서 벗어나는 사항이 있다면, 해당 프로젝트의 README.md 또는 PROCESS.md 파일에 기술해야 합니다.

셸 스크립트 사용 지양#

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

위의 모든 내용을 고려했을 때, 가능한 한 셸 스크립트를 사용하지 않도록 권장합니다. Ruby나 Python(활용하는 코드베이스와의 일관성을 위해 필요한 경우)과 같은 언어가 거의 항상 더 나은 선택입니다. 고수준 인터프리터 언어는 가독성이 더 높고, 단위 테스트, 린팅, 오류 보고에 있어 훨씬 더 성숙한 기능을 제공합니다.

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

이 가이드의 적용 범위#

GitLab 설치 요구사항에 따라, 이 가이드는 지원되는 Linux 배포판에서 사용하는 셸만을 다룹니다:

셸 언어 선택#

  • 의존성 목록을 줄여야 할 경우, 환경에서 제공하는 것을 사용하세요. 예를 들어, Docker 이미지의 경우 대부분의 도구 이미지의 기본 이미지인 alpine에서 제공하는 sh를 사용합니다.

  • 그 외의 경우에는 가능하면 bash를 사용하세요. sh보다 더 강력하면서도 여전히 널리 사용되는 셸입니다.

코드 스타일 및 포맷#

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

린팅#

셸 스크립트를 린팅하기 위해 기본 구성의 ShellCheck 유틸리티를 사용하고 있습니다.

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

shell check:
  image: koalaman/shellcheck-alpine:stable
  stage: test
  before_script:
    - shellcheck --version
  script:
    - shellcheck scripts/**/*.sh  # path to your shell scripts
기본적으로 ShellCheck는 [셸 감지](https://github.com/koalaman/shellcheck/wiki/SC2148#rationale)를 사용하여 사용 중인 셸 방언을 결정합니다.

셸 파일을 제어할 수 없고 ShellCheck가 방언을 감지할 수 없는 경우, -s 플래그를 사용하여 방언을 지정하세요: -s sh 또는 -s bash.

포맷팅#

일관된 포맷팅을 유지하기 위해 shfmt 도구를 사용하는 것을 권장합니다. 셸 스크립트는 Google Shell Style Guide에 따라 포맷팅하므로, 프로젝트의 스크립트 파일에 다음 shfmt 호출을 적용해야 합니다:

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

린팅 GitLab CI/CD job에 더하여, 셸 스크립트가 있는 모든 프로젝트는 다음 job도 사용해야 합니다:

shfmt:
  image: mvdan/shfmt:v3.2.0-alpine
  stage: test
  before_script:
    - shfmt -version
  script:
    - shfmt -i 2 -ci -d scripts  # path to your shell scripts
기본적으로 shfmt는 ShellCheck와 유사한 [셸 감지](https://github.com/mvdan/sh#shfmt)를 사용하며, 점(.)으로 시작하는 파일은 무시합니다.

이를 재정의하려면 -ln 플래그를 사용하여 셸 방언을 지정하세요: -ln posix 또는 -ln bash.

테스트#

작업 진행 중입니다.

셸 스크립트의 자동화된 테스트를 위한 다양한 도구(예: BATS)를 평가하는 작업이 진행 중입니다.

코드 리뷰#

코드 리뷰는 다음을 기준으로 수행해야 합니다:

그러나 권장하는 방법은 앞서 언급한 도구들을 사용하고 보고된 문제를 해결하는 것입니다. 이렇게 하면 코드 리뷰의 필요성이 줄어들 것입니다.


개발 문서로 돌아가기

셸 스크립팅 표준 및 스타일 가이드

GitLab v19.1
원문 보기
요약

GitLab은 다양한 서비스와 하위 프로젝트로 구성되어 있습니다. 이 페이지는 다양한 경험을 바탕으로 GitLab의 셸 스크립팅 가이드라인을 정의하고 정리하는 것을 목표로 합니다. 위의 모든 내용을 고려했을 때, 가능한 한 셸 스크립트를 사용하지 않도록 권장합니다.

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

이 페이지는 다양한 경험을 바탕으로 GitLab의 셸 스크립팅 가이드라인을 정의하고 정리하는 것을 목표로 합니다. GitLab 프로젝트 전반의 모든 셸 스크립트는 결국 이 가이드에 맞게 통일되어야 합니다. 프로젝트별로 이 가이드에서 벗어나는 사항이 있다면, 해당 프로젝트의 README.md 또는 PROCESS.md 파일에 기술해야 합니다.

셸 스크립트 사용 지양#

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

위의 모든 내용을 고려했을 때, 가능한 한 셸 스크립트를 사용하지 않도록 권장합니다. Ruby나 Python(활용하는 코드베이스와의 일관성을 위해 필요한 경우)과 같은 언어가 거의 항상 더 나은 선택입니다. 고수준 인터프리터 언어는 가독성이 더 높고, 단위 테스트, 린팅, 오류 보고에 있어 훨씬 더 성숙한 기능을 제공합니다.

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

이 가이드의 적용 범위#

GitLab 설치 요구사항에 따라, 이 가이드는 지원되는 Linux 배포판에서 사용하는 셸만을 다룹니다:

셸 언어 선택#

  • 의존성 목록을 줄여야 할 경우, 환경에서 제공하는 것을 사용하세요. 예를 들어, Docker 이미지의 경우 대부분의 도구 이미지의 기본 이미지인 alpine에서 제공하는 sh를 사용합니다.

  • 그 외의 경우에는 가능하면 bash를 사용하세요. sh보다 더 강력하면서도 여전히 널리 사용되는 셸입니다.

코드 스타일 및 포맷#

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

린팅#

셸 스크립트를 린팅하기 위해 기본 구성의 ShellCheck 유틸리티를 사용하고 있습니다.

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

shell check:
  image: koalaman/shellcheck-alpine:stable
  stage: test
  before_script:
    - shellcheck --version
  script:
    - shellcheck scripts/**/*.sh  # path to your shell scripts
기본적으로 ShellCheck는 [셸 감지](https://github.com/koalaman/shellcheck/wiki/SC2148#rationale)를 사용하여 사용 중인 셸 방언을 결정합니다.

셸 파일을 제어할 수 없고 ShellCheck가 방언을 감지할 수 없는 경우, -s 플래그를 사용하여 방언을 지정하세요: -s sh 또는 -s bash.

포맷팅#

일관된 포맷팅을 유지하기 위해 shfmt 도구를 사용하는 것을 권장합니다. 셸 스크립트는 Google Shell Style Guide에 따라 포맷팅하므로, 프로젝트의 스크립트 파일에 다음 shfmt 호출을 적용해야 합니다:

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

린팅 GitLab CI/CD job에 더하여, 셸 스크립트가 있는 모든 프로젝트는 다음 job도 사용해야 합니다:

shfmt:
  image: mvdan/shfmt:v3.2.0-alpine
  stage: test
  before_script:
    - shfmt -version
  script:
    - shfmt -i 2 -ci -d scripts  # path to your shell scripts
기본적으로 shfmt는 ShellCheck와 유사한 [셸 감지](https://github.com/mvdan/sh#shfmt)를 사용하며, 점(.)으로 시작하는 파일은 무시합니다.

이를 재정의하려면 -ln 플래그를 사용하여 셸 방언을 지정하세요: -ln posix 또는 -ln bash.

테스트#

작업 진행 중입니다.

셸 스크립트의 자동화된 테스트를 위한 다양한 도구(예: BATS)를 평가하는 작업이 진행 중입니다.

코드 리뷰#

코드 리뷰는 다음을 기준으로 수행해야 합니다:

그러나 권장하는 방법은 앞서 언급한 도구들을 사용하고 보고된 문제를 해결하는 것입니다. 이렇게 하면 코드 리뷰의 필요성이 줄어들 것입니다.


개발 문서로 돌아가기