Skip to main content
설명서에 자주 업데이트를 게시하며 이 페이지의 번역이 계속 진행 중일 수 있습니다. 최신 정보는 영어 설명서를 참조하세요.

컨텍스트

워크플로 및 작업에서 컨텍스트 정보에 액세스할 수 있습니다.

참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.

컨텍스트 정보

컨텍스트는 워크플로 실행, 변수, 실행기 환경, 작업 및 단계에 대한 정보에 액세스하는 방법입니다. 각 컨텍스트는 문자열 또는 다른 개체일 수 있는 속성을 포함하는 개체입니다.

컨텍스트, 개체 및 속성은 워크플로 실행 조건마다 크게 달라집니다. 예를 들어 matrix 컨텍스트는 행렬의 작업에 대해서만 채워집니다.

식 구문을 사용하여 컨텍스트에 액세스할 수 있습니다. 자세한 내용은 “언어 식”을 참조하세요.

${{ <context> }}

경고: 워크플로 및 작업을 만들 때 코드가 가능한 공격자의 신뢰할 수 없는 입력을 실행할 수 있는지 항상 고려해야 합니다. 공격자가 자신의 악성 콘텐츠를 삽입할 수 있으므로 특정 컨텍스트는 신뢰할 수 없는 입력으로 처리되어야 합니다. 자세한 내용은 “스크립트 삽입의 위험에 대한 이해”를 참조하세요.

컨텍스트 이름형식설명
githubobject워크플로 실행에 대한 정보입니다. 자세한 내용은 github컨텍스트를 참조하세요.
envobject워크플로, 작업 또는 단계에서 설정된 변수를 포함합니다. 자세한 내용은 env컨텍스트를 참조하세요.

식의 일부로 두 구문 중 하나를 사용하여 컨텍스트 정보에 액세스할 수 있습니다.

  • 인덱스 구문: github['sha']
  • 속성 역참조 구문: github.sha

속성 역참조 구문을 사용하려면 속성 이름이 문자 또는 _로 시작하거나 영숫자 문자, - 또는 _만 포함해야 합니다.

존재하지 않는 속성을 역참조하려고 하면 빈 문자열로 평가됩니다.

컨텍스트를 사용할 시기 결정

GitHub Actions에는 contexts 라는 변수 컬렉션과 기본 변수라는 유사한 변수 컬렉션 이 포함되어 있습니다. 이러한 변수는 워크플로의 여러 지점에서 사용하기 위한 것입니다.

  • 기본 환경 변수: 이러한 환경 변수는 작업을 실행하는 실행기에만 존재합니다. 자세한 내용은 “기본 환경 변수”를 참조하세요.
  • 컨텍스트: 기본 변수 를 사용할 수 없는 경우를 포함하여 워크플로의 모든 지점에서 대부분의 컨텍스트를 사용할 수 있습니다. 예를 들어 작업이 실행을 위해 실행기로 라우팅되기 전에 식과 함께 컨텍스트를 사용하여 초기 처리를 수행할 수 있습니다. 이렇게 하면 조건부 if 키워드가 포함된 컨텍스트를 사용하여 단계를 실행할지 여부를 결정할 수 있습니다. 작업이 실행되면 작업을 실행하는 실행기에서 컨텍스트 변수를 검색할 수도 있습니다(예: runner.os). 워크플로 내에서 다양한 컨텍스트를 사용할 수 있는 위치에 대한 자세한 내용은 “컨텍스트 가용성”을 참조하세요.

다음 예제에서는 이러한 다양한 유형의 변수를 작업에서 함께 사용하는 방법을 보여 줍니다.

name: CI
on: push
jobs:
  prod-check:
    if: ${{ github.ref == 'refs/heads/main' }}
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploying to production server on branch $GITHUB_REF"

이 예제에서 if 문은 github.ref 컨텍스트를 검사하여 현재 분기 이름을 확인합니다. 이름이 refs/heads/main이면 후속 단계가 실행됩니다. if 확인은 GitHub Actions에 의해 처리되며, 결과가 true이면 작업은 실행기로만 전송됩니다. 작업이 실행기로 전송되면 단계가 실행되고 실행기 $GITHUB_REF 에서 변수를 참조합니다.

컨텍스트 가용성

워크플로 실행 전체에서 다양한 컨텍스트를 사용할 수 있습니다. 예를 들어 secrets 컨텍스트는 작업 내의 특정 위치에서만 사용할 수 있습니다.

또한 일부 함수는 특정 위치에서만 사용할 수 있습니다. 예를 들어 hashFiles 함수는 아무 데서도 사용할 수 없습니다.

다음 표는 워크플로 내에서 각 컨텍스트 및 특수 함수를 사용할 수 있는 위치를 나타냅니다. 아래에 나열되어 있지 않은 함수는 어디에서나 사용할 수 있습니다.

