[Github] Github Actions 에서 Job 간 Value 전달, 조건부 job 실행 방법

2025. 6. 19. 15:31·Git&GitHub

GitHub Actions에서 outputs 객체를 사용하여 Job 간 단순 값(Value) 전달하는 방법에 대한 정리한 글이다.

 

전체적인 플로우

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

https://docs.github.com/ko/enterprise-cloud@latest/actions/writing-workflows/choosing-what-your-workflow-does/accessing-contextual-information-about-workflow-runs#job-context

 

outputs를 이용하면 Step → Job, 그리고 Job → 다음 Job으로 값을 전달할 수 있다.

 

이번 글에서는 아래와 같은 흐름으로 진행해본다.

  1. Step에서 값을 $GITHUB_OUTPUT에 key=value 형식으로 저장
  2. 해당 Step의 output을 Job 수준 outputs에 선언
  3. 이후 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
'Git&GitHub' 카테고리의 다른 글
  • [GitHub] 반복적인 Github Label 생성 작업 자동화하기
기억은 RAM, 기록은 HDD
기억은 RAM, 기록은 HDD
  • 기억은 RAM, 기록은 HDD
    적립식 개발
    기억은 RAM, 기록은 HDD
  • 전체
    오늘
    어제
    • 분류 전체보기 (45)
      • Gradle (1)
      • 알고리즘 (14)
        • 강한 연결 요소 (1)
        • BFS (1)
        • 다이나믹 프로그래밍 (2)
        • 그리디 (1)
        • 투 포인터 (2)
        • 비트마스크 (1)
        • 스택 (1)
        • 백트래킹 (1)
        • 유니온-파인드 (1)
        • 기초 기하학 (1)
        • 분할정복을 이용한 거듭제곱 (1)
        • 볼록 껍질 (1)
      • JPA (3)
      • Java (9)
      • Spring (9)
      • Git&GitHub (2)
      • Infra (4)
  • 최근 글

  • 인기 글

  • 태그

    자바 callable
    enum정리
    java synchronized
    githubworkflow
    비트마스킹
    정렬
    java 라이브러리 추가
    데몬쓰레드
    자바future
    java
    자바 runnable
    thread 와 runnable
    자바synchronized키워드
    @embedded
    기하학
    spring cors 해결
    완전탐색
    투 포인터
    enum활용법
    Github
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
기억은 RAM, 기록은 HDD
[Github] Github Actions 에서 Job 간 Value 전달, 조건부 job 실행 방법
테마상단으로

티스토리툴바