Skip to main content

GitHub Actions에 대한 워크플로 명령

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

Tool navigation

워크플로 명령 정보

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

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

워크플로 명령의 예시

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

참고 항목

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

경고

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

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

작업/도구 키트에는 워크플로 명령으로 실행할 수 있는 여러 함수가 포함되어 있습니다. :: 구문을 사용하여 YAML 파일 내에서 워크플로 명령을 실행합니다. 그러면 해당 명령이 stdout을 통해 실행기로 전송됩니다.

예를 들어 코드를 사용하는 대신 아래와 같이 오류 주석을 만들 수 있습니다.

JavaScript
core.error('Missing semicolon', {file: 'app.js', startLine: 1})

예: 오류에 대한 주석 만들기

워크플로의 error 명령을 사용하여 동일한 오류 주석을 만들 수 있습니다.

YAML
      - name: Create annotation for build error
        run: echo "::error file=app.js,line=1::Missing semicolon"
YAML
      - name: Create annotation for build error
        run: Write-Output "::error file=app.js,line=1::Missing semicolon"

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

도구 키트 함수동등한 워크플로 명령
core.addPathGITHUB_PATH 환경 파일을 사용하여 액세스할 수 있음
core.debugdebug
core.noticenotice
core.errorerror
core.endGroupendgroup
core.exportVariableGITHUB_ENV 환경 파일을 사용하여 액세스할 수 있음
core.getInputINPUT_{NAME} 환경 변수를 사용하여 액세스할 수 있음
core.getStateSTATE_{NAME} 환경 변수를 사용하여 액세스할 수 있음
core.isDebugRUNNER_DEBUG 환경 변수를 사용하여 액세스할 수 있음
core.summaryGITHUB_STEP_SUMMARY 환경 파일을 사용하여 액세스할 수 있음
core.saveStateGITHUB_STATE 환경 파일을 사용하여 액세스할 수 있음
core.setCommandEchoecho
core.setFailed::errorexit 1에 대한 바로 가기로 사용
core.setOutputGITHUB_OUTPUT 환경 파일을 사용하여 액세스할 수 있음
core.setSecretadd-mask
core.startGroupgroup
core.warningwarning

디버그 메시지 설정

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

Text
::debug::{message}

예제: 디버그 메시지 설정

Bash
echo "::debug::Set the Octocat variable"
PowerShell
Write-Output "::debug::Set the Octocat variable"

알림 메시지 설정

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

Text
::notice file={name},line={line},endLine={endLine},title={title}::{message}
매개 변수Required기본값
title사용자 지정 제목아니요None
fileFilename아니요.github
col열 번호, 1부터 시작아니요None
endColumn마지막 열 번호아니요None
line행 번호, 1부터 시작아니요1
endLine마지막 줄 번호아니요1

예제: 알림 메시지 설정

Bash
echo "::notice file=app.js,line=1,col=5,endColumn=7::Missing semicolon"
PowerShell
Write-Output "::notice file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"

경고 메시지 설정

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

Text
::warning file={name},line={line},endLine={endLine},title={title}::{message}
매개 변수Required기본값
title사용자 지정 제목아니요None
fileFilename아니요.github
col열 번호, 1부터 시작아니요None
endColumn마지막 열 번호아니요None
line행 번호, 1부터 시작아니요1
endLine마지막 줄 번호아니요1

예제: 경고 메시지 설정

Bash
echo "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
PowerShell
Write-Output "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"

오류 메시지 설정

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

Text
::error file={name},line={line},endLine={endLine},title={title}::{message}
매개 변수Required기본값
title사용자 지정 제목아니요None
fileFilename아니요.github
col열 번호, 1부터 시작아니요None
endColumn마지막 열 번호아니요None
line행 번호, 1부터 시작아니요1
endLine마지막 줄 번호아니요1

예제: 오류 메시지 설정

Bash
echo "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
PowerShell
Write-Output "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"

로그 줄 그룹화

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

Text
::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::"

워크플로 단계의 로그 스크린샷입니다. 두 번째 줄인 "My title"은 확장된 그룹입니다. 다음 줄인 "내부 그룹"은 아래에 들여쓰기되어 있습니다.

로그에서 값 마스킹