| 워크플로 키 | Context | 특수 함수 | | ---- | ------- | ----------------- | | concurrency | github, inputs | | | env | github, secrets, inputs | | | jobs.<job_id>.concurrency | github, needs, strategy, matrix, inputs | | | jobs.<job_id>.container | github, needs, strategy, matrix, env, secrets, inputs | | | jobs.<job_id>.container.credentials | github, needs, strategy, matrix, env, secrets, inputs | | | jobs.<job_id>.container.env.<env_id> | github, needs, strategy, matrix, job, runner, env, secrets, inputs | | | jobs.<job_id>.continue-on-error | github, needs, strategy, matrix, inputs | | | jobs.<job_id>.defaults.run | github, needs, strategy, matrix, env, inputs | | | jobs.<job_id>.env | github, needs, strategy, matrix, secrets, inputs | | | jobs.<job_id>.environment | github, needs, strategy, matrix, inputs | | | jobs.<job_id>.environment.url | github, needs, strategy, matrix, job, runner, env, steps, inputs | | | jobs.<job_id>.if | github, needs, inputs | always, cancelled, success, failure | | jobs.<job_id>.name | github, needs, strategy, matrix, inputs | | | jobs.<job_id>.outputs.<output_id> | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | | | jobs.<job_id>.runs-on | github, needs, strategy, matrix, inputs | | | jobs.<job_id>.secrets.<secrets_id> | github, needs, secrets | | | jobs.<job_id>.services | github, needs, strategy, matrix, inputs | | | jobs.<job_id>.services.<service_id>.credentials | github, needs, strategy, matrix, env, secrets, inputs | | | jobs.<job_id>.services.<service_id>.env.<env_id> | github, needs, strategy, matrix, job, runner, env, secrets, inputs | | | jobs.<job_id>.steps.continue-on-error | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.env | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.if | github, needs, strategy, matrix, job, runner, env, steps, inputs | always, cancelled, success, failure, hashFiles | | jobs.<job_id>.steps.name | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.run | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.timeout-minutes | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.with | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.working-directory | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.strategy | github, needs, inputs | | | jobs.<job_id>.timeout-minutes | github, needs, strategy, matrix, inputs | | | jobs.<job_id>.with.<with_id> | github, needs | | | on.workflow_call.inputs.<inputs_id>.default | github | | | on.workflow_call.outputs.<output_id>.value | github, jobs, inputs | |

예: 로그에 컨텍스트 정보 출력

디버깅을 위해 컨텍스트의 콘텐츠를 로그에 출력할 수 있습니다. toJSON 함수는 JSON 개체를 로그에 출력하는 데 필요합니다.

경고: 전체 github 컨텍스트를 사용할 때는 중요한 정보(예: github.token)가 포함된다는 점을 염두에 두어야 합니다. GitHub은(는) 비밀을 콘솔에 인쇄할 때 마스킹하지만 컨텍스트를 내보내거나 인쇄할 때는 주의해야 합니다.

YAML
name: Context testing
on: push

jobs:
  dump_contexts_to_log:
    runs-on: ubuntu-latest
    steps:
      - name: Dump GitHub context
        id: github_context_step
        run: echo '${{ toJSON(github) }}'
      - name: Dump job context
        run: echo '${{ toJSON(job) }}'
      - name: Dump steps context
        run: echo '${{ toJSON(steps) }}'
      - name: Dump runner context
        run: echo '${{ toJSON(runner) }}'
      - name: Dump strategy context
        run: echo '${{ toJSON(strategy) }}'
      - name: Dump matrix context
        run: echo '${{ toJSON(matrix) }}'

github 컨텍스트

github 컨텍스트에는 워크플로 실행 및 실행을 트리거한 이벤트에 대한 정보가 포함됩니다. 환경 변수에서 대부분의 github 컨텍스트 데이터를 읽을 수도 있습니다. 환경 변수에 대한 자세한 내용은 환경 변수 사용을 참조하세요.

경고: 전체 github 컨텍스트를 사용할 때는 중요한 정보(예: github.token)가 포함된다는 점을 염두에 두어야 합니다. GitHub은(는) 비밀을 콘솔에 인쇄할 때 마스킹하지만 컨텍스트를 내보내거나 인쇄할 때는 주의해야 합니다.

경고: 워크플로 및 작업을 만들 때 코드가 가능한 공격자의 신뢰할 수 없는 입력을 실행할 수 있는지 항상 고려해야 합니다. 공격자가 자신의 악성 콘텐츠를 삽입할 수 있으므로 특정 컨텍스트는 신뢰할 수 없는 입력으로 처리되어야 합니다. 자세한 내용은 “스크립트 삽입의 위험에 대한 이해”를 참조하세요.

