Skip to main content

변수에 정보 저장

GitHub은(는) 각 GitHub Actions 워크플로 실행에 대한 기본 변수를 설정합니다. 단일 워크플로 또는 여러 워크플로에서 사용할 사용자 지정 변수를 설정할 수도 있습니다.

단일 워크플로에 대한 환경 변수 정의

단일 워크플로에 대한 사용자 지정 환경 변수를 정의하려면 워크플로 파일에서 env 키를 사용하여 정의할 수 있습니다. 이 메서드로 설정한 사용자 지정 환경 변수의 범위는 정의된 요소로 제한됩니다. 다음과 같이 범위가 지정된 변수를 정의할 수 있습니다.

  • 전체 워크플로(워크플로 파일의 최상위 수준에서 env를 사용하여)
  • 워크플로 내 작업의 컨텐츠(jobs.<job_id>.env를 사용하여)
  • 작업 내의 특정 단계(jobs.<job_id>.steps[*].env를 사용하여)
YAML
name: Greeting on variable day

on:
  workflow_dispatch

env:
  DAY_OF_WEEK: Monday

jobs:
  greeting_job:
    runs-on: ubuntu-latest
    env:
      Greeting: Hello
    steps:
      - name: "Say Hello Mona it's Monday"
        run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
        env:
          First_Name: Mona

실행기 환경 변수를 사용하거나 컨텍스트를 사용하여 env 변수 값에 액세스할 수 있습니다. 위의 예시에서는 echo 명령, 즉 $DAY_OF_WEEK, $Greeting$First_Name에 실행기 환경 변수로 사용되는 세 가지 사용자 지정 변수를 보여줍니다. 해당 변수의 값은 각각 워크플로, 작업 및 단계 수준에서 설정되고 범위가 지정됩니다. 이러한 변수의 보간은 실행기에서 발생합니다.

워크플로 단계 run의 명령 또는 참조된 작업은 실행기에서 사용 중인 셸에서 처리됩니다. 워크플로의 다른 부분에 있는 명령은 GitHub Actions에 의해 처리되며 실행기로 전송되지 않습니다. 실행기 환경 변수 또는 컨텍스트를 run 단계에서 사용할 수 있지만, 실행기로 전송되지 않은 워크플로 부분에서는 컨텍스트를 사용하여 변수 값에 액세스해야 합니다. 자세한 내용은 컨텍스트를 사용하여 변수 값에 액세스를 참조하세요.

워크플로 작업이 실행기 컴퓨터로 전송된 후 실행기 환경 변수 보간이 수행되므로 실행기에서 사용되는 셸에 적절한 구문을 사용해야 합니다. 이 예시에서 워크플로는 ubuntu-latest를 지정합니다. 기본적으로 Linux 실행기는 bash 셸을 사용하므로 $NAME 구문을 사용해야 합니다. 기본적으로 Windows 실행기는 PowerShell을 사용하므로 $env:NAME 구문을 사용합니다. 셸에 대한 자세한 내용은 GitHub Actions에 대한 워크플로 구문을(를) 참조하세요.

여러 워크플로에 대한 구성 변수 정의하기

여러 워크플로에서 사용할 구성 변수를 만들고 조직, 리포지토리 또는 환경 수준에서 정의할 수있습니다.

예를 들어, 구성 변수를 사용하여 조직 수준에서 도구를 빌드하기 위해 전달된 매개 변수의 기본값을 설정한 다음 리포지토리 소유자가 사례별로 이러한 매개 변수를 재정의하도록 허용할 수 있습니다.

구성 변수를 정의하면 vars 컨텍스트에서 자동으로 구성 변수를 사용할 수 있습니다. 자세한 내용은 vars 컨텍스트를 사용하여 구성 변수 값에 액세스하기를 참조하세요.

리포지토리에 대한 구성 변수 만들기

