스크립트와 잡 로그
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
script 섹션에서 특수 구문을 사용하여 다음을 수행할 수 있습니다: 때로는 script 명령을 작은 따옴표나 큰 따옴표로 묶어야 합니다. 예를 들어 이 스크립트는 콜론을 사용합니다: 유효한 YAML로 간주되려면 전체 명령을 작은 따옴표로 묶어야 합니다.
script 섹션에서 특수 구문을 사용하여 다음을 수행할 수 있습니다:
- 긴 명령을 여러 줄 명령으로 분할.
- 색상 코드를 추가하여 잡 로그를 더 쉽게 검토.
- 잡 로그 출력을 단순화하기 위해 커스텀 축소 가능 섹션 생성.
script에서 특수 문자 사용#
때로는 script 명령을 작은 따옴표나 큰 따옴표로 묶어야 합니다.
예를 들어 콜론(:)이 포함된 명령은 작은 따옴표(')로 묶어야 합니다.
YAML 파서는 텍스트를 "key: value" 쌍이 아닌 문자열로 해석해야 합니다.
예를 들어 이 스크립트는 콜론을 사용합니다:
job:
script:
- curl --request POST --header 'Content-Type: application/json' "https://gitlab.example.com/api/v4/projects"
유효한 YAML로 간주되려면 전체 명령을 작은 따옴표로 묶어야 합니다. 명령에 이미 작은 따옴표가 사용된 경우 가능하면 큰 따옴표(")로 변경해야 합니다:
job:
script:
- 'curl --request POST --header "Content-Type: application/json" "https://gitlab.example.com/api/v4/projects"'
CI Lint 도구로 구문이 유효한지 확인할 수 있습니다.
다음 문자를 사용할 때도 주의하세요:
{,},[,],,,&,*,#,?,|,-,<,>,=,!,%,@,`.
0이 아닌 종료 코드 무시#
스크립트 명령이 0이 아닌 종료 코드를 반환하면 잡이 실패하고 추가 명령이 실행되지 않습니다.
이 동작을 피하려면 종료 코드를 변수에 저장합니다:
job:
script:
- exit_code=0
- false || exit_code=$?
- if [ $exit_code -ne 0 ]; then echo "Previous command failed"; fi;
모든 잡에 기본 before_script 또는 after_script 설정#
before_script와 after_script를
default와 함께 사용할 수 있습니다:
default와 함께before_script를 사용하여 모든 잡의script명령 전에 실행해야 하는 기본 명령 배열을 정의합니다.default와 함께after_script를 사용하여 잡이 완료되거나 취소된 후 실행해야 하는 기본 명령 배열을 정의합니다.
잡에서 다른 것을 정의하여 기본값을 덮어쓸 수 있습니다. 기본값을 무시하려면 before_script: [] 또는 after_script: []를 사용합니다:
default:
before_script:
- echo "Execute this `before_script` in all jobs by default."
after_script:
- echo "Execute this `after_script` in all jobs by default."
job1:
script:
- echo "These script commands execute after the default `before_script`,"
- echo "and before the default `after_script`."
job2:
before_script:
- echo "Execute this script instead of the default `before_script`."
script:
- echo "This script executes after the job's `before_script`,"
- echo "but the job does not use the default `after_script`."
after_script: []
잡이 취소될 때 after_script 명령 건너뛰기#
히스토리
- GitLab 17.0에서
ci_canceling_status라는 플래그와 함께 도입. 기본적으로 활성화됨. GitLab Runner 버전 16.11.1 필요. - GitLab 17.3에서 일반적으로 사용 가능해짐. 기능 플래그
ci_canceling_status제거됨.
after_script 명령은 해당 잡의 before_script 또는 script 섹션이 실행 중일 때 잡이 취소되면 실행됩니다.
after_script가 실행되는 동안 UI의 잡 상태는 canceling이며, after_script 명령이 완료된 후 canceled로 변경됩니다. $CI_JOB_STATUS 사전 정의 변수는 after_script 명령이 실행되는 동안 canceled 값을 가집니다.
잡을 취소한 후 after_script 명령이 실행되지 않도록 하려면 after_script 섹션을 다음과 같이 구성합니다:
after_script섹션 시작 시$CI_JOB_STATUS사전 정의 변수를 확인합니다.- 값이
canceled이면 일찍 실행을 종료합니다.
예를 들어:
job1:
script:
- my-script.sh
after_script:
- if [ "$CI_JOB_STATUS" == "canceled" ]; then exit 0; fi
- my-after-script.sh
긴 명령 분할#
| (리터럴)과 > (접힘) YAML 여러 줄 블록 스칼라 지시자를 사용하여 가독성을 위해 긴 명령을 여러 줄 명령으로 분할할 수 있습니다.
여러 명령을 하나의 명령 문자열로 결합하면 마지막 명령의 실패 또는 성공만 보고됩니다.
버그로 인해 이전 명령의 실패가 무시됩니다.
이를 해결하려면 각 명령을 별도의 script 항목으로 실행하거나 각 명령 문자열에 exit 1 명령을 추가합니다.
| (리터럴) YAML 여러 줄 블록 스칼라 지시자를 사용하여 잡 설명의 script 섹션에서 여러 줄에 걸쳐 명령을 작성할 수 있습니다.
각 줄은 별도의 명령으로 처리됩니다.
잡 로그에는 첫 번째 명령만 반복되지만 추가 명령은 계속 실행됩니다:
job:
script:
- |
echo "First command line."
echo "Second command line."
echo "Third command line."
이전 예시는 잡 로그에 다음과 같이 렌더링됩니다:
$ echo First command line # collapsed multiline command
First command line
Second command line.
Third command line.
> (접힘) YAML 여러 줄 블록 스칼라 지시자는 섹션 사이의 빈 줄을 새 명령의 시작으로 처리합니다:
job:
script:
- >
echo "First command line
is split over two lines."
echo "Second command line."
이는 > 또는 | 블록 스칼라 지시자 없이 여러 줄 명령과 유사하게 작동합니다:
job:
script:
- echo "First command line
is split over two lines."
echo "Second command line."
이전 두 예시는 잡 로그에 다음과 같이 렌더링됩니다:
$ echo First command line is split over two lines. # collapsed multiline command
First command line is split over two lines.
Second command line.
> 또는 | 블록 스칼라 지시자를 생략하면 GitLab이 비어 있지 않은 줄을 연결하여 명령을 형성합니다. 줄이 연결될 때 실행될 수 있는지 확인합니다.
셸 here 문서는 | 및 > 연산자와도 작동합니다. 다음 예시는 소문자를 대문자로 변환합니다:
job:
script:
- |
tr a-z A-Z << END_TEXT
one two three
four five six
END_TEXT
결과:
$ tr a-z A-Z << END_TEXT # collapsed multiline command
ONE TWO THREE
FOUR FIVE SIX
스크립트 출력에 색상 코드 추가#
ANSI 이스케이프 코드를 사용하거나 ANSI 이스케이프 코드를 출력하는 명령 또는 프로그램을 실행하여 스크립트 출력에 색상을 지정할 수 있습니다.
예를 들어 색상 코드가 있는 Bash를 사용하면:
job:
script:
- echo -e "\e[31mThis text is red,\e[0m but this text isn't\e[31m however this text is red again."
셸 환경 변수나 CI/CD 변수에서 색상 코드를 정의하여 명령을 더 읽기 쉽고 재사용 가능하게 만들 수 있습니다.
예를 들어 이전 예시와 before_script에서 정의된 환경 변수를 사용하면:
job:
before_script:
- TXT_RED="\e[31m" && TXT_CLEAR="\e[0m"
script:
- echo -e "${TXT_RED}This text is red,${TXT_CLEAR} but this part isn't${TXT_RED} however this part is again."
- echo "This text is not colored"
또는 PowerShell 색상 코드를 사용하면:
job:
before_script:
- $esc="$([char]27)"; $TXT_RED="$esc[31m"; $TXT_CLEAR="$esc[0m"
script:
- Write-Host $TXT_RED"This text is red,"$TXT_CLEAR" but this text isn't"$TXT_RED" however this text is red again."
- Write-Host "This text is not colored"