속성 이름Type설명
githubobject워크플로의 모든 작업 또는 단계 중에 사용할 수 있는 최상위 컨텍스트입니다. 이 개체에는 아래에 나열된 모든 속성이 포함됩니다.
github.actionstring현재 실행 중인 작업의 이름 또는 단계의 id입니다. GitHub는 특수 문자를 제거하고 현재 단계에서 스크립트를 실행할 때 id 없이 __run 이름을 사용합니다. 동일한 작업에서 동일한 동작을 두 번 이상 사용하는 경우 이름 앞에 밑줄이 있는 시퀀스 번호가 있는 접미사가 포함됩니다. 예를 들어 실행하는 첫 번째 스크립트에는 이름이 __run으로 지정되고 두 번째 스크립트의 이름은 __run_2로 지정됩니다. 마찬가지로 두 번째 actions/checkout 호출은 actionscheckout2입니다.
github.action_pathstring작업이 있는 경로입니다. 이 속성은 복합 작업에서만 지원됩니다. 이 경로를 사용하여 작업과 동일한 리포지토리에 있는 파일에 액세스할 수 있습니다. 예를 들어 디렉터리를 경로로 변경하여 cd ${{ github.action_path }} .
github.action_refstring작업을 실행하는 단계의 경우 실행 중인 작업의 참조입니다. 예: v2.
github.action_repositorystring작업을 실행하는 단계의 경우 작업의 소유자 및 리포지토리 이름입니다. 예: actions/checkout.
github.action_statusstring복합 작업의 경우 복합 작업의 현재 결과입니다.
github.actorstring워크플로 실행을 시작한 사용자의 사용자 이름입니다.

github 컨텍스트의 예제 콘텐츠

다음 예제 컨텍스트는 push 이벤트에 의해 트리거되는 워크플로 실행의 컨텍스트입니다. 이 예제의 event 개체는 웹후크 페이로드push의 내용과 동일하기 때문에 잘렸습니다.

참고: 이 컨텍스트는 예제일 뿐입니다. 컨텍스트의 내용은 실행 중인 워크플로에 따라 달라집니다. 컨텍스트, 개체 및 속성은 워크플로 실행 조건마다 크게 달라집니다.

{
  "token": "***",
  "job": "dump_contexts_to_log",
  "ref": "refs/heads/my_branch",
  "sha": "c27d339ee6075c1f744c5d4b200f7901aad2c369",
  "repository": "octocat/hello-world",
  "repository_owner": "octocat",
  "repositoryUrl": "git://github.com/octocat/hello-world.git",
  "run_id": "1536140711",
  "run_number": "314",
  "retention_days": "90",
  "run_attempt": "1",
  "actor": "octocat",
  "workflow": "Context testing",
  "head_ref": "",
  "base_ref": "",
  "event_name": "push",
  "event": {
    ...
  },
  "server_url": "https://github.com",
  "api_url": "https://api.github.com",
  "graphql_url": "https://api.github.com/graphql",
  "ref_name": "my_branch",
  "ref_protected": false,
  "ref_type": "branch",
  "secret_source": "Actions",
  "workspace": "/home/runner/work/hello-world/hello-world",
  "action": "github_step",
  "event_path": "/home/runner/work/_temp/_github_workflow/event.json",
  "action_repository": "",
  "action_ref": "",
  "path": "/home/runner/work/_temp/_runner_file_commands/add_path_b037e7b5-1c88-48e2-bf78-eaaab5e02602",
  "env": "/home/runner/work/_temp/_runner_file_commands/set_env_b037e7b5-1c88-48e2-bf78-eaaab5e02602"
}

github 컨텍스트의 사용 예제

이 예제 워크플로는 pull_request 이벤트에 의해 워크플로 실행이 트리거된 경우에만 github.event_name 컨텍스트를 사용하여 작업을 실행합니다.

YAML
name: Run CI
on: [push, pull_request]

jobs:
  normal_ci:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run normal CI
        run: ./run-tests

  pull_request_ci:
    runs-on: ubuntu-latest
    if: ${{ github.event_name == 'pull_request' }}
    steps:
      - uses: actions/checkout@v3
      - name: Run PR CI
        run: ./run-additional-pr-ci

env 컨텍스트

컨텍스트에는 env 워크플로, 작업 또는 단계에서 설정된 변수가 포함됩니다. 워크플로에서 변수를 설정하는 방법에 대한 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을 참조하세요.

env 컨텍스트 구문을 사용하면 워크플로 파일에서 변수 값을 사용할 수 있습니다. 단계의 모든 키 값에서 env 컨텍스트를 사용할 수 있습니다. 단, id 키와 uses 키는 제외됩니다. 단계 구문에 대한 자세한 내용은 “GitHub Actions에 대한 워크플로 구문”을 참조하세요.

