Skip to main content

GitHub Actions에 대한 워크플로 명령

워크플로 또는 작업 코드에서 셸 명령을 실행할 때 워크플로 명령을 사용할 수 있습니다.

워크플로 명령 정보

작업은 실행기 컴퓨터와 통신하여 환경 변수를 설정하고, 다른 작업에서 사용하는 값을 출력하고, 출력 로그에 디버그 메시지를 추가하는 등 다양한 작업을 수행할 수 있습니다.

대부분의 워크플로 명령은 특정 형식으로 echo 명령을 사용하는 반면 파일에 작성하여 호출할 수 있는 명령도 있습니다. 자세한 내용은 “환경 파일”을 참조하세요.

예제

Shell
echo "::workflow-command parameter1={data},parameter2={data}::{command value}"
pwsh
Write-Output "::workflow-command parameter1={data},parameter2={data}::{command value}"

참고: 워크플로 명령 및 매개 변수 이름은 대/소문자를 구분하지 않습니다.

경고: 명령 프롬프트를 사용하는 경우 워크플로 명령을 사용할 때 큰따옴표(")를 생략합니다.

워크플로 명령을 사용하여 도구 키트 함수에 액세스

작업/도구 키트에는 워크플로 명령으로 실행할 수 있는 여러 함수가 포함되어 있습니다. :: 구문을 사용하여 YAML 파일 내에서 워크플로 명령을 실행합니다. 그러면 해당 명령이 stdout을 통해 실행기로 전송됩니다. 예를 들어 아래와 같이 코드를 사용하여 출력을 설정하는 대신

JavaScript
core.setOutput('SELECTED_COLOR', 'green');

예제: 값 설정

워크플로의 set-output 명령을 사용하여 동일한 값을 설정할 수 있습니다.

YAML
      - name: Set selected color
        run: echo '::set-output name=SELECTED_COLOR::green'
        id: random-color-generator
      - name: Get color
        run: echo "The selected color is ${{ steps.random-color-generator.outputs.SELECTED_COLOR }}"
YAML
      - name: Set selected color
        run: Write-Output "::set-output name=SELECTED_COLOR::green"
        id: random-color-generator
      - name: Get color
        run: Write-Output "The selected color is ${{ steps.random-color-generator.outputs.SELECTED_COLOR }}"

다음 표에서는 워크플로 내에서 사용할 수 있는 도구 키트 함수를 보여 줍니다.

도구 키트 함수동등한 워크플로 명령
core.addPathGITHUB_PATH 환경 파일을 사용하여 액세스할 수 있음
core.debugdebug
core.noticenotice
core.errorerror
core.endGroupendgroup
core.exportVariableGITHUB_ENV 환경 파일을 사용하여 액세스할 수 있음
core.getInputINPUT_{NAME} 환경 변수를 사용하여 액세스할 수 있음
core.getStateSTATE_{NAME} 환경 변수를 사용하여 액세스할 수 있음
core.isDebugRUNNER_DEBUG 환경 변수를 사용하여 액세스할 수 있음

출력 매개 변수 설정

작업의 출력 매개 변수를 설정합니다.

Code
::set-output name={name}::{value}

필요에 따라 작업의 메타데이터 파일에서 출력 매개 변수를 선언할 수도 있습니다. 자세한 내용은 “GitHub Actions에 대한 메타데이터 구문”을 참조하세요.

환경 변수를 만들고 워크플로 명령에서 사용하여 출력 매개 변수를 설정하기 위해 여러 줄 문자열을 이스케이프할 수 있습니다. 자세한 내용은 "환경 변수 설정"을 참조하세요.

예제: 출력 매개 변수 설정

Shell
echo "::set-output name=action_fruit::strawberry"
pwsh
Write-Output "::set-output name=action_fruit::strawberry"

디버그 메시지 설정

디버그 메시지를 로그에 출력합니다. 로그에서 이 명령으로 설정된 디버그 메시지를 보려면 이름이 ACTIONS_STEP_DEBUG이며 값이true인 비밀을 만들어야 합니다. 자세한 내용은 “디버그 로깅 사용”을 참조하세요.

Code
::debug::{message}

예제: 디버그 메시지 설정

Shell
echo "::debug::Set the Octocat variable"
pwsh
Write-Output "::debug::Set the Octocat variable"

알림 메시지 설정

알림 메시지를 만들고 메시지를 로그에 출력합니다. 이 메시지는 리포지토리의 특정 파일과 메시지를 연결할 수 있는 주석을 만듭니다. 필요에 따라 메시지가 파일 내의 위치를 지정할 수 있습니다.

Code
::notice file={name},line={line},endLine={endLine},title={title}::{message}
매개 변수
title사용자 지정 제목
file파일 이름
col열 번호( 1부터 시작)
endColumn끝 열 번호
line줄 번호( 1부터 시작)
endLine끝 줄 번호

예제: 알림 메시지 설정

Shell
echo "::notice file=app.js,line=1,col=5,endColumn=7::Missing semicolon"
pwsh
Write-Output "::notice file=app.js,line=1,col=5,endColumn=7::Missing semicolon"

경고 메시지 설정

경고 메시지를 만들고 메시지를 로그에 출력합니다. 이 메시지는 리포지토리의 특정 파일과 메시지를 연결할 수 있는 주석을 만듭니다. 필요에 따라 메시지가 파일 내의 위치를 지정할 수 있습니다.

Code
::warning file={name},line={line},endLine={endLine},title={title}::{message}
매개 변수
title사용자 지정 제목
file파일 이름
col열 번호( 1부터 시작)
endColumn끝 열 번호
line줄 번호( 1부터 시작)
endLine끝 줄 번호

예제: 경고 메시지 설정

Shell
echo "::warning file=app.js,line=1,col=5,endColumn=7::Missing semicolon"
pwsh
Write-Output "::warning file=app.js,line=1,col=5,endColumn=7::Missing semicolon"

오류 메시지 설정

오류 메시지를 만들고 메시지를 로그에 출력합니다. 이 메시지는 리포지토리의 특정 파일과 메시지를 연결할 수 있는 주석을 만듭니다. 필요에 따라 메시지가 파일 내의 위치를 지정할 수 있습니다.

Code
::error file={name},line={line},endLine={endLine},title={title}::{message}
매개 변수
title사용자 지정 제목
file파일 이름
col열 번호( 1부터 시작)
endColumn끝 열 번호
line줄 번호( 1부터 시작)
endLine끝 줄 번호

예제: 오류 메시지 설정

Shell
echo "::error file=app.js,line=1,col=5,endColumn=7::Missing semicolon"
pwsh
Write-Output "::error file=app.js,line=1,col=5,endColumn=7::Missing semicolon"

로그 줄 그룹화

로그에 확장 가능한 그룹을 만듭니다. 그룹을 만들려면 group 명령을 사용하고 title을 지정합니다. group 명령과 endgroup 명령 간 로그에 인쇄하는 모든 항목은 로그의 확장 가능한 항목 내에서 중첩됩니다.

Code
::group::{title}
::endgroup::

예제: 로그 선 그룹화

YAML
jobs:
  bash-example:
    runs-on: ubuntu-latest
    steps:
      - name: Group of log lines
        run: |
            echo "::group::My title"
            echo "Inside group"
            echo "::endgroup::"
YAML
jobs:
  powershell-example:
    runs-on: windows-latest
    steps:
      - name: Group of log lines
        run: |
            Write-Output "::group::My title"
            Write-Output "Inside group"
            Write-Output "::endgroup::"

워크플로 실행 로그의 폴딩 가능 그룹

로그에서 값 마스킹

Code
::add-mask::{value}

값을 마스킹하면 문자열 또는 변수가 로그에 출력되지 않습니다. 마스킹되어 공백으로 구분된 각 단어는 * 문자로 대체됩니다. 마스크의 value에 환경 변수 또는 문자열을 사용할 수 있습니다. 값을 마스킹하면 비밀로 처리되고 실행기에서 편집됩니다. 예를 들어 값을 마스킹한 후에는 해당 값을 출력으로 설정할 수 없습니다.

예제: 문자열 마스킹

로그에서 "Mona The Octocat"을 출력하면 "***"가 표시됩니다.

Shell
echo "::add-mask::Mona The Octocat"
pwsh
Write-Output "::add-mask::Mona The Octocat"

경고: 비밀을 빌드 로그에 출력하거나 다른 워크플로 명령에서 사용하기 전에 ‘add-mask’에 등록해야 합니다.

예제: 환경 변수 마스킹

로그에 MY_NAME 변수 또는 "Mona The Octocat" 값을 출력할 때 "Mona The Octocat" 대신 "***"가 표시됩니다.

YAML
jobs:
  bash-example:
    runs-on: ubuntu-latest
    env:
      MY_NAME: "Mona The Octocat"
    steps:
      - name: bash-version
        run: echo "::add-mask::$MY_NAME"
YAML
jobs:
  powershell-example:
    runs-on: windows-latest
    env:
      MY_NAME: "Mona The Octocat"
    steps:
      - name: powershell-version
        run: Write-Output "::add-mask::$env:MY_NAME"

워크플로 명령 중지 및 시작

워크플로 명령 처리를 중지합니다. 이 특수 명령을 사용하면 워크플로 명령을 실수로 실행하지 않고 모든 항목을 기록할 수 있습니다. 예를 들어 주석이 있는 전체 스크립트를 출력하기 위해 로깅을 중지할 수 있습니다.

Code
::stop-commands::{endtoken}

워크플로 명령의 처리를 중지하려면 고유한 토큰을 stop-commands에 전달합니다. 워크플로 명령 처리를 계속하려면 워크플로 명령을 중지하는 데 사용한 것과 동일한 토큰을 전달합니다.

경고: 사용 중인 토큰이 임의로 생성되고 각 실행에 대해 고유해야 합니다.

Code
::{endtoken}::

예제: 워크플로 명령 중지 및 시작

YAML
jobs:
  workflow-command-job:
    runs-on: ubuntu-latest
    steps:
      - name: Disable workflow commands
        run: |
          echo '::warning:: This is a warning message, to demonstrate that commands are being processed.'
          stopMarker=$(uuidgen)
          echo "::stop-commands::$stopMarker"
          echo '::warning:: This will NOT be rendered as a warning, because stop-commands has been invoked.'
          echo "::$stopMarker::"
          echo '::warning:: This is a warning again, because stop-commands has been turned off.'
YAML
jobs:
  workflow-command-job:
    runs-on: windows-latest
    steps:
      - name: Disable workflow commands
        run: |
          Write-Output '::warning:: This is a warning message, to demonstrate that commands are being processed.'
          $stopMarker = New-Guid
          Write-Output "::stop-commands::$stopMarker"
          Write-Output '::warning:: This will NOT be rendered as a warning, because stop-commands has been invoked.'
          Write-Output "::$stopMarker::"
          Write-Output '::warning:: This is a warning again, because stop-commands has been turned off.'

명령 출력 에코

워크플로 명령의 에코를 사용하거나 사용하지 않도록 설정합니다. 예를 들어 워크플로에서 set-output 명령을 사용하는 경우 출력 매개 변수를 설정하지만 워크플로 실행의 로그에 명령 자체가 표시되지 않습니다. 명령 에코를 사용하도록 설정하면 로그에 ::set-output name={name}::{value}와 같은 명령이 표시됩니다.

Code
::echo::on
::echo::off

명령 에코는 기본적으로 사용하지 않도록 설정됩니다. 그러나 명령을 처리하는 동안 오류가 발생하면 워크플로 명령이 에코됩니다.

출력이 이미 로그에 에코되므로 add-mask, debug, warning, error 명령은 에코를 지원하지 않습니다.

ACTIONS_STEP_DEBUG 비밀을 사용하여 단계 디버그 로깅을 사용 설정하여 전역적으로 명령 에코를 사용하도록 설정할 수도 있습니다. 자세한 내용은 “디버그 로깅 사용”을 참조하세요. 반면 echo 워크플로 명령을 사용하면 리포지토리의 모든 워크플로에 대해 명령 에코를 사용하도록 설정하는 대신 보다 세분화된 수준에서 명령 에코를 사용하도록 설정할 수 있습니다.

예제: 명령 에코 전환

YAML
jobs:
  workflow-command-job:
    runs-on: ubuntu-latest
    steps:
      - name: toggle workflow command echoing
        run: |
          echo '::set-output name=action_echo::disabled'
          echo '::echo::on'
          echo '::set-output name=action_echo::enabled'
          echo '::echo::off'
          echo '::set-output name=action_echo::disabled'
YAML
jobs:
  workflow-command-job:
    runs-on: windows-latest
    steps:
      - name: toggle workflow command echoing
        run: |
          write-output "::set-output name=action_echo::disabled"
          write-output "::echo::on"
          write-output "::set-output name=action_echo::enabled"
          write-output "::echo::off"
          write-output "::set-output name=action_echo::disabled"

위의 예제에서는 다음 줄을 로그에 출력합니다.

Code
::set-output name=action_echo::enabled
::echo::off

명령 에코가 실행될 때만 사용하도록 설정되었기 때문에 두 번째 set-outputecho 워크플로 명령만 로그에 포함됩니다. 항상 에코되는 것은 아니지만 출력 매개 변수는 모든 경우에 설정됩니다.

이전 및 사후 작업에 값 보내기

에 있는 GITHUB_STATE파일에 기록하여 워크플로 pre: 또는 post: 작업과 공유할 환경 변수를 만들 수 있습니다.}명령을 사용하여 save-state 워크플로 pre: 또는 post: 작업과 공유할 환경 변수를 만들 수 있습니다. 예를 들어 pre: 작업을 사용하여 파일을 만들고, 파일 위치를 main: 작업에 전달한 다음, post: 작업을 사용하여 파일을 삭제할 수 있습니다. 또는 main: 작업을 사용하여 파일을 만들고, 파일 위치를 post: 작업에 전달한 다음, post: 작업을 사용하여 파일을 삭제할 수 있습니다.

