C.W.K.
Stream
Lesson 09 of 14 · published

Job output

~9 min · outputs, jobs, communication

Level 0Apprentice
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Runner 경계 넘는 output

Step output 은 job 안에서만 흘러. Job 사이 (별도 runner) 값 전달은 job output 선언. 패턴:

  1. Producer job 안 step 이 $GITHUB_OUTPUT 에 쓰기.
  2. Producer job 의 outputs: map 이 step output 을 job output 으로 노출.
  3. Consumer job 이 producer 를 needs: 선언.
  4. Consumer 가 needs.<producer>.outputs.<name> 로 읽음.

흔한 모양

뭘 돌릴지 결정하는 setup job, 그 다음 결정에 분기하는 job 들: '이건 release 냐 정상 CI 냐?', '어느 플랫폼에 deploy?'.

제약

  • Job output 은 문자열만. 구조 값 필요하면 JSON: JSON 쓰고 fromJSON 으로 읽음.
  • Job output 당 총 최대 1 MB.

Code

Setup job 이 결정, downstream job 이 읽음·yaml
jobs:
  setup:
    runs-on: ubuntu-latest
    outputs:
      kind: ${{ steps.classify.outputs.kind }}
      python_versions: ${{ steps.classify.outputs.python_versions }}
    steps:
      - uses: actions/checkout@v4
      - id: classify
        run: |
          if [[ $GITHUB_REF == refs/tags/v* ]]; then
            echo 'kind=release' >> $GITHUB_OUTPUT
            echo 'python_versions=["3.11","3.12"]' >> $GITHUB_OUTPUT
          else
            echo 'kind=ci' >> $GITHUB_OUTPUT
            echo 'python_versions=["3.12"]' >> $GITHUB_OUTPUT
          fi

  test:
    needs: setup
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python: ${{ fromJSON(needs.setup.outputs.python_versions) }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: '${{ matrix.python }}' }
      - run: pytest -q

  release:
    needs: [setup, test]
    if: needs.setup.outputs.kind == 'release'
    runs-on: ubuntu-latest
    steps:
      - run: ./release.sh

External links

Exercise

Workflow 에 run 을 분류 (CI / release / nightly) 하고 그걸 job output 으로 노출하는 setup job 추가. Downstream deploy job gate 에 사용. 다른 event 가 다른 경로 만드는지 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.