실행기 내에서 변수 값을 사용하려면 실행기 운영 체제의 일반 메서드를 사용하여 환경 변수를 읽습니다.

속성 이름Type설명
envobject이 컨텍스트는 작업의 각 단계에 따라 변경됩니다. 작업의 모든 단계에서 이 컨텍스트에 액세스할 수 있습니다. 이 개체에는 아래에 나열된 속성이 포함되어 있습니다.
env.<env_name>string특정 환경 변수의 값입니다.

env 컨텍스트의 예제 콘텐츠

컨텍스트의 env 내용은 변수 이름을 해당 값에 매핑하는 것입니다. 컨텍스트의 내용은 워크플로 실행에서 사용되는 위치에 따라 변경됩니다.

{
  "first_name": "Mona",
  "super_duper_var": "totally_awesome"
}

env 컨텍스트의 사용 예제

이 예제 워크플로는 워크플로, 작업 및 단계 수준에서 env 컨텍스트를 구성할 수 있는 방법과 단계에서 컨텍스트를 사용하는 방법을 보여줍니다.

둘 이상의 환경 변수가 동일한 이름으로 정의되면 GitHub는 가장 구체적인 변수를 사용합니다. 예를 들어 단계에 정의된 환경 변수는 작업이 실행되는 동안 동일한 이름의 작업 및 워크플로 환경 변수를 재정의합니다. 작업에 대해 정의된 환경 변수는 작업이 실행되는 동안 동일한 이름의 워크플로 변수를 재정의합니다.

YAML
name: Hi Mascot
on: push
env:
  mascot: Mona
  super_duper_var: totally_awesome

jobs:
  windows_job:
    runs-on: windows-latest
    steps:
      - run: echo 'Hi ${{ env.mascot }}'  # Hi Mona
      - run: echo 'Hi ${{ env.mascot }}'  # Hi Octocat
        env:
          mascot: Octocat
  linux_job:
    runs-on: ubuntu-latest
    env:
      mascot: Tux
    steps:
      - run: echo 'Hi ${{ env.mascot }}'  # Hi Tux

job 컨텍스트

job 컨텍스트에는 현재 실행 중인 작업에 대한 정보가 포함됩니다.

속성 이름Type설명
jobobject이 컨텍스트는 워크플로 실행의 각 작업에 대해 변경됩니다. 작업의 모든 단계에서 이 컨텍스트에 액세스할 수 있습니다. 이 개체에는 아래에 나열된 모든 속성이 포함됩니다.
job.containerobject작업의 컨테이너에 대한 정보입니다. 컨테이너에 대한 자세한 내용은 “GitHub Actions에 대한 워크플로 구문”을 참조하세요.
job.container.idstring컨테이너의 ID입니다.
job.container.networkstring컨테이너 네트워크의 ID입니다. 실행기는 작업의 모든 컨테이너에서 사용하는 네트워크를 만듭니다.
job.servicesobject작업에 대해 만든 서비스 컨테이너입니다. 서비스 컨테이너에 대한 자세한 내용은 “GitHub Actions에 대한 워크플로 구문”을 참조하세요.
job.services.<service_id>.idstring서비스 컨테이너의 ID입니다.
job.services.<service_id>.networkstring서비스 컨테이너 네트워크의 ID입니다. 실행기는 작업의 모든 컨테이너에서 사용하는 네트워크를 만듭니다.
job.services.<service_id>.portsobject서비스 컨테이너의 노출된 포트입니다.
job.statusstring작업의 현재 상태 가능한 값은 success, failure 또는 cancelled입니다.

job 컨텍스트의 예제 콘텐츠

이 예제 job 컨텍스트는 매핑된 포트가 있는 PostgreSQL 서비스 컨테이너를 사용합니다. 작업에 사용되는 컨테이너 또는 서비스 컨테이너가 없는 경우 job 컨텍스트에는 status 속성만 포함됩니다.

{
  "status": "success",
  "container": {
    "network": "github_network_53269bd575974817b43f4733536b200c"
  },
  "services": {
    "postgres": {
      "id": "60972d9aa486605e66b0dad4abb638dc3d9116f566579e418166eedb8abb9105",
      "ports": {
        "5432": "49153"
      },
      "network": "github_network_53269bd575974817b43f4733536b200c"
    }
  }
}

job 컨텍스트의 사용 예제

이 예제 워크플로는 PostgreSQL 서비스 컨테이너를 구성하고 서비스 컨테이너의 포트 5432를 호스트에서 임의로 선택된 사용 가능한 포트에 자동으로 매핑합니다. job 컨텍스트는 호스트에 할당된 포트 수에 액세스하는 데 사용됩니다.

