InfoGrab Docs

스크립트와 잡 로그

요약

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_scriptafter_scriptdefault와 함께 사용할 수 있습니다:

  • 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 섹션을 다음과 같이 구성합니다:

  1. after_script 섹션 시작 시 $CI_JOB_STATUS 사전 정의 변수를 확인합니다.
  2. 값이 canceled이면 일찍 실행을 종료합니다.

예를 들어:

job1:
  script:
    - my-script.sh
  after_script:
    - if [ "$CI_JOB_STATUS" == "canceled" ]; then exit 0; fi
    - my-after-script.sh

긴 명령 분할#

| (리터럴)과 > (접힘) YAML 여러 줄 블록 스칼라 지시자를 사용하여 가독성을 위해 긴 명령을 여러 줄 명령으로 분할할 수 있습니다.

Warning

여러 명령을 하나의 명령 문자열로 결합하면 마지막 명령의 실패 또는 성공만 보고됩니다. 버그로 인해 이전 명령의 실패가 무시됩니다. 이를 해결하려면 각 명령을 별도의 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"

스크립트와 잡 로그

Tier: Free, Premium, Ultimate
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_scriptafter_scriptdefault와 함께 사용할 수 있습니다:

  • 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 섹션을 다음과 같이 구성합니다:

  1. after_script 섹션 시작 시 $CI_JOB_STATUS 사전 정의 변수를 확인합니다.
  2. 값이 canceled이면 일찍 실행을 종료합니다.

예를 들어:

job1:
  script:
    - my-script.sh
  after_script:
    - if [ "$CI_JOB_STATUS" == "canceled" ]; then exit 0; fi
    - my-after-script.sh

긴 명령 분할#

| (리터럴)과 > (접힘) YAML 여러 줄 블록 스칼라 지시자를 사용하여 가독성을 위해 긴 명령을 여러 줄 명령으로 분할할 수 있습니다.

Warning

여러 명령을 하나의 명령 문자열로 결합하면 마지막 명령의 실패 또는 성공만 보고됩니다. 버그로 인해 이전 명령의 실패가 무시됩니다. 이를 해결하려면 각 명령을 별도의 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"