리포지토리 소유자만 개인 계정 리포지토리의 GitHub에 비밀 또는 변수를 만들 수 있습니다. 조직 리포지토리에 대한 GitHub에서 비밀 또는 변수를 만들려면 admin 액세스 권한이 있어야 합니다. 마지막으로, 협력자 액세스 권한이 있는 사용자만 REST API를 통해 개인 계정 리포지토리 또는 조직 리포지토리에 대한 비밀 또는 변수를 만들 수 있습니다.

  1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.

  2. 리포지토리 이름 아래에서 설정을 클릭합니다. "설정" 탭이 표시되지 않으면 드롭다운 메뉴를 선택한 다음 설정을 클릭합니다.

    탭을 보여 주는 리포지토리 헤더의 스크린샷. "설정" 탭이 진한 주황색 윤곽선으로 강조 표시됩니다.

  3. 사이드바의 "보안" 섹션에서 비밀 및 변수를 선택하고 작업을 클릭합니다.

  4. 변수 탭을 클릭합니다.

    "작업 비밀 및 변수" 페이지의 스크린샷. "변수" 탭이 진한 주황색 윤곽선으로 표시됩니다.

  5. 새 리포지토리 변수를 클릭합니다.

  6. 이름 필드에 변수의 이름을 입력합니다.

  7. 필드에 변수 값을 입력합니다.

  8. 변수 추가를 클릭합니다.

환경에 대한 구성 변수 만들기

개인 계정 리포지토리에서 환경에 대한 비밀 또는 변수를 만들려면 리포지토리 소유자여야 합니다. 조직 리포지토리에서 환경에 대한 비밀 또는 변수를 만들려면 admin 액세스 권한이 있어야 합니다. 환경에 대한 자세한 내용은 배포 환경 관리을(를) 참조하세요.

  1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.

  2. 리포지토리 이름 아래에서 설정을 클릭합니다. "설정" 탭이 표시되지 않으면 드롭다운 메뉴를 선택한 다음 설정을 클릭합니다.

    탭을 보여 주는 리포지토리 헤더의 스크린샷. "설정" 탭이 진한 주황색 윤곽선으로 강조 표시됩니다.

  3. 왼쪽 사이드바에서 환경을 클릭합니다.

  4. 변수를 추가할 환경을 클릭합니다.

  5. 환경 변수에서 변수 추가를 클릭합니다.

  6. 이름 필드에 변수의 이름을 입력합니다.

  7. 필드에 변수 값을 입력합니다.

  8. 변수 추가를 클릭합니다.

조직에 대한 구성 변수 만들기

조직에서 비밀 또는 변수를 만들 때, 정책을 사용하여 리포지토리별로 액세스를 제한할 수 있습니다. 예를 들어 모든 리포지토리에 대한 액세스 권한을 부여하거나 프라이빗 리포지토리 또는 지정된 리포지토리 목록에 대해서만 액세스를 제한할 수 있습니다.

조직 소유자 및 "조직 작업 변수 관리" 또는 "조직 작업 비밀 관리" 권한을 가진 사용자는 조직 수준에서 비밀 또는 변수를 만들 수 있습니다.

자세한 내용은 사용자 지정 조직 역할 소개을(를) 참조하세요.

  1. GitHub에서 조직의 기본 페이지로 이동합니다.

  2. 조직 이름에서 설정을 클릭합니다. "설정" 탭이 표시되지 않으면 드롭다운 메뉴를 선택한 다음 설정을 클릭합니다.

    조직 프로필에 있는 여러 탭의 스크린샷. "설정" 탭이 진한 주황색으로 표시됩니다.

  3. 사이드바의 "보안" 섹션에서 비밀 및 변수를 선택하고 작업을 클릭합니다.

  4. 변수 탭을 클릭합니다.

    "작업 비밀 및 변수" 페이지의 스크린샷. "변수" 탭이 진한 주황색 윤곽선으로 표시됩니다.

    참고 항목

    “Actions 비밀과 변수” 페이지에는 사용 권한에 따라 비밀과 변수에 대한 별도 탭이 표시되지 않을 수 있습니다. "조직 Actions 변수 관리" 및 "조직 Actions 비밀 관리" 권한이 있는 조직 소유자 및 사용자에게는 변수비밀 탭이 표시됩니다. 자세한 내용은 사용자 지정 조직 역할 소개을(를) 참조하세요.

  5. 새 조직 변수를 클릭합니다.

  6. 이름 필드에 변수의 이름을 입력합니다.

  7. 필드에 변수 값을 입력합니다.

  8. 리포지토리 액세스 드롭다운 목록에서 액세스 정책을 선택합니다.

  9. 변수 추가를 클릭합니다.

컨텍스트를 사용하여 변수 값에 액세스하기