YAML
name: PostgreSQL Service Example
on: push
jobs:
  postgres-job:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres
        env:
          POSTGRES_PASSWORD: postgres
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
        ports:
          # Maps TCP port 5432 in the service container to a randomly chosen available port on the host.
          - 5432

    steps:
      - uses: actions/checkout@v3
      - run: pg_isready -h localhost -p ${{ job.services.postgres.ports[5432] }}
      - run: ./run-tests

jobs 컨텍스트

jobs 컨텍스트는 재사용 가능한 워크플로에서만 사용할 수 있으며 재사용 가능한 워크플로에 대한 출력을 설정하는 데만 사용할 수 있습니다. 자세한 내용은 “워크플로 다시 사용”을 참조하세요.

속성 이름TypeDescription
jobsobject이는 재사용 가능한 워크플로에서만 사용할 수 있으며 재사용 가능한 워크플로에 대한 출력을 설정하는 데만 사용할 수 있습니다. 이 개체에는 아래에 나열된 모든 속성이 포함됩니다.
jobs.<job_id>.resultstring재사용 가능한 워크플로의 작업 결과입니다. 가능한 값은 success, failure, cancelledskipped입니다.
jobs.<job_id>.outputsobject재사용 가능한 워크플로 작업의 출력 집합입니다.
jobs.<job_id>.outputs.<output_name>string재사용 가능한 워크플로의 작업에 대한 특정 출력 값입니다.

jobs 컨텍스트의 예제 콘텐츠

jobs 컨텍스트 예제는 재사용 가능한 워크플로 실행의 작업 결과와 출력을 포함합니다.

{
  "example_job": {
    "result": "success",
    "outputs": {
      "output1": "hello",
      "output2": "world"
    }
  }
}

jobs 컨텍스트의 사용 예제

이 재사용 가능한 워크플로 예제는 jobs 컨텍스트를 사용하여 재사용 가능한 워크플로에 대한 출력을 설정합니다. 출력이 단계에서, 작업으로, 그 다음에는 workflow_call 트리거로 이동하는 방식을 확인합니다. 자세한 내용은 “워크플로 다시 사용”을 참조하세요.

YAML
name: Reusable workflow

on:
  workflow_call:
    # Map the workflow outputs to job outputs
    outputs:
      firstword:
        description: "The first output string"
        value: ${{ jobs.example_job.outputs.output1 }}
      secondword:
        description: "The second output string"
        value: ${{ jobs.example_job.outputs.output2 }}

jobs:
  example_job:
    name: Generate output
    runs-on: ubuntu-latest
    # Map the job outputs to step outputs
    outputs:
      output1: ${{ steps.step1.outputs.firstword }}
      output2: ${{ steps.step2.outputs.secondword }}
    steps:
      - id: step1
        run: echo "::set-output name=firstword::hello"
      - id: step2
        run: echo "::set-output name=secondword::world"

steps 컨텍스트

steps 컨텍스트에는 지정되어 있고 이미 실행된 id 가 있는 현재 작업의 단계에 대한 정보가 포함됩니다.

속성 이름Type설명
stepsobject이 컨텍스트는 작업의 각 단계에 따라 변경됩니다. 작업의 모든 단계에서 이 컨텍스트에 액세스할 수 있습니다. 이 개체에는 아래에 나열된 모든 속성이 포함됩니다.
steps.<step_id>.outputsobject단계에 대해 정의된 출력 집합입니다. 자세한 내용은 “GitHub Actions에 대한 메타데이터 구문”을 참조하세요.
steps.<step_id>.conclusionstringcontinue-on-error가 적용된 후 완료된 단계의 결과입니다. 가능한 값은 success, failure, cancelledskipped입니다. continue-on-error 단계가 실패하면 outcomefailure이지만 최종 conclusionsuccess입니다.
steps.<step_id>.outcomestringcontinue-on-error가 적용되기 전 완료된 단계의 결과입니다. 가능한 값은 success, failure, cancelledskipped입니다. continue-on-error 단계가 실패하면 outcomefailure이지만 최종 conclusionsuccess입니다.
steps.<step_id>.outputs.<output_name>string특정 출력의 값입니다.

steps 컨텍스트의 예제 콘텐츠

이 예제 steps 컨텍스트는 지정된 id가 있는 두 개의 이전 단계를 보여줍니다. 첫 번째 단계에는 checkout이라는 id가, 두 번째 단계에는 generate_number가 있습니다. generate_number 단계에는 이름이 random_number인 출력이 있습니다.

{
  "checkout": {
    "outputs": {},
    "outcome": "success",
    "conclusion": "success"
  },
  "generate_number": {
    "outputs": {
      "random_number": "1"
    },
    "outcome": "success",
    "conclusion": "success"
  }
}

steps 컨텍스트의 사용 예제

이 예제 워크플로는 한 단계에서 난수를 출력으로 생성하고, 이후 단계에서는 steps 컨텍스트를 사용하여 해당 출력의 값을 읽습니다.