또는 작업이 여러 pre: 개 있는 경우 save-state에 기록GITHUB_STATE된 작업에서 저장된 값에만 액세스할 수 있습니다에 대한 메타데이터 구문](/actions/creating-actions/metadata-syntax-for-github-actions#runspost)”을 참조하세요.

명령은 save-state 작업 내에서만 실행할 수 있으며 YAML 파일에서는 사용할 수 없습니다. 저장된 값은 접두사가 STATE_인 환경 값으로 저장됩니다.

이 예제에서는 JavaScript를 사용하여 명령을 실행합니다 save-state . 결과 환경 변수의 이름은 STATE_processID이며 값은 12345가 됩니다.

JavaScript
console.log('::save-state name=processID::12345')

그런 다음 main 작업에서 실행되는 정리 스크립트에서만 STATE_processID 변수를 사용할 수 있습니다. 이 예제는 main에서 실행되며 JavaScript를 사용하여 STATE_processID 환경 변수에 할당된 값을 표시합니다.

JavaScript
console.log("The running PID from the main action is: " +  process.env.STATE_processID);

환경 파일

워크플로를 실행하는 동안 실행기는 특정 작업을 수행하는 데 사용할 수 있는 임시 파일을 생성합니다. 파일의 경로는 환경 변수를 통해 노출됩니다. 파일에 코드를 작성할 때에는 명령의 적절한 처리를 보장하기 위해 UTF-8 인코딩을 사용해야 합니다. 동일한 파일에 여러 명령을 줄 바꿈으로 구분하여 작성할 수 있습니다.

다음 예제의 대부분의 명령은 셸 변수 이름에 대해 와 같은 $ 문자를 보간하는 에코 문자열에 큰따옴표를 사용합니다. 항상 따옴표 붙은 문자열에 리터럴 값을 사용하려면 작은따옴표를 대신 사용할 수 있습니다.

참고: PowerShell 버전 5.1 이하(shell: powershell)는 기본적으로 UTF-8을 사용하지 않으므로 UTF-8 인코딩을 지정해야 합니다. 예를 들면 다음과 같습니다.

YAML
jobs:
  legacy-powershell-example:
    runs-on: windows-latest
    steps:
      - shell: powershell
        run: |
          "mypath" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append

PowerShell Core 버전 6 이상(shell: pwsh)은 기본적으로 UTF-8을 사용합니다. 예를 들면 다음과 같습니다.

YAML
jobs:
  powershell-core-example:
    runs-on: windows-latest
    steps:
      - shell: pwsh
        run: |
          "mypath" >> $env:GITHUB_PATH

환경 변수 설정

Shell
echo "{environment_variable_name}={value}" >> $GITHUB_ENV
  • PowerShell 버전 6 이상 사용:

    pwsh
    "{environment_variable_name}={value}" >> $env:GITHUB_ENV
  • PowerShell 버전 5.1 이하 사용:

    powershell
    "{environment_variable_name}={value}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

환경 변수를 정의하거나 업데이트하고 이를 GITHUB_ENV 환경 파일에 작성하여 워크플로 작업의 후속 단계에서 환경 변수를 사용할 수 있도록 할 수 있습니다. 환경 변수를 만들거나 업데이트하는 단계는 새 값에 액세스할 수 없지만 작업의 모든 후속 단계에는 액세스 권한이 있습니다. 환경 변수의 이름은 대/소문자를 구분하며 문장 부호를 포함할 수 있습니다. 자세한 내용은 “환경 변수”를 참조하세요.

예제

YAML
steps:
  - name: Set the value
    id: step_one
    run: |
      echo "action_state=yellow" >> $GITHUB_ENV
  - name: Use the value
    id: step_two
    run: |
      echo "${{ env.action_state }}" # This will output 'yellow'
YAML
steps:
  - name: Set the value
    id: step_one
    run: |
      "action_state=yellow" >> $env:GITHUB_ENV
  - name: Use the value
    id: step_two
    run: |
      Write-Output "${{ env.action_state }}" # This will output 'yellow'

다중 선 문자열

다중 선 문자열의 경우 다음 구문에 구분 기호를 사용할 수 있습니다.

Code
{name}<<{delimiter}
{value}
{delimiter}

경고: 사용 중인 구분 기호가 임의로 생성되고 각 실행에 대해 고유해야 합니다. 자세한 내용은 “스크립트 삽입의 위험에 대한 이해”를 참조하세요.

예제

이 예제에서는 EOF를 구분 기호로 사용하고 JSON_RESPONSE 환경 변수를 curl 응답의 값으로 설정합니다.

YAML
steps:
  - name: Set the value in bash
    id: step_one
    run: |
      echo 'JSON_RESPONSE<<EOF' >> $GITHUB_ENV
      curl https://example.com >> $GITHUB_ENV
      echo 'EOF' >> $GITHUB_ENV
YAML
steps:
  - name: Set the value in pwsh
    id: step_one
    run: |
      "JSON_RESPONSE<<EOF" >> $env:GITHUB_ENV
      (Invoke-WebRequest -Uri "https://example.com").Content >> $env:GITHUB_ENV
      "EOF" >> $env:GITHUB_ENV
    shell: pwsh

시스템 경로 추가

디렉터리를 시스템 PATH 변수 앞에 추가하고 현재 작업의 모든 후속 작업에 사용할 수 있도록 자동으로 설정합니다. 현재 실행 중인 작업은 업데이트된 경로 변수에 액세스할 수 없습니다. 작업에 대해 현재 정의된 경로를 보려면 단계 또는 작업에서 echo "$PATH"를 사용할 수 있습니다.

Shell
echo "{path}" >> $GITHUB_PATH
pwsh
"{path}" >> $env:GITHUB_PATH

예제

이 예제에서는 사용자 $HOME/.local/bin 디렉터리를 PATH에 추가하는 방법을 보여 줍니다.

Shell
echo "$HOME/.local/bin" >> $GITHUB_PATH

이 예제에서는 사용자 $env:HOMEPATH/.local/bin 디렉터리를 PATH에 추가하는 방법을 보여 줍니다.

pwsh
"$env:HOMEPATH/.local/bin" >> $env:GITHUB_PATH