GitHub Actions에서 outputs 객체를 사용하여 Job 간 단순 값(Value) 전달하는 방법에 대한 정리한 글이다.
전체적인 플로우
워크플로우(Workflow)에서 여러 Job이 실행될 때, 특정 Job에서 발생한 결과값을 다음 Job에서 활용해야 할 수 있다. 예를 들어, 어떤 Job에서 생성한 해시값, 파일 이름, 시각 정보 등을 다음 Job이 조건 판단이나 메시지 출력 등에 사용하도록 구성할 수 있다. GitHub Actions는 이를 위해 outputs라는 객체를 제공한다. outputs 객체는 GitHub Actions의 Context에 포함되어 있으며, key-value 형태로 데이터를 저장한다.

outputs를 이용하면 Step → Job, 그리고 Job → 다음 Job으로 값을 전달할 수 있다.
이번 글에서는 아래와 같은 흐름으로 진행해본다.
- Step에서 값을 $GITHUB_OUTPUT에 key=value 형식으로 저장
- 해당 Step의 output을 Job 수준 outputs에 선언
- 이후 Job에서 needs를 통해 의존한 Job의 output 값을 참조해 조건부 실행
Step → Job → 다음 Job 으로 값 전달하기
[Step 수준에서 값 저장하기]
값을 저장하려면 특정 Step에서 $GITHUB_OUTPUT에 key-value 형식으로 값을 작성해야 한다.
- name: Get current hour in KST
id: get-hour
run: |
HOUR=$(TZ=Asia/Seoul date +%H)
# outputs 에 저장
echo "hour=$HOUR" >> $GITHUB_OUTPUT
한국 시간 기준으로 현재 시(hour)를 구해 hour라는 이름으로 저장한다.
[Job 수준 outputs 로 노출시키기]
Step에서 저장한 값을 Job 바깥으로 꺼내려면 jobs.[job_id].outputs에 명시해줘야 한다.
jobs:
check-time:
runs-on: ubuntu-latest
# 위에서 저장한 값을 노출
outputs:
hour: ${{ steps.get-hour.outputs.hour }}
steps:
...
이제 check-time Job은 outputs.hour라는 값을 외부에 노출한다.
[다음 Job에서 outputs 값 참조하기]
이후 Job에서는 needs를 통해 해당 Job을 의존성으로 설정하면 needs.[job_id].outputs.[key] 형태로 값을 읽어올 수 있다.
jobs:
deploy:
needs: check-time
# 현재 job 에서 check-time 에 정의한 outputs 사용 가능
조건부 Job 실행하기 (Conditional Job Execution)
if: 키워드를 통해 Step 혹은 Job 단위에서 조건부 실행을 할 수 있다. 여기서 Job 간 값 전달을 통해 외부에서 결정된 조건을 기반으로 실행 여부를 조절할 수 있다. 예를 들어, 오후 5시 이후에만 해당 Job 을 실행하고 싶다면 다음과 같은 조건식을 사용할 수 있다.
if: ${{ needs.check-time.outputs.hour >= '17' }}
다른 Workflow 의 값을 참조하지 않더라도 Workflow 의 context 정보에 존재하는 정보라면 접근이 가능하다.

전체 Workflow 예시는 아래와 같다.
jobs:
check-time:
runs-on: ubuntu-latest
outputs:
hour: ${{ steps.get-hour.outputs.hour }}
steps:
- name: Get current hour in KST
id: get-hour
run: |
HOUR=$(TZ=Asia/Seoul date +%H)
echo "hour=$HOUR" >> $GITHUB_OUTPUT
deploy:
needs: check-time
if: ${{ needs.check-time.outputs.hour >= '17' }}
...
References
- https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/accessing-contextual-information-about-workflow-runs#context-availability
- https://docs.github.com/ko/actions/writing-workflows/choosing-what-your-workflow-does/passing-information-between-jobs
- https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/using-conditions-to-control-job-execution
'Git&GitHub' 카테고리의 다른 글
| [GitHub] 반복적인 Github Label 생성 작업 자동화하기 (0) | 2024.11.10 |
|---|