Text
::add-mask::{value}

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

예제: 문자열 마스킹

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

Bash
echo "::add-mask::Mona The Octocat"
PowerShell
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"

예: 단일 작업 내에서 생성된 출력 마스킹

한 작업에서 다른 작업으로 비밀을 전달할 필요가 없는 경우 다음을 수행할 수 있습니다.

  1. 비밀을 생성합니다(출력하지 않고).
  2. add-mask(으)로 마스킹합니다.
  3. 작업 내의 다른 단계에서 비밀을 사용할 수 있도록 하는 데 GITHUB_OUTPUT을(를) 사용합니다.
YAML
on: push
jobs:
  generate-a-secret-output:
    runs-on: ubuntu-latest
    steps:
      - id: sets-a-secret
        name: Generate, mask, and output a secret
        run: |
          the_secret=$((RANDOM))
          echo "::add-mask::$the_secret"
          echo "secret-number=$the_secret" >> "$GITHUB_OUTPUT"
      - name: Use that secret output (protected by a mask)
        run: |
          echo "the secret number is ${{ steps.sets-a-secret.outputs.secret-number }}"
YAML
on: push
jobs:
  generate-a-secret-output:
    runs-on: ubuntu-latest
    steps:
      - id: sets-a-secret
        name: Generate, mask, and output a secret
        shell: pwsh
        run: |
          Set-Variable -Name TheSecret -Value (Get-Random)
          Write-Output "::add-mask::$TheSecret"
          "secret-number=$TheSecret" >> $env:GITHUB_OUTPUT
      - name: Use that secret output (protected by a mask)
        shell: pwsh
        run: |
          Write-Output "the secret number is ${{ steps.sets-a-secret.outputs.secret-number }}"

예: 작업 또는 워크플로 간에 비밀 마스킹 및 전달

작업 또는 워크플로 간에 마스킹된 비밀을 전달하려면 저장소에 비밀을 저장한 다음 후속 작업 또는 워크플로에서 검색해야 합니다.

설정

  1. 워크플로 중에 생성할 비밀을 저장하도록 비밀 저장소를 설정합니다. 예: Vault.
  2. 해당 비밀 저장소를 읽고 쓰기 위한 키를 생성합니다. 키를 리포지토리 비밀로 저장합니다. 다음 예시 워크플로에서 비밀 이름은 SECRET_STORE_CREDENTIALS입니다. 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.

워크플로

참고 항목

이 워크플로는 가상의 명령 store-secretretrieve-secret가 있는 가상의 비밀 저장소 secret-store를 사용합니다. some/secret-store@ 27b31702a0e7fc50959f5ad993c78deac1bdfc29은(는) secret-store 애플리케이션을 설치하고 credentials을(를) 포함하여 instance와(과) 연결하도록 구성하는 가상 작업입니다.

YAML
on: push

jobs:
  secret-generator:
    runs-on: ubuntu-latest
    outputs:
      handle: ${{ steps.generate-secret.outputs.handle }}
    steps:
    - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
      with:
        credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
        instance: ${{ secrets.SECRET_STORE_INSTANCE }}
    - name: generate secret
      id: generate-secret
      shell: bash
      run: |
        GENERATED_SECRET=$((RANDOM))
        echo "::add-mask::$GENERATED_SECRET"
        SECRET_HANDLE=$(secret-store store-secret "$GENERATED_SECRET")
        echo "handle=$SECRET_HANDLE" >> "$GITHUB_OUTPUT"
  secret-consumer:
    runs-on: macos-latest
    needs: secret-generator
    steps:
    - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
      with:
        credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
        instance: ${{ secrets.SECRET_STORE_INSTANCE }}
    - name: use secret
      shell: bash
      run: |
        SECRET_HANDLE="${{ needs.secret-generator.outputs.handle }}"
        RETRIEVED_SECRET=$(secret-store retrieve-secret "$SECRET_HANDLE")
        echo "::add-mask::$RETRIEVED_SECRET"
        echo "We retrieved our masked secret: $RETRIEVED_SECRET"
YAML
on: push