컨텍스트는 워크플로 실행, 변수, 실행기 환경, 작업 및 단계에 대한 정보에 액세스하는 방법입니다. 자세한 내용은 Contexts reference을(를) 참조하세요. 워크플로에서 다양한 용도로 사용할 수 있는 다른 많은 컨텍스트가 있습니다. 워크플로 내에서 특정 컨텍스트를 사용할 수 있는 위치에 대한 자세한 내용은 Contexts reference을(를) 참조하세요.

env 컨텍스트를 사용하고 환경 변수 값에 액세스하고 vars 컨텍스트를 사용하여 구성 변수 값에 액세스할 수 있습니다.

env 컨텍스트를 사용하여 환경 변수 값에 액세스하기

실행기 환경 변수 외에도 GitHub Actions을(를) 사용하면 컨텍스트로 env 키 값을 설정하고 읽을 수 있습니다. 환경 변수 및 컨텍스트는 워크플로의 여러 지점에서 사용하기 위한 것입니다.

워크플로 또는 참조된 작업의 run 단계는 실행기에서 처리됩니다. 따라서 실행기에서 사용 중인 셸에 대한 적절한 구문(예시: Linux 실행기의 bash 셸에는 $NAME, Windows 실행기의 PowerShell에는 $env:NAME)을 사용하여 여기에서 실행기 환경 변수를 사용할 수 있습니다. 대부분의 경우 ${{ CONTEXT.PROPERTY }} 구문과 함께 컨텍스트를 사용하여 동일한 값에 액세스할 수도 있습니다. 차이점은 작업이 실행기로 전송되기 전에 컨텍스트가 보간되고 문자열로 대체된다는 것입니다.

그러나 GitHub Actions에 의해 처리되고 실행기로 전송되지 않는 워크플로의 일부에서는 실행기 환경 변수를 사용할 수 없습니다. 대신 컨텍스트를 사용해야 합니다. 예를 들어 작업 또는 단계가 실행기로 전송되는지 여부를 결정하는 if 조건이 항상 GitHub Actions에 의해 처리됩니다. 따라서 if 조건문의 컨텍스트를 사용하여 변수의 값에 액세스해야 합니다.

YAML
name: Conditional env variable

on: workflow_dispatch

env:
  DAY_OF_WEEK: Monday

jobs:
  greeting_job:
    runs-on: ubuntu-latest
    env:
      Greeting: Hello
    steps:
      - name: "Say Hello Mona it's Monday"
        if: ${{ env.DAY_OF_WEEK == 'Monday' }}
        run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
        env:
          First_Name: Mona

이전 예시에서는 이렇게 수정하여 if 조건부를 도입했습니다. 워크플로 단계는 이제 DAY_OF_WEEK가 "월요일"로 설정된 경우에만 실행됩니다. env컨텍스트를 사용하여 if 조건문에서 이 값에 액세스합니다. run 명령 내에서 참조되는 변수에는 env 컨텍스트가 필요하지 않습니다. 이는 실행기 환경 변수로 참조되며 실행기에서 작업을 받은 후 보간됩니다. 그러나 컨텍스트를 사용하여 작업을 실행기로 보내기 전에 해당 변수를 보간하도록 선택할 수 있습니다. 결과 출력은 동일합니다.

run: echo "${{ env.Greeting }} ${{ env.First_Name }}. Today is ${{ env.DAY_OF_WEEK }}!"

참고 항목

컨텍스트는 일반적으로 ${{ context.property }}와 같이 달러 기호와 중괄호를 사용하여 표시됩니다. if 조건에서 ${{}}은(는) 선택 사항이지만, 사용하는 경우 위와 같이 전체 비교 문을 묶어야 합니다.

경고

워크플로와 작업을 만들 때는 코드가 공격자의 신뢰할 수 없는 입력을 실행할 수 있는지 항상 고려해야 합니다. 특정 컨텍스트는 공격자가 자신의 악성 콘텐츠를 삽입할 수 있으므로 신뢰할 수 없는 입력으로 취급해야 합니다. 자세한 내용은 GitHub Actions에 대한 보안 강화을(를) 참조하세요.

vars 컨텍스트를 사용하여 구성 변수 값에 액세스하기

vars 컨텍스트를 사용하여 워크플로 전체에서 구성 변수에 액세스할 수 있습니다. 자세한 내용은 Contexts reference을(를) 참조하세요.