YAML
name: Generate random failure
on: push
jobs:
  randomly-failing-job:
    runs-on: ubuntu-latest
    steps:
      - id: checkout
        uses: actions/checkout@v3
      - name: Generate 0 or 1
        id: generate_number
        run:  echo "::set-output name=random_number::$(($RANDOM % 2))"
      - name: Pass or fail
        run: |
          if [[ ${{ steps.generate_number.outputs.random_number }} == 0 ]]; then exit 0; else exit 1; fi

runner 컨텍스트

runner 컨텍스트에는 현재 작업을 실행하는 실행기 정보가 포함됩니다.

속성 이름Type설명
runnerobject이 컨텍스트는 워크플로 실행의 각 작업에 대해 변경됩니다. 이 개체에는 아래에 나열된 모든 속성이 포함됩니다.
runner.namestring작업을 실행하는 실행기의 이름입니다.
runner.osstring작업을 실행하는 실행기의 운영 체제입니다. 가능한 값은 Linux, Windows 또는 macOS입니다.
runner.archstring작업을 실행하는 실행기의 아키텍처입니다. 가능한 값은 X86, X64, ARMARM64입니다.
runner.tempstring실행기의 임시 디렉터리에 대한 경로입니다. 이 디렉터리는 각 작업의 시작과 끝에 비워집니다. 실행기 사용자 계정에 삭제 권한이 없는 경우 파일이 제거되지 않습니다.
runner.tool_cachestringGitHub 호스팅 실행기에 대해 미리 설치된 도구가 포함된 디렉터리의 경로입니다. 자세한 내용은 “GitHub 호스팅 실행기 정보”를 참조하세요.
runner.debugstring디버그 로깅을 사용하도록 설정한 경우에만 설정되며 항상 값이 1입니다. 사용자 고유의 작업 단계에서 추가 디버깅 또는 자세한 로깅을 사용하도록 설정하는 지표로 유용할 수 있습니다.

runner 컨텍스트의 예제 콘텐츠

다음 예제 컨텍스트는 Linux GitHub에서 호스트된 실행기에서 가져옵니다.

{
  "os": "Linux",
  "arch": "X64",
  "name": "GitHub Actions 2",
  "tool_cache": "/opt/hostedtoolcache",
  "temp": "/home/runner/work/_temp"
}

runner 컨텍스트의 사용 예제

이 예제 워크플로는 runner 컨텍스트를 사용하여 임시 디렉터리의 경로를 설정하여 로그를 작성하고, 워크플로가 실패하면 해당 로그를 아티팩트로 업로드합니다.

YAML
name: Build
on: push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build with logs
        run: |
          mkdir ${{ runner.temp }}/build_logs
          ./build.sh --log-path ${{ runner.temp }}/build_logs
      - name: Upload logs on fail
        if: ${{ failure() }}
        uses: actions/upload-artifact@v3
        with:
          name: Build failure logs
          path: ${{ runner.temp }}/build_logs

secrets 컨텍스트

secrets 컨텍스트는 워크플로 실행에 사용할 수 있는 비밀의 이름과 값을 포함합니다. secrets 보안상의 이유로 복합 작업에 컨텍스트를 사용할 수 없습니다. 복합 작업에 비밀을 전달하려는 경우 입력으로 명시적으로 수행해야 합니다. 비밀에 대한 자세한 내용은 “암호화된 비밀”을 참조하세요.

GITHUB_TOKEN은 모든 워크플로 실행에 대해 자동으로 만들어지고 항상 secrets 컨텍스트에 포함되는 비밀입니다. 자세한 내용은 “자동 토큰 인증”을 참조하세요.

경고: GitHub에서 로그에 출력된 비밀을 자동으로 삭제하지만 로그에 비밀을 출력하지 않도록 의도적으로 방지해야 합니다.

속성 이름Type설명
secretsobject이 컨텍스트는 워크플로 실행의 각 작업에 대해 동일합니다. 작업의 모든 단계에서 이 컨텍스트에 액세스할 수 있습니다. 이 개체에는 아래에 나열된 모든 속성이 포함됩니다.
secrets.GITHUB_TOKENstring각 워크플로 실행에 대해 자동으로 생성된 토큰입니다. 자세한 내용은 “자동 토큰 인증”을 참조하세요.
secrets.<secret_name>string특정 비밀의 값입니다.

secrets 컨텍스트의 예제 콘텐츠

secrets 컨텍스트의 다음 예제 콘텐츠는 자동 GITHUB_TOKEN 및 워크플로 실행에 사용할 수 있는 두 개의 다른 비밀을 보여 줍니다.

{
  "github_token": "***",
  "NPM_TOKEN": "***",
  "SUPERSECRET": "***"
}

secrets 컨텍스트의 사용 예제

