GitLab CI 사용자를 위한 YAML 시작

GitLab CI 사용자를 위한 YAML 시작

2022-10-04 last update

11 minutes reading GitLab GitLab-CI

GitLab CI 사용자를 위한 YAML 시작



GitLab Advent Calendar 2017 넷째 날 기사입니다.

GitLab CI는 Travis CI 또는 CircleCI와 마찬가지로 YAML 파일에서 처리를 설명합니다.

다음은 웹 응용 프로그램을 린트 및 테스트하고 빌드된 아티팩트를 저장하는 .gitlab-ci.yml 파일입니다.

.gitlab-ci.yml
build:
  script:
    - npm install
    - npm run lint
    - npm run test
    - npm run build
  artifacts:
    paths:
      - dist
      - reports
hoge: 가 해시로 - 가 리스트에 변환되는 것은 왠지 알 수 있습니다만, 써 보면(자) 잘 움직이지 않는 일이 있습니다. 도움말에서 YAML을 작성하는 방법에 대해 자세히 쓰는 것은 아니므로 상당히 빠졌습니다. 조사한 것을 정리했습니다.

해시와 목록



목록을 작성할 때 - 대신 []로 묶을 수 있습니다.
# - を使う
hoge:
  - a
  - b
  - c

# [] を使う
hoge: [a, b, c]

해시도 마찬가지로 {}로 묶을 수 있습니다.
# `:` を使う
hoge:
  a: aaa
  b: bbb
  c: ccc

# {} を使う
hoge: { a: aaa, b: bbb, c: ccc }

아마, []{} 를 사용하는 것은 없다고 생각합니다만, 이것을 모른다고 해서 소개했습니다.

[(test 명령) 사용



YAML에서는 [로 시작하면 목록으로 간주됩니다. test 명령의 [를 사용하면 됩니다.

예를 들어, docker 명령이 있으면 로그인하는 프로세스를 다음과 같이 작성하면 오류가 발생합니다.

.gitlab-ci.yml
build:
  script:
    - [ -x /usr/bin/docker ] && docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"

이 경우 싱글 쿼트로 묶습니다.

.gitlab-ci.yml
build:
  script:
    - '[ -x /usr/bin/docker ] && docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"'

선두가 [가 아니면 문제는 없기 때문에, 해결 방법은 많이 있습니다.

.gitlab-ci.yml
# `test` を使う
build:
  script:
    - test -x /usr/bin/docker && docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"

# `\` を付ける
build:
  script:
    - \[ -x /usr/bin/docker ] && docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"

# `true` を使う
build:
  script:
    - true && [ -x /usr/bin/docker ] && docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"

긴 명령 작성



한 줄에 많은 명령을 넣으면 어려워집니다. 그러한 경우는 >- (을)를 사용하면 복수행의 텍스트를 일행에 정리할 수 있습니다.

.gitlab-ci.yml
build:
  script:
    - >-
      test -x /usr/bin/docker &&
      docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"

또한 |-를 사용하여 여러 줄의 텍스트를 작성할 수 있습니다.

.gitlab-ci.yml
build:
  script:
    - |-
      test -x /usr/bin/docker && \
      docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
|-를 사용하면 if 문장도 쓰기 쉬워집니다.

.gitlab-ci.yml
build:
  script:
    - |-
      if [ -x /usr/bin/docker ]; then
        docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
      fi

여기까지 써 두었습니다만, GitLab CI 에서는 script 의 리스트의 내용을 결합한 쉘 스크립트를 실행하고 있으므로, >-|- 가 아니어도 특별히 문제는 없습니다.

.gitlab-ci.yml
build:
  script:
    - if [ -x /usr/bin/docker ]; then
    -   docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
    - fi

주) 작업 실행 보고서에 차이가있는 것 같습니다.

앵커와 별칭



GitLab CI 도움말은 템플릿이지만 YAML 앵커와 별칭을 사용합니다.

.gitlab-ci.yml
build:
  script:
    - echo hoge
    - echo hoge
    - echo hoge

위 스크립트 대신 다음과 같이 쓸 수도 있습니다.

.gitlab-ci.yml
build:
  script:
# `echo hoge` をリストの最初にセットしつつ、`hoge` 変数にもセット
    - &hoge echo hoge
# `hoge` 変数を展開
    - *hoge
    - *hoge

첫 번째 &hoge echo hoge도 사용됩니다.

또한 GitLab CI에서 .로 시작하는 작업은 무시됩니다. 이것을 사용해, 이하와 같이 쓸 수도 있습니다.

.gitlab-ci.yml
# `.` で始まるので、このジョブは実行されない
.dontrun:
# hoge 変数に `echo hoge` を代入
  - &hoge echo hoge

build:
  script:
# hoge 変数を展開
    - *hoge
    - *hoge
    - *hoge

해시는 <<를 사용하여 병합할 수 있습니다. 이것은 GitLab CI의 템플릿입니다.

.gitlab-ci.yml
.template: &template
  script:
    - echo foo
    - echo bar

job1:
  <<: *template

job2:
  <<: *template

참고 자료



  • Configuration of your jobs with .gitlab-ci.yml - 공식 매뉴얼.

  • .gitlab-ci.yml로 작업을 설정하는 방법 (일본어 번역) @ynott 님의 번역.

  • Check your .gitlab-ci.yml - .gitlab-ci.yml 문법 검사뿐만 아니라 어떤 식으로 해석 될 때까지보고합니다.

  • 프로그래머를 위한 YAML 입문 (초급편) - 루비마의 YAML 해설입니다. 추천!

  • YAML 기본 기법 요약 - @gcfuji 님의 YAML 해설. 짧게 정리되어 좋은 느낌입니다.