Github Actions - Job들의 실행 순서 정해주기

DongHwan·2022년 5월 15일
0

Github Actions

목록 보기
7/7

하나의 Workflow 안에는 여러 개의 Job들이 있을 수 있다. 이때 Job들의 실행 순서를 정해주거나 이전 Job의 결과에 따라 특정한 Job의 실행을 트리거하고 싶을 수 있다. jobs.<job_id>.needs를 사용하여 이러한 동작들을 정의해줄 수 있다.

jobs:
  job1:
  job2:
  	needs: job1
  job3:
    needs: [job1, job2]

사용 방법은 위와 같다. needs에 정의해준 Job이 실행된 이후에 해당하는 Job이 실행된다. 위 예시에서 job1job2가 실행되기 전에 반드시 성공적으로 실행이 끝나야한다. 그리고 job3job1job2가 종료될때까지 기다린다. 즉, 실행 순서는 job1 -> job2 -> job3의 순서이다.

jobs.<job_id>.needs는 정의된 다른 Job들의 실행이 정상적으로 종료되어야 해당 Job을 실행해준다. 하지만 우리는 종종 이전 Job들의 실행 결과와 무관하게 순서만 지켜 실행하고 싶은 Job이 있을 수 있다.

jobs:
  job1:
  job2:
  	needs: job1
  job3:
  	if: ${{ always() }}
    needs: [job1, job2]

이럴 땐 always() Expression을 사용하면, 이전 Job들의 실행 결과와 무관하게 무조건 실행시킬 수 있다. jobs.<job_id>.if 속성은 들어온 값에 따라 해당 Job의 실행 여부를 결정하는데, always()를 넣어주면 항상 true로 실행을 한다.

needs Context

jobs.<job_id>.needs를 통해 넣어준 Job들의 정보를 needs Context를 통해 가져올 수 있다. needs Context에 담겨있는 정보들을 다음과 같다.

  • needs.<job_id>.outputs
  • needs.<job_id>.result

needs.<job_id>.outputs

jobs:
  job1:
    outputs:
      output1: output_value
  job2:
    needs: job1
    steps:
      - run: echo ${{ needs.job1.outputs.output1 }}

needs.<job_id>.outputs는 job_id Job에 정의된 outputs들을 저장하고 있다. 위 예시에서 보이듯 job1의 outputs로 output1: output_value를 지정해준 것을 알 수 있다. 이 특정 변수를 가져오기 위해서는 needs.<job_id>.outputs.<output name>의 형식으로 사용해주면 된다.

만약 이전 Job에서 생성된 특정 값을 다른 Job에서 사용해야할 때 유용하게 사용할 수 있다.

needs.<job_id>.result

jobs:
  job1:
  job2:
    needs: job1
    steps:
      - if: ${{ needs.job1.result == 'failure' }}
      	run: echo "job1이 실패했습니다."

needs.<job_id>.result는 해당 Job의 실행 결과를 가지고 있다. 가능한 값으로는 success, failure, cancelled, skipped 4가지가 있다. 해당 값을 통해 특정 Job의 결과에 따른 분기처리를 할 수 있을 것이다.

profile
날 어떻게 한줄로 소개해~

0개의 댓글