이 예제 워크플로는 repo-token 입력 매개 변수의 값으로 GITHUB_TOKEN이 필요한 레이블 지정자 작업을 사용합니다.

YAML
name: Pull request labeler
on: [ pull_request_target ]

permissions:
  contents: read
  pull-requests: write

jobs:
  triage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/labeler@v4
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}

strategy 컨텍스트

행렬이 있는 워크플로의 경우 strategy 컨텍스트에는 현재 작업에 대한 행렬 실행 전략에 대한 정보가 포함됩니다.

속성 이름Type설명
strategyobject이 컨텍스트는 워크플로 실행의 각 작업에 대해 변경됩니다. 워크플로의 모든 작업 또는 단계에서 이 컨텍스트에 액세스할 수 있습니다. 이 개체에는 아래에 나열된 모든 속성이 포함됩니다.
strategy.fail-fastbooleantrue인 경우 행렬의 작업이 실패하면 진행 중인 모든 작업이 취소됩니다. 자세한 내용은 “GitHub Actions에 대한 워크플로 구문”을 참조하세요.
strategy.job-indexnumber행렬의 현재 작업의 인덱스입니다. 참고: 이 숫자는 0부터 시작합니다. 행렬의 첫 번째 작업 인덱스는 0입니다.
strategy.job-totalnumber행렬의 총 작업 수입니다. 참고: 이 숫자는 0부터 시작하지 않습니다. 예를 들어 네 개의 작업이 있는 행렬의 경우 job-total의 값은 4입니다.
strategy.max-parallelnumbermatrix 작업 전략을 사용할 때 동시에 실행할 수 있는 최대 작업 수입니다. 자세한 내용은 “GitHub Actions에 대한 워크플로 구문”을 참조하세요.

strategy 컨텍스트의 예제 콘텐츠

strategy 컨텍스트의 다음 예제 콘텐츠는 4개의 작업이 있는 행렬에서 가져온 것이며 최종 작업에서 가져옵니다. 0부터 시작하는 job-index 숫자와 0부터 시작하지 않는 job-total 사이의 차이를 확인합니다.

{
  "fail-fast": true,
  "job-index": 3,
  "job-total": 4,
  "max-parallel": 4
}

strategy 컨텍스트의 사용 예제

이 예제 워크플로에서는 strategy.job-index 속성을 사용하여 행렬의 각 작업에 대한 로그 파일의 고유한 이름을 설정합니다.

YAML
name: Test matrix
on: push

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        test-group: [1, 2]
        node: [14, 16]
    steps:
      - uses: actions/checkout@v3
      - run: npm test > test-job-${{ strategy.job-index }}.txt
      - name: Upload logs
        uses: actions/upload-artifact@v3
        with:
          name: Build log for job ${{ strategy.job-index }}
          path: test-job-${{ strategy.job-index }}.txt

matrix 컨텍스트

행렬이 있는 워크플로의 경우 matrix 컨텍스트에는 현재 작업에 적용되는 워크플로 파일에 정의된 행렬 속성이 포함됩니다. 예를 들어 osnode 키와 함께 행렬을 구성하는 경우 matrix 컨텍스트 개체에는 현재 작업에 사용되는 값과 함께 osnode 속성이 포함됩니다.

matrix 컨텍스트에는 표준 속성이 없으며 워크플로 파일에 정의된 속성만 있습니다.

속성 이름Type설명
matrixobject이 컨텍스트는 행렬의 작업 및 워크플로 실행의 각 작업에 대한 변경 내용에 대해서만 사용할 수 있습니다. 워크플로의 모든 작업 또는 단계에서 이 컨텍스트에 액세스할 수 있습니다. 이 개체에는 아래에 나열된 속성이 포함되어 있습니다.
matrix.<property_name>string행렬 속성의 값입니다.

matrix 컨텍스트의 예제 콘텐츠

matrix 컨텍스트의 다음 예제 콘텐츠는 워크플로에 정의된 os 행렬 속성과 node 행렬 속성이 있는 행렬의 작업에서 가져옵니다. 작업은 ubuntu-latest OS와 Node.js 버전 16의 매트릭스 조합을 실행합니다.

{
  "os": "ubuntu-latest",
  "node": 16
}

matrix 컨텍스트의 사용 예제

이 예제 워크플로는 osnode 키와 함께 행렬을 만듭니다. matrix.os 속성을 사용하여 각 작업에 대한 실행기 유형을 설정하고, matrix.node 속성을 사용하여 각 작업에 대한 Node.js 버전을 설정합니다.

YAML
name: Test matrix
on: push

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        node: [14, 16]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node }}
      - name: Install dependencies
        run: npm ci
      - name: Run tests
        run: npm test

needs 컨텍스트

