스크립트 및 작업 로그 문제 해결
스크립트에서 콜론(:)을 사용하면 GitLab이 다음을 출력할 수 있습니다: 예를 들어, cURL 명령의 일부로 "PRIVATE-TOKEN: ${PRIVATE_TOKEN}"를 사용하는 경우: YAML 파서는 :가 YAML 키워드를 정의한다고 생각하여 Syntax is incorrect 오류를 출력합니다.
:를 사용하는 스크립트에서 Syntax is incorrect#
스크립트에서 콜론(:)을 사용하면 GitLab이 다음을 출력할 수 있습니다:
Syntax is incorrectscript config should be a string or a nested array of strings up to 10 levels deep
예를 들어, cURL 명령의 일부로 "PRIVATE-TOKEN: ${PRIVATE_TOKEN}"를 사용하는 경우:
pages-job:
stage: deploy
script:
- curl --header 'PRIVATE-TOKEN: ${PRIVATE_TOKEN}' "https://gitlab.example.com/api/v4/projects"
environment: production
YAML 파서는 :가 YAML 키워드를 정의한다고 생각하여 Syntax is incorrect 오류를 출력합니다.
콜론을 포함하는 명령을 사용하려면 전체 명령을 작은따옴표로 감싸야 합니다. 기존의 작은따옴표(')를 큰따옴표(")로 변경해야 할 수 있습니다:
pages-job:
stage: deploy
script:
- 'curl --header "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" "https://gitlab.example.com/api/v4/projects"'
environment: production
스크립트에서 &&를 사용할 때 작업이 실패하지 않음#
단일 스크립트 줄에서 &&를 사용하여 두 명령을 결합하면 하나의 명령이 실패하더라도 작업이 성공으로 반환될 수 있습니다. 예를 들어:
job-does-not-fail:
script:
- invalid-command xyz && invalid-command abc
- echo $?
- echo "The job should have failed already, but this is executed unexpectedly."
&& 연산자는 두 명령이 실패했더라도 종료 코드 0을 반환하며 작업이 계속 실행됩니다. 어느 명령이 실패할 때 스크립트를 강제로 종료하려면 전체 줄을 괄호로 감쌉니다:
job-fails:
script:
- (invalid-command xyz && invalid-command abc)
- echo "The job failed already, and this is not executed."
폴드된 YAML 다중 줄 블록 스칼라에서 다중 줄 명령이 보존되지 않음#
긴 명령을 분할하기 위해 - > 폴드된 YAML 다중 줄 블록 스칼라를 사용하면,
추가 들여쓰기로 인해 줄이 개별 명령으로 처리됩니다.
예를 들어:
script:
- >
RESULT=$(curl --silent
--header
"Authorization: Bearer $CI_JOB_TOKEN"
"${CI_API_V4_URL}/job"
)
들여쓰기로 인해 줄 바꿈이 보존되어 실패합니다:
$ RESULT=$(curl --silent # collapsed multi-line command
curl: no URL specified!
curl: try 'curl --help' or 'curl --manual' for more information
/bin/bash: line 149: --header: command not found
/bin/bash: line 150: https://gitlab.example.com/api/v4/job: No such file or directory
다음 중 하나로 해결합니다:
-
추가 들여쓰기 제거:
script: - > RESULT=$(curl --silent --header "Authorization: Bearer $CI_JOB_TOKEN" "${CI_API_V4_URL}/job" ) -
추가 줄 바꿈을 처리하도록 스크립트 수정, 예를 들어 셸 줄 연속 사용:
script: - > RESULT=$(curl --silent \ --header \ "Authorization: Bearer $CI_JOB_TOKEN" \ "${CI_API_V4_URL}/job")
작업 로그 출력이 예상대로 서식이 지정되지 않거나 예기치 않은 문자가 포함됨#
때때로 작업 로그의 서식이 색상 지정이나 서식을 위해 TERM 환경 변수에 의존하는 도구에서 올바르게 표시되지 않을 수 있습니다. 예를 들어 mypy 명령의 경우:

GitLab Runner는 컨테이너의 셸을 비대화형 모드로 실행하므로 셸의 TERM 환경 변수가 dumb로 설정됩니다. 이러한 도구의 서식을 수정하려면:
- 명령을 실행하기 전에 셸 환경에서
TERM=ansi를 설정하는 스크립트 줄을 추가합니다. - 값이
ansi인TERMCI/CD 변수를 추가합니다.
after_script 섹션 실행이 일찍 중단되고 잘못된 $CI_JOB_STATUS 값#
GitLab Runner 16.9.0에서 16.11.0까지:
after_script섹션 실행이 때때로 너무 일찍 중단됩니다.$CI_JOB_STATUS사전 정의된 변수의 상태가 작업이 취소되는 동안 잘못되게failed로 설정됩니다.