jobs:
  secret-generator:
    runs-on: ubuntu-latest
    steps:
    - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
      with:
        credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
        instance: ${{ secrets.SECRET_STORE_INSTANCE }}
    - name: generate secret
      shell: pwsh
      run: |
        Set-Variable -Name Generated_Secret -Value (Get-Random)
        Write-Output "::add-mask::$Generated_Secret"
        Set-Variable -Name Secret_Handle -Value (Store-Secret "$Generated_Secret")
        "handle=$Secret_Handle" >> $env:GITHUB_OUTPUT
  secret-consumer:
    runs-on: macos-latest
    needs: secret-generator
    steps:
    - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
      with:
        credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
        instance: ${{ secrets.SECRET_STORE_INSTANCE }}
    - name: use secret
      shell: pwsh
      run: |
        Set-Variable -Name Secret_Handle -Value "${{ needs.secret-generator.outputs.handle }}"
        Set-Variable -Name Retrieved_Secret -Value (Retrieve-Secret "$Secret_Handle")
        echo "::add-mask::$Retrieved_Secret"
        echo "We retrieved our masked secret: $Retrieved_Secret"

워크플로 명령 중지 및 시작

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

Text
::stop-commands::{endtoken}

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

경고

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

Text
::{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.'

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

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

여러 pre: 또는 post: 작업이 여러 개 있는 경우 저장된 값은 GITHUB_STATE에 기록된 작업에서만 액세스할 수 있습니다. post: 작업에 대한 자세한 내용은 GitHub Actions에 대한 메타데이터 구문을(를) 참조하세요.

GITHUB_STATE 파일은 작업 내에서만 사용할 수 있습니다. 저장된 값은 접두사가 STATE_인 환경 값으로 저장됩니다.

이 예시에서는 JavaScript를 사용하여 GITHUB_STATE 파일에 기록합니다. 결과 환경 변수의 이름은 STATE_processID이며 값은 12345이(가) 됩니다.

JavaScript
import * as fs from 'fs'
import * as os from 'os'

fs.appendFileSync(process.env.GITHUB_STATE, `processID=12345${os.EOL}`, {
  encoding: 'utf8'
})

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

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

환경 파일

워크플로를 실행하는 동안 실행기는 특정 작업을 수행하는 데 사용할 수 있는 임시 파일을 생성합니다. 이 파일의 경로는 GitHub의 기본 환경 변수를 사용하여 액세스하고 편집할 수 있습니다. 변수에 정보 저장을(를) 참조하세요. 파일에 코드를 작성할 때에는 명령의 적절한 처리를 보장하기 위해 UTF-8 인코딩을 사용해야 합니다. 동일한 파일에 여러 명령을 줄 바꿈으로 구분하여 작성할 수 있습니다. GitHub 작업에서 환경 변수를 사용하려면 특정 GitHub Actions 명령을 사용하여 .env 파일을 만들거나 수정 합니다.

방법은 다음과 같습니다.

YAML
name: Example Workflow for Environment Files

on: push

jobs:
  set_and_use_env_vars:
    runs-on: ubuntu-latest
    steps:
      - name: Set environment variable
        run: echo "MY_ENV_VAR=myValue" >> $GITHUB_ENV

      - name: Use environment variable
        run: |
          echo "The value of MY_ENV_VAR is $MY_ENV_VAR"

또 다른 예는 빌드 타임스탬프, 커밋 SHA 또는 아티팩트 이름과 같은 메타데이터를 저장하는 데 사용하는 것입니다.

YAML
steps:
  - name: Store build timestamp
    run: echo "BUILD_TIME=$(date +'%T')" >> $GITHUB_ENV

  - name: Deploy using stored timestamp
    run: echo "Deploying at $BUILD_TIME"

참고 항목

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

환경 변수 설정

참고 항목

문제를 방지하려면 사용 중인 운영 체제 및 셸의 동작과 관계없이 환경 변수를 대/소문자를 구분하는 것이 좋습니다.

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

    PowerShell
    "{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 환경 파일에 작성하여 워크플로 작업의 후속 단계에서 환경 변수를 사용할 수 있도록 할 수 있습니다. 환경 변수를 만들거나 업데이트하는 단계는 새 값에 액세스할 수 없지만 작업의 모든 후속 단계에는 액세스 권한이 있습니다.

GITHUB_*RUNNER_*(으)로 명명된 기본 환경 변수의 값에 덮어쓸 수 없습니다. 현재 CI 변수 값을 덮어쓸 수 있습니다. 그러나, 이것이 항상 가능할 것이라고 보장되지는 않습니다. 기본 환경 변수에 대한 자세한 내용은 변수에 정보 저장을(를) 참조하세요.

참고 항목

보안 제한으로 인해 GITHUB_ENVNODE_OPTIONS 환경 변수를 설정하는 데 사용할 수 없습니다.

환경 변수를 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: |
      printf '%s\n' "$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'

다중 선 문자열

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

Text
{name}<<{delimiter}
{value}
{delimiter}

경고

사용 중인 구분 기호가 값 내의 자체 줄에서 발생하지 않도록 합니다. 값이 완전히 임의인 경우 이 형식을 사용하면 안 됩니다. 대신 파일에 값을 씁니다.

여러 줄 문자열의 예시

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

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

출력 매개 변수 설정

단계의 출력 매개 변수를 설정합니다. 나중에 출력 값을 검색하려면 단계에는 정의된 id이(가) 필요합니다. 여러 줄 문자열 섹션에서 사용되는 것과 동일한 기술로 여러 줄 출력 값을 설정하여 여러 줄 환경 변수를 정의할 수 있습니다.

Bash
echo "{name}={value}" >> "$GITHUB_OUTPUT"
PowerShell
"{name}=value" >> $env:GITHUB_OUTPUT

출력 매개 변수 설정하기 예시

이 예시에서는 SELECTED_COLOR 출력 매개 변수를 설정하고 나중에 검색하는 방법을 보여 줍니다.

YAML
      - name: Set color
        id: color-selector
        run: echo "SELECTED_COLOR=green" >> "$GITHUB_OUTPUT"
      - name: Get color
        env:
          SELECTED_COLOR: ${{ steps.color-selector.outputs.SELECTED_COLOR }}
        run: echo "The selected color is $SELECTED_COLOR"

이 예시에서는 SELECTED_COLOR 출력 매개 변수를 설정하고 나중에 검색하는 방법을 보여 줍니다.

YAML
      - name: Set color
        id: color-selector
        run: |
            "SELECTED_COLOR=green" >> $env:GITHUB_OUTPUT
      - name: Get color
        env:
          SELECTED_COLOR: ${{ steps.color-selector.outputs.SELECTED_COLOR }}
        run: Write-Output "The selected color is $env:SELECTED_COLOR"

작업 요약 추가

Bash
echo "{markdown content}" >> $GITHUB_STEP_SUMMARY
PowerShell
"{markdown content}" >> $env:GITHUB_STEP_SUMMARY

워크플로 실행의 요약 페이지에 표시되도록 각 작업에 대해 몇 가지 사용자 지정 Markdown을 설정할 수 있습니다. 작업 요약을 사용하여 테스트 결과 요약과 같은 고유한 콘텐츠를 표시하고 그룹화할 수 있으므로 워크플로 실행 결과를 보는 사용자가 로그로 이동하여 실행과 관련된 중요한 정보(예: 실패)를 확인할 필요가 없습니다.

작업 요약은 GitHub Flavored Markdown을 지원하며, 단계별 Markdown 콘텐츠를 GITHUB_STEP_SUMMARY 환경 파일에 추가할 수 있습니다. GITHUB_STEP_SUMMARY는 작업의 각 단계에 대해 고유합니다. GITHUB_STEP_SUMMARY가 참조하는 단계별 파일에 대한 자세한 내용은 환경 파일을 참조하세요.

작업이 완료되면 작업의 모든 단계에 대한 요약이 단일 작업 요약���로 그룹화되고 워크플로 실행 요약 페이지에 표시됩니다. 여러 작업이 요약을 생성하는 경우 작업 요약은 작업 완료 시간을 기준으로 정렬됩니다.

작업 요약 추가하기 예시

Bash
echo "### Hello world! :rocket:" >> $GITHUB_STEP_SUMMARY
PowerShell
"### Hello world! :rocket:" >> $env:GITHUB_STEP_SUMMARY

워크플로 실행의 요약 페이지 스크린샷. "예제 요약" 아래에는 "Hello world!" 그리고 로켓 이모티콘이 있습니다.

여러 줄 Markdown 콘텐츠

여러 줄 Markdown 콘텐츠의 경우 >>를 사용하여 현재 단계에 대한 콘텐츠를 지속적으로 추가할 수 있습니다. 추가 작업마다 줄 바꿈 문자가 자동으로 추가됩니다.

여러 줄 Markdown 콘텐츠의 예시

- name: Generate list using Markdown
  run: |
    echo "This is the lead in sentence for the list" >> $GITHUB_STEP_SUMMARY
    echo "" >> $GITHUB_STEP_SUMMARY # this is a blank line
    echo "- Lets add a bullet point" >> $GITHUB_STEP_SUMMARY
    echo "- Lets add a second bullet point" >> $GITHUB_STEP_SUMMARY
    echo "- How about a third one?" >> $GITHUB_STEP_SUMMARY
- name: Generate list using Markdown
  run: |
    "This is the lead in sentence for the list" >> $env:GITHUB_STEP_SUMMARY
    "" >> $env:GITHUB_STEP_SUMMARY # this is a blank line
    "- Lets add a bullet point" >> $env:GITHUB_STEP_SUMMARY
    "- Lets add a second bullet point" >> $env:GITHUB_STEP_SUMMARY
    "- How about a third one?" >> $env:GITHUB_STEP_SUMMARY

작업 요약 덮어쓰기

현재 단계의 모든 콘텐츠를 지우려면 >을(를) 사용하여 Bash에서 이전에 추가한 콘텐츠를 덮어쓰거나 PowerShell의 -Append을(를) 삭제할 수 있습니다.

작업 요약 덮어쓰기 예시

- name: Overwrite Markdown
  run: |
    echo "Adding some Markdown content" >> $GITHUB_STEP_SUMMARY
    echo "There was an error, we need to clear the previous Markdown with some new content." > $GITHUB_STEP_SUMMARY
- name: Overwrite Markdown
  run: |
    "Adding some Markdown content" >> $env:GITHUB_STEP_SUMMARY
    "There was an error, we need to clear the previous Markdown with some new content." >> $env:GITHUB_STEP_SUMMARY

작업 요약 제거

현재 단계에 대한 요약을 완전히 제거하려면 GITHUB_STEP_SUMMARY가 참조하는 파일을 삭제할 수 있습니다.

작업 요약 제거하기 예시

- name: Delete all summary content
  run: |
    echo "Adding Markdown content that we want to remove before the step ends" >> $GITHUB_STEP_SUMMARY
    rm $GITHUB_STEP_SUMMARY
- name: Delete all summary content
  run: |
    "Adding Markdown content that we want to remove before the step ends" >> $env:GITHUB_STEP_SUMMARY
    Remove-Item $env:GITHUB_STEP_SUMMARY

단계가 완료되면 작업 요약이 업로드되고 후속 단계에서 이전에 업로드한 Markdown 콘텐츠를 수정할 수 없습니다. 요약에서는 실수로 추가되었을 수 있는 모든 비밀이 자동으로 마스킹됩니다. 작업 요약에 삭제해야 하는 중요한 정보가 포함된 경우 전체 워크플로 실행을 삭제하여 모든 작업 요약을 제거할 수 있습니다. 자세한 내용은 워크플로 실행 삭제을(를) 참조하세요.

단계 격리 및 한도

작업 요약은 단계 간에 격리되며 각 단계는 최대 1MiB 크기로 제한됩니다. 단일 단계의 잠재적으로 잘못된 형식의 Markdown이 후속 단계에 대한 Markdown 렌더링을 중단시킬 수 없도록 단계 간에 격리가 적용됩니다. 한 단계에 1MiB 이상의 콘텐츠가 추가되면 해당 단계의 업로드가 실패하고 오류 주석이 생성됩니다. 작업 요약 업로드 오류는 단계 또는 작업의 전체 ��태에 영향을 미치지 않습니다. 작업별로 단계의 작업 요약이 최대 20개 표시됩니다.

시스템 경로 추가

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

시스템 경로 추가하기 예시

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

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

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

PowerShell
"$env:HOMEPATH/.local/bin" | Out-File -FilePath "$env:GITHUB_PATH" -Append