컨텍스트에는 needs 현재 작업의 직접 종속성으로 정의된 모든 작업의 출력이 포함됩니다. 여기에는 암시적으로 종속된 작업(예: 종속 작업의 종속 작업)이 포함되지 않습니다. 작업 종속성 정의에 대한 자세한 내용은 “GitHub Actions에 대한 워크플로 구문”을 참조하세요.

속성 이름Type설명
needsobject이 컨텍스트는 종속 작업이 있는 워크플로 실행과 워크플로 실행의 각 작업에 대한 변경 내용에 대해서만 채워집니다. 워크플로의 모든 작업 또는 단계에서 이 컨텍스트에 액세스할 수 있습니다. 이 개체에는 아래에 나열된 모든 속성이 포함됩니다.
needs.<job_id>object현재 작업이 의존하는 단일 작업입니다.
needs.<job_id>.outputsobject현재 작업이 의존하는 작업의 출력 집합입니다.
needs.<job_id>.outputs.<output name>string현재 작업이 의존하는 작업에 대한 특정 출력의 값입니다.
needs.<job_id>.resultstring현재 작업이 의존하는 작업의 결과입니다. 가능한 값은 success, failure, cancelledskipped입니다.

needs 컨텍스트의 예제 콘텐츠

needs 컨텍스트의 다음 예제 콘텐츠는 현재 작업이 의존하는 두 가지 작업에 대한 정보를 보여 줍니다.

{
  "build": {
    "result": "success",
    "outputs": {
      "build_id": "ABC123"
    }
  },
  "deploy": {
    "result": "failure",
    "outputs": {}
  }
}

needs 컨텍스트의 사용 예제

이 예제 워크플로에는 세 가지 작업, 즉 빌드를 수행하는 build 작업, build 작업이 필요한 deploy 작업, builddeploy 작업이 모두 필요하고 워크플로에 오류가 있는 경우에만 실행되는 debug 작업이 있습니다. 또한 deploy 작업은 needs 컨텍스트를 사용하여 build 작업의 출력에 액세스합니다.

YAML
name: Build and deploy
on: push

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      build_id: ${{ steps.build_step.outputs.build_id }}
    steps:
      - uses: actions/checkout@v3
      - name: Build
        id: build_step
        run: |
          ./build
          echo "::set-output name=build_id::$BUILD_ID"
  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: ./deploy --build ${{ needs.build.outputs.build_id }}
  debug:
    needs: [build, deploy]
    runs-on: ubuntu-latest
    if: ${{ failure() }}
    steps:
      - uses: actions/checkout@v3
      - run: ./debug

inputs 컨텍스트

컨텍스트에는 inputs 작업 또는에서 재사용 가능한 워크플로에 전달되는 입력 속성이 포함됩니다. 입력 이름 및 형식은 재사용 가능한 워크플로의 이벤트 구성workflow_call에 정의되며, 입력 값은 재사용 가능한 워크플로를 호출하는 외부 워크플로의 jobs.<job_id>.with에서 전달됩니다.

컨텍스트의 inputs 속성은 워크플로 파일에 정의됩니다. 재사용 가능한 워크플로에 의해 workflow_dispatch트리거되는 워크플로에서만 사용할 수 있습니다.

속성 이름TypeDescription
inputsobject이 컨텍스트는 재사용 가능한 워크플로에 의해 트리거된 워크플로에서만 사용할 수 있습니다. 워크플로의 모든 작업 또는 단계에서 이 컨텍스트에 액세스할 수 있습니다. 이 개체에는 아래에 나열된 속성이 포함되어 있습니다.
inputs.<name>string, number, boolean 또는 choice외부 워크플로에서 전달된 각 입력 값입니다.

inputs 컨텍스트의 예제 콘텐츠

inputs 컨텍스트의 다음 예제 콘텐츠는 build_id, deploy_targetperform_deploy 입력을 정의한 워크플로에서 가져온 것입니다.

{
  "build_id": 123456768,
  "deploy_target": "deployment_sys_1a",
  "perform_deploy": true
}

재사용 가능한 워크플로의 inputs 컨텍스트 사용 예제

이 예제에서 재사용 가능한 워크플로는 inputs 컨텍스트를 사용하여 호출자 워크플로에서 재사용 가능한 워크플로에 전달된 build_id, deploy_targetperform_deploy 입력의 값을 가져옵니다.

YAML
name: Reusable deploy workflow
on:
  workflow_call:
    inputs:
      build_id:
        required: true
        type: number
      deploy_target:
        required: true
        type: string
      perform_deploy:
        required: true
        type: boolean

jobs:
  deploy:
    runs-on: ubuntu-latest
    if: ${{ inputs.perform_deploy }}
    steps:
      - name: Deploy build to target
        run: deploy --build ${{ inputs.build_id }} --target ${{ inputs.deploy_target }}