
GitLab CI 사용자를 위한 YAML 시작
GitLab CI 사용자를 위한 YAML 시작
GitLab Advent Calendar 2017 넷째 날 기사입니다.
GitLab CI는 Travis CI 또는 CircleCI와 마찬가지로 YAML 파일에서 처리를 설명합니다.
다음은 웹 응용 프로그램을 린트 및 테스트하고 빌드된 아티팩트를 저장하는 .gitlab-ci.yml
파일입니다.
.gitlab-ci.ymlbuild:
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.ymlbuild:
script:
- [ -x /usr/bin/docker ] && docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
이 경우 싱글 쿼트로 묶습니다.
.gitlab-ci.ymlbuild:
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.ymlbuild:
script:
- >-
test -x /usr/bin/docker &&
docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
또한 |-
를 사용하여 여러 줄의 텍스트를 작성할 수 있습니다.
.gitlab-ci.ymlbuild:
script:
- |-
test -x /usr/bin/docker && \
docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
|-
를 사용하면 if
문장도 쓰기 쉬워집니다.
.gitlab-ci.ymlbuild:
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.ymlbuild:
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.ymlbuild:
script:
- echo hoge
- echo hoge
- echo hoge
위 스크립트 대신 다음과 같이 쓸 수도 있습니다.
.gitlab-ci.ymlbuild:
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
참고 자료
build:
script:
- npm install
- npm run lint
- npm run test
- npm run build
artifacts:
paths:
- dist
- reports
# - を使う
hoge:
- a
- b
- c
# [] を使う
hoge: [a, b, c]
# `:` を使う
hoge:
a: aaa
b: bbb
c: ccc
# {} を使う
hoge: { a: aaa, b: bbb, c: ccc }
build:
script:
- [ -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}"'
# `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}"
build:
script:
- >-
test -x /usr/bin/docker &&
docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
build:
script:
- |-
test -x /usr/bin/docker && \
docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
build:
script:
- |-
if [ -x /usr/bin/docker ]; then
docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
fi
build:
script:
- if [ -x /usr/bin/docker ]; then
- docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
- fi
build:
script:
- echo hoge
- echo hoge
- echo hoge
build:
script:
# `echo hoge` をリストの最初にセットしつつ、`hoge` 変数にもセット
- &hoge echo hoge
# `hoge` 変数を展開
- *hoge
- *hoge
# `.` で始まるので、このジョブは実行されない
.dontrun:
# hoge 変数に `echo hoge` を代入
- &hoge echo hoge
build:
script:
# hoge 変数を展開
- *hoge
- *hoge
- *hoge
.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 해설. 짧게 정리되어 좋은 느낌입니다.