참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.
워크플로 명령 정보
작업은 실행기 컴퓨터와 통신하여 환경 변수를 설정하고, 다른 작업에서 사용하는 값을 출력하고, 출력 로그에 디버그 메시지를 추가하는 등 다양한 작업을 수행할 수 있습니다.
대부분의 워크플로 명령은 특정 형식으로 echo
명령을 사용하는 반면 파일에 작성하여 호출할 수 있는 명령도 있습니다. 자세한 내용은 “환경 파일”을 참조하세요.
워크플로 명령의 예시
echo "::workflow-command parameter1={data},parameter2={data}::{command value}"
echo "::workflow-command parameter1={data},parameter2={data}::{command value}"
Write-Output "::workflow-command parameter1={data},parameter2={data}::{command value}"
Write-Output "::workflow-command parameter1={data},parameter2={data}::{command value}"
참고: 워크플로 명령 및 매개 변수 이름은 대/소문자를 구분하지 않습니다.
경고: 명령 프롬프트를 사용하는 경우 워크플로 명령을 사용할 때 큰따옴표("
)를 생략합니다.
워크플로 명령을 사용하여 도구 키트 함수에 액세스
작업/도구 키트에는 워크플로 명령으로 실행할 수 있는 여러 함수가 포함되어 있습니다. ::
구문을 사용하여 YAML 파일 내에서 워크플로 명령을 실행합니다. 그러면 해당 명령이 stdout
을 통해 실행기로 전송됩니다.
예를 들어 코드를 사용하는 대신 아래와 같이 오류 주석을 만들 수 있습니다.
core.error('Missing semicolon', {file: 'app.js', startLine: 1})
core.error('Missing semicolon', {file: 'app.js', startLine: 1})
예: 오류에 대한 주석 만들기
워크플로의 error
명령을 사용하여 동일한 오류 주석을 만들 수 있습니다.
- name: Create annotation for build error run: echo "::error file=app.js,line=1::Missing semicolon"
- name: Create annotation for build error
run: echo "::error file=app.js,line=1::Missing semicolon"
- name: Create annotation for build error run: Write-Output "::error file=app.js,line=1::Missing semicolon"
- name: Create annotation for build error
run: Write-Output "::error file=app.js,line=1::Missing semicolon"
다음 표에서는 워크플로 내에서 사용할 수 있는 도구 키트 함수를 보여 줍니다.
도구 키트 함수 | 동등한 워크플로 명령 |
---|---|
core.addPath | GITHUB_PATH 환경 파일을 사용하여 액세스할 수 있음 |
core.debug | debug |
core.notice | notice |
core.error | error |
core.endGroup | endgroup |
core.exportVariable | GITHUB_ENV 환경 파일을 사용하여 액세스할 수 있음 |
core.getInput | INPUT_{NAME} 환경 변수를 사용하여 액세스할 수 있음 |
core.getState | STATE_{NAME} 환경 변수를 사용하여 액세스할 수 있음 |
core.isDebug | RUNNER_DEBUG 환경 변수를 사용하여 액세스할 수 있음 |
core.summary | GITHUB_STEP_SUMMARY 환경 파일을 사용하여 액세스할 수 있음 |
core.saveState | GITHUB_STATE 환경 파일을 사용하여 액세스할 수 있음 |
core.setCommandEcho | echo |
core.setFailed | ::error 및 exit 1 에 대한 바로 가기로 사용 |
core.setOutput | GITHUB_OUTPUT 환경 파일을 사용하여 액세스할 수 있음 |
core.setSecret | add-mask |
core.startGroup | group |
core.warning | warning |
디버그 메시지 설정
디버그 메시지를 로그에 출력합니다. 로그에서 이 명령으로 설정된 디버그 메시지를 보려면 이름이 ACTIONS_STEP_DEBUG
이며 값이true
인 비밀을 만들어야 합니다. 자세한 내용은 "디버그 로깅 사용"을(를) 참조하세요.
::debug::{message}
::debug::{message}
예제: 디버그 메시지 설정
echo "::debug::Set the Octocat variable"
echo "::debug::Set the Octocat variable"
Write-Output "::debug::Set the Octocat variable"
Write-Output "::debug::Set the Octocat variable"
알림 메시지 설정
알림 메시지를 만들고 메시지를 로그에 출력합니다. 이 메시지는 리포지토리의 특정 파일과 메시지를 연결할 수 있는 주석을 만듭니다. 필요에 따라 메시지가 파일 내의 위치를 지정할 수 있습니다.
::notice file={name},line={line},endLine={endLine},title={title}::{message}
::notice file={name},line={line},endLine={endLine},title={title}::{message}
매개 변수 | 값 | Required | 기본값 |
---|---|---|---|
title | 사용자 지정 제목 | 아니요 | None |
file | Filename | 아니요 | .github |
col | 열 번호, 1부터 시작 | 아니요 | None |
endColumn | 마지막 열 번호 | 아니요 | None |
line | 행 번호, 1부터 시작 | 아니요 | 1 |
endLine | 마지막 줄 번호 | 아니요 | 1 |
예제: 알림 메시지 설정
echo "::notice file=app.js,line=1,col=5,endColumn=7::Missing semicolon"
echo "::notice file=app.js,line=1,col=5,endColumn=7::Missing semicolon"
Write-Output "::notice file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Write-Output "::notice file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
경고 메시지 설정
경고 메시지를 만들고 메시지를 로그에 출력합니다. 이 메시지는 리포지토리의 특정 파일과 메시지를 연결할 수 있는 주석을 만듭니다. 필요에 따라 메시지가 파일 내의 위치를 지정할 수 있습니다.
::warning file={name},line={line},endLine={endLine},title={title}::{message}
::warning file={name},line={line},endLine={endLine},title={title}::{message}
매개 변수 | 값 | Required | 기본값 |
---|---|---|---|
title | 사용자 지정 제목 | 아니요 | None |
file | Filename | 아니요 | .github |
col | 열 번호, 1부터 시작 | 아니요 | None |
endColumn | 마지막 열 번호 | 아니요 | None |
line | 행 번호, 1부터 시작 | 아니요 | 1 |
endLine | 마지막 줄 번호 | 아니요 | 1 |
예제: 경고 메시지 설정
echo "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
echo "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Write-Output "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Write-Output "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
오류 메시지 설정
오류 메시지를 만들고 메시지를 로그에 출력합니다. 이 메시지는 리포지토리의 특정 파일과 메시지를 연결할 수 있는 주석을 만듭니다. 필요에 따라 메시지가 파일 내의 위치를 지정할 수 있습니다.
::error file={name},line={line},endLine={endLine},title={title}::{message}
::error file={name},line={line},endLine={endLine},title={title}::{message}
매개 변수 | 값 | Required | 기본값 |
---|---|---|---|
title | 사용자 지정 제목 | 아니요 | None |
file | Filename | 아니요 | .github |
col | 열 번호, 1부터 시작 | 아니요 | None |
endColumn | 마지막 열 번호 | 아니요 | None |
line | 행 번호, 1부터 시작 | 아니요 | 1 |
endLine | 마지막 줄 번호 | 아니요 | 1 |
예제: 오류 메시지 설정
echo "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
echo "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Write-Output "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Write-Output "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
로그 줄 그룹화
로그에 확장 가능한 그룹을 만듭니다. 그룹을 만들려면 group
명령을 사용하고 title
을 지정합니다. group
명령과 endgroup
명령 간 로그에 인쇄하는 모든 항목은 로그의 확장 가능한 항목 내에서 중첩됩니다.
::group::{title} ::endgroup::
::group::{title}
::endgroup::
예제: 로그 선 그룹화
jobs: bash-example: runs-on: ubuntu-latest steps: - name: Group of log lines run: | echo "::group::My title" echo "Inside group" echo "::endgroup::"
jobs:
bash-example:
runs-on: ubuntu-latest
steps:
- name: Group of log lines
run: |
echo "::group::My title"
echo "Inside group"
echo "::endgroup::"
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::"
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::"
로그에서 값 마스킹
::add-mask::{value}
::add-mask::{value}
값을 마스킹하면 문자열 또는 변수가 로그에 출력되지 않습니다. 마스킹되어 공백으로 구분된 각 단어는 *
문자로 대체됩니다. 마스크의 value
에 환경 변수 또는 문자열을 사용할 수 있습니다. 값을 마스킹하면 비밀로 처리되고 실행기에서 편집됩니다. 예를 들어 값을 마스킹한 후에는 해당 값을 출력으로 설정할 수 없습니다.
예제: 문자열 마스킹
로그에서 "Mona The Octocat"
을 출력하면 "***"
가 표시됩니다.
echo "::add-mask::Mona The Octocat"
echo "::add-mask::Mona The Octocat"
Write-Output "::add-mask::Mona The Octocat"
Write-Output "::add-mask::Mona The Octocat"
경고: 비밀을 빌드 로그에 출력하거나 다른 워크플로 명령에서 사용하기 전에 ‘add-mask’에 등록해야 합니다.
예제: 환경 변수 마스킹
로그에 MY_NAME
변수 또는 "Mona The Octocat"
값을 출력할 때 "Mona The Octocat"
대신 "***"
가 표시됩니다.
jobs: bash-example: runs-on: ubuntu-latest env: MY_NAME: "Mona The Octocat" steps: - name: bash-version run: echo "::add-mask::$MY_NAME"
jobs:
bash-example:
runs-on: ubuntu-latest
env:
MY_NAME: "Mona The Octocat"
steps:
- name: bash-version
run: echo "::add-mask::$MY_NAME"
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"
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"
예: 단일 작업 내에서 생성된 출력 마스킹
한 작업에서 다른 작업으로 비밀을 전달할 필요가 없는 경우 다음을 수행할 수 있습니다.
- 비밀을 생성합니다(출력하지 않고).
add-mask
(으)로 마스킹합니다.- 작업 내의 다른 단계에서 비밀을 사용할 수 있도록 하는 데
GITHUB_OUTPUT
을(를) 사용합니다.
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 }}"
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 }}"
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 }}"
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 }}"
예: 작업 또는 워크플로 간에 비밀 마스킹 및 전달
작업 또는 워크플로 간에 마스킹된 비밀을 전달하려면 저장소에 비밀을 저장한 다음 후속 작업 또는 워크플로에서 검색해야 합니다.
설정
- 워크플로 중에 생성할 비밀을 저장하도록 비밀 저장소를 설정합니다. 예: Vault.
- 해당 비밀 저장소를 읽고 쓰기 위한 키를 생성합니다. 키를 리포지토리 비밀로 저장합니다. 다음 예시 워크플로에서 비밀 이름은
SECRET_STORE_CREDENTIALS
입니다. 자세한 내용은 "GitHub Actions에서 비밀 사용"을(를) 참조하세요.
워크플로
참고: 이 워크플로는 가상의 명령 store-secret
및 retrieve-secret
이(가) 있는 가상의 비밀 저장소 secret-store
을(를) 사용합니다. some/secret-store@ 27b31702a0e7fc50959f5ad993c78deac1bdfc29
은(는) secret-store
애플리케이션을 설치하고 credentials
을(를) 포함하여 instance
와(과) 연결하도록 구성하는 가상 작업입니다.
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"
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"
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"
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"
워크플로 명령 중지 및 시작
워크플로 명령 처리를 중지합니다. 이 특수 명령을 사용하면 워크플로 명령을 실수로 실행하지 않고 모든 항목을 기록할 수 있습니다. 예를 들어 주석이 있는 전체 스크립트를 출력하기 위해 로깅을 중지할 수 있습니다.
::stop-commands::{endtoken}
::stop-commands::{endtoken}
워크플로 명령의 처리를 중지하려면 고유한 토큰을 stop-commands
에 전달합니다. 워크플로 명령 처리를 계속하려면 워크플로 명령을 중지하는 데 사용한 것과 동일한 토큰을 전달합니다.
경고: 사용 중인 토큰이 임의로 생성되고 각 실행에 대해 고유해야 합니다.
::{endtoken}::
::{endtoken}::
예제: 워크플로 명령 중지 및 시작
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.'
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.'
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.'
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
이(가) 됩니다.
import * as fs from 'fs' import * as os from 'os' fs.appendFileSync(process.env.GITHUB_STATE, `processID=12345${os.EOL}`, { encoding: 'utf8' })
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
환경 변수에 할당된 값을 표시합니다.
console.log("The running PID from the main action is: " + process.env.STATE_processID);
console.log("The running PID from the main action is: " + process.env.STATE_processID);
환경 파일
워크플로를 실행하는 동안 실행기는 특정 작업을 수행하는 데 사용할 수 있는 임시 파일을 생성합니다. 이 파일의 경로는 GitHub의 기본 환경 변수를 사용하여 액세스하고 편집할 수 있습니다. "변수에 정보 저장" 항목을 참조하세요. 파일에 코드를 작성할 때에는 명령의 적절한 처리를 보장하기 위해 UTF-8 인코딩을 사용해야 합니다. 동일한 파일에 여러 명령을 줄 바꿈으로 구분하여 작성할 수 있습니다.
GitHub 작업에서 환경 변수를 사용하려면 특정 GitHub Actions 명령을 사용하여 .env
파일을 만들거나 수정 합니다.
방법은 다음과 같습니다.
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"
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 또는 아티팩트 이름과 같은 메타데이터를 저장하는 데 사용하는 것입니다.
steps: - name: Store build timestamp run: echo "BUILD_TIME=$(date +'%T')" >> $GITHUB_ENV - name: Deploy using stored timestamp run: echo "Deploying at $BUILD_TIME"
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 인코딩을 지정해야 합니다. 예시:
jobs: legacy-powershell-example: runs-on: windows-latest steps: - shell: powershell run: | "mypath" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
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을 사용합니다. 예시:
jobs: powershell-core-example: runs-on: windows-latest steps: - shell: pwsh run: | "mypath" >> $env:GITHUB_PATH
jobs:
powershell-core-example:
runs-on: windows-latest
steps:
- shell: pwsh
run: |
"mypath" >> $env:GITHUB_PATH
환경 변수 설정
참고: 문제를 방지하려면 사용 중인 운영 체제 및 셸의 동작에 관계없이 환경 변수를 대/소문자를 구분하는 것이 좋습니다.
echo "{environment_variable_name}={value}" >> "$GITHUB_ENV"
echo "{environment_variable_name}={value}" >> "$GITHUB_ENV"
-
PowerShell 버전 6 이상 사용:
PowerShell "{environment_variable_name}={value}" >> $env:GITHUB_ENV
"{environment_variable_name}={value}" >> $env:GITHUB_ENV
-
PowerShell 버전 5.1 이하 사용:
PowerShell "{environment_variable_name}={value}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
"{environment_variable_name}={value}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
환경 변수를 정의하거나 업데이트하고 이를 GITHUB_ENV
환경 파일에 작성하여 워크플로 작업의 후속 단계에서 환경 변수를 사용할 수 있도록 할 수 있습니다. 환경 변수를 만들거나 업데이트하는 단계는 새 값에 액세스할 수 없지만 작업의 모든 후속 단계에는 액세스 권한이 있습니다.
GITHUB_*
및 RUNNER_*
(으)로 명명된 기본 환경 변수의 값에 덮어쓸 수 없습니다. 현재 변수 값을 CI
(으)로 덮어쓸 수 있습니다. 그러나, 이것이 항상 가능할 것이라고 보장되지는 않습니다. 기본 환경 변수에 대한 자세한 내용은 "변수에 정보 저장"을 참조하세요.
참고: 보안 제한으로 인해 GITHUB_ENV
은(는) NODE_OPTIONS
환경 변수를 설정하는 데 사용할 수 없습니다.
환경 변수를 GITHUB_ENV
에 쓰는 예시
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'
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'
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'
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'
다중 선 문자열
다중 선 문자열의 경우 다음 구문에 구분 기호를 사용할 수 있습니다.
{name}<<{delimiter} {value} {delimiter}
{name}<<{delimiter}
{value}
{delimiter}
경고: 사용 중인 구분 기호가 값 내의 자체 줄에서 발생하지 않도록 합니다. 값이 완전히 임의인 경우 이 형식을 사용하면 안 됩니다. 대신 파일에 값을 씁니다.
여러 줄 문자열의 예시
이 예시에서는 EOF
을(를) 구분 기호로 사용하고 JSON_RESPONSE
환경 변수를 curl
응답의 값으로 설정합니다.
steps: - name: Set the value in bash id: step_one run: | { echo 'JSON_RESPONSE<<EOF' curl https://example.com echo EOF } >> "$GITHUB_ENV"
steps:
- name: Set the value in bash
id: step_one
run: |
{
echo 'JSON_RESPONSE<<EOF'
curl https://example.com
echo EOF
} >> "$GITHUB_ENV"
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
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
이(가) 필요합니다. "여러 줄 문자열" 섹션에서 사용되는 것과 동일한 기술로 여러 줄 출력 값을 설정하여 여러 줄 환경 변수를 정의할 수 있습니다.
echo "{name}={value}" >> "$GITHUB_OUTPUT"
echo "{name}={value}" >> "$GITHUB_OUTPUT"
"{name}=value" >> $env:GITHUB_OUTPUT
"{name}=value" >> $env:GITHUB_OUTPUT
출력 매개 변수 설정하기 예시
이 예시에서는 SELECTED_COLOR
출력 매개 변수를 설정하고 나중에 검색하는 방법을 보여 줍니다.
- 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"
- 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
출력 매개 변수를 설정하고 나중에 검색하는 방법을 보여 줍니다.
- 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"
- 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"
작업 요약 추가
echo "{markdown content}" >> $GITHUB_STEP_SUMMARY
echo "{markdown content}" >> $GITHUB_STEP_SUMMARY
"{markdown content}" >> $env:GITHUB_STEP_SUMMARY
"{markdown content}" >> $env:GITHUB_STEP_SUMMARY
워크플로 실행의 요약 페이지에 표시되도록 각 작업에 대해 몇 가지 사용자 지정 Markdown을 설정할 수 있습니다. 작업 요약을 사용하여 테스트 결과 요약과 같은 고유한 콘텐츠를 표시하고 그룹화할 수 있으므로 워크플로 실행 결과를 보는 사용자가 로그로 이동하여 실행과 관련된 중요한 정보(예: 실패)를 확인할 필요가 없습니다.
작업 요약은 GitHub Flavored Markdown을 지원하며, 단계별 Markdown 콘텐츠를 GITHUB_STEP_SUMMARY
환경 파일에 추가할 수 있습니다. GITHUB_STEP_SUMMARY
는 작업의 각 단계에 대해 고유합니다. GITHUB_STEP_SUMMARY
가 참조하는 단계별 파일에 대한 자세한 내용은 "환경 파일"을 참조하세요.
작업이 완료되면 작업의 모든 단계에 대한 요약이 단일 작업 요약으로 그룹화되고 워크플로 실행 요약 페이지에 표시됩니다. 여러 작업이 요약을 생성하는 경우 작업 요약은 작업 완료 시간을 기준으로 정렬됩니다.
작업 요약 추가하기 예시
echo "### Hello world! :rocket:" >> $GITHUB_STEP_SUMMARY
echo "### Hello world! :rocket:" >> $GITHUB_STEP_SUMMARY
"### Hello world! :rocket:" >> $env:GITHUB_STEP_SUMMARY
"### Hello world! :rocket:" >> $env:GITHUB_STEP_SUMMARY
여러 줄 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
에 추가하는 방법을 보여 줍니다.
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
이 예제에서는 사용자 $env:HOMEPATH/.local/bin
디렉터리를 PATH
에 추가하는 방법을 보여 줍니다.
"$env:HOMEPATH/.local/bin" | Out-File -FilePath "$env:GITHUB_PATH" -Append
"$env:HOMEPATH/.local/bin" | Out-File -FilePath "$env:GITHUB_PATH" -Append