구성 변수가 설정되지 않은 경우, 변수를 참조하는 컨텍스트는 빈 문자열을 반환합니다.

다음 예제는 워크플로 전체에서 vars 컨텍스트와 함께 구성 변수를 사용하는 방법을 나타냅니다. 다음 각각의 구성 변수는 리포지토리, 조직 또는 환경 수준에서 정의되었습니다.

YAML
on:
  workflow_dispatch:
env:
  # Setting an environment variable with the value of a configuration variable
  env_var: ${{ vars.ENV_CONTEXT_VAR }}

jobs:
  display-variables:
    name: ${{ vars.JOB_NAME }}
    # You can use configuration variables with the `vars` context for dynamic jobs
    if: ${{ vars.USE_VARIABLES == 'true' }}
    runs-on: ${{ vars.RUNNER }}
    environment: ${{ vars.ENVIRONMENT_STAGE }}
    steps:
    - name: Use variables
      run: |
        echo "repository variable : $REPOSITORY_VAR"
        echo "organization variable : $ORGANIZATION_VAR"
        echo "overridden variable : $OVERRIDE_VAR"
        echo "variable from shell environment : $env_var"
      env:
        REPOSITORY_VAR: ${{ vars.REPOSITORY_VAR }}
        ORGANIZATION_VAR: ${{ vars.ORGANIZATION_VAR }}
        OVERRIDE_VAR: ${{ vars.OVERRIDE_VAR }}
        
    - name: ${{ vars.HELLO_WORLD_STEP }}
      if: ${{ vars.HELLO_WORLD_ENABLED == 'true' }}
      uses: actions/hello-world-javascript-action@main
      with:
        who-to-greet: ${{ vars.GREET_NAME }}

운영 체제 검색

RUNNER_OS 기본 환경 변수 및 해당 컨텍스트 속성 ${{ runner.os }}을(를) 사용하여 다른 운영 체제에 사용할 수 있는 단일 워크플로 파일을 작성할 수 있습니다. 예를 들어 실행기에서 사용하는 셸에 따라 다른 환경 변수의 구문을 변경하지 않고 운영 체제를 macos-latest에서 windows-latest로 변경하면 다음 워크플로를 성공적으로 실행할 수 있습니다.

YAML
on: workflow_dispatch

jobs:
  if-Windows-else:
    runs-on: macos-latest
    steps:
      - name: condition 1
        if: runner.os == 'Windows'
        run: echo "The operating system on the runner is $env:RUNNER_OS."
      - name: condition 2
        if: runner.os != 'Windows'
        run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS."

이 예시에서 두 if 문은 runner 컨텍스트의 os 속성을 확인하여 실행기의 운영 체제를 확인합니다. if 조건은 GitHub Actions에 의해 처리되며, 실행기로 전송되는 검사에서 true로 확인되는 단계만 처리됩니다. 여기서는 검사 중 하나가 항상 true이고 다른 하나가 false이므로 단계 중 하나만 실행기에 전송됩니다. 작업이 실행기로 전송되면 단계가 실행되고 명령의 echo의 환경 변수가 적절한 구문(Windows PowerShell의 경우 $env:NAME, Linux와 macOS의 bash와 sh인 경우 $NAME)을 사용하여 보간됩니다. 이 예시에서 문 runs-on: macos-latest는 두 번째 단계가 실행될 것임을 의미합니다.

워크플로의 단계와 작업 간에 값 전달

작업의 한 단계에서 값을 생성하는 경우 기존 또는 새 환경 변수에 값을 할당한 다음 이를 GITHUB_ENV 환경 파일에 작성하여 동일한 작업의 후속 단계에서 값을 사용할 수 있습니다. 환경 파일은 작업에서 직접 사용하거나 run 키워드를 사용하여 워크플로 파일의 셸 명령에서 사용할 수 있습니다. 자세한 내용은 GitHub Actions에 대한 워크플로 명령을(를) 참조하세요.

워크플로의 한 작업 단계에서 워크플로의 다른 작업의 단계로 값을 전달하려는 경우 값을 작업 출력으로 정의할 수 있습니다. 그런 다음, 다른 작업의 단계에서 이 작업 출력을 참조할 수 있습니다. 자세한 내용은 GitHub Actions에 대한 워크플로 구문을(를) 참조하세요.