워크플로 명령 정보
작업은 실행기 컴퓨터와 통신하여 환경 변수를 설정하고, 다른 작업에서 사용하는 값을 출력하고, 출력 로그에 디버그 메시지를 추가하는 등 다양한 작업을 수행할 수 있습니다.
대부분의 워크플로 명령은 특정 형식으로 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