2025. 10. 14. 11:15ㆍCI\CD/Github Actions
Output
Github Actions에서는 Job간에 직접적인 변수의 공유가 되지 않는다.
그렇기에 다른 Job에서 값을 갖고 오기위해서 Output이라는 것을 사용하는데 Output은 앞 단계(Step, Job 등)가 계산한 값을 뒤 단계가 쓰도록 전달하는 공식적인 통로이다.
CI파이프 라인은 보통 단계가 나뉘어져 있고 앞에서 만든 결과(버전, 경로, 계산값, 지정한 옵션 등)를 다음 단계가 알아야하는 경우가 많고 그걸 해결하기 위해서 output이라는 기술을 사용한다.
여기서 output은 세가지의 방향성을 볼 수 있는데 이는 각각
- step → 동일 job의 step
- job → 다른 job
- 재사용 단위의 output (Composite Action / Reusable Workflow)
과 같이 사용 된다.
각각의 사용법이 조금씩 다르기 때문에 각각의 상용 법을 보면서 Output의 사용법을 확인해보자.
1. Step에서 동일한 Job의 다음 Step으로
하나의 Job에서 이전 Step의 결과를 다음 Step에서 쓰고 싶을 때 Step에 id를 붙이고 그 Step안에서 $GITHUB_OUTPUT 파일에 key-value를 써 넣으면, 다음 Step이 ${{steps.[id].output.[key]}}로 사용이 가능하다.
파일을 하나 만들어주고

push 이벤트에 트리거 해주고 난 후에 잡을 생성해주자.

job을 만들어주는데 첫번째 step에서 echo를 통해서 버전 정보를 임의로 전달하고 이걸 $GITHUB_OUTPUT에 저장하도록 해주자.
이때 step에 대한 id를 지정해주면서 step을 생성해주자.
이때 값을 넣을 때는 >이거는 값을 덮어 씌우는 거고 >>는 append 하는 거니까 아래와 같이 Ouput할때는 append하는 방식을 사용하자.

그리고 이걸 다음 step에서 ${{steps.insert-output.outputs.version }} 을 사용해서 값을 가져와주자.
여기서 insert-output과 version은 각각

위에 위치한 값들이다.
이제 추가로 step을 생성해서 아래와 같이 값을 출력해주자.

이제 commit & push 해보면


이렇게 출력이 잘 되는 것을 볼 수 있다.
2. Job에서 다른 Job으로
Job의 경우는 직접적으로 Job간에 변수를 공유하지 않는다.
그렇기에 step에서 썼던 것처럼 그냥 갖다 쓰는 방식으로는 불가능하고 외부로 노출을 시켜줘야지만 해당 output을 다른 job이 가져다 사용이 가능하다.
그리고 그렇게 외부로 노출된 output은 다음 Job에서 이전 Job에 대한 needs로 의존을 만든 후에 needs.[job-id].outputs.[key]로 output을 가져올 수 있다.
먼저 output을 Job에서 노출을 먼저 시키는데 그 방법은 output이라는 명칭으로 이름, 값을 지정해서 내보내면 된다.
이 때 값은 해당 step에서 넣어줄 id와 key형태로 넣어줘야한다.

이렇게 내보낸 값은 다음 Job에서 needs로 Job을 의존 해주고 needs.[job-id].outputs.[key]의 형태로 받아서 출력해준다.

그리고 commit & push 하고 actions를 보면

이렇게 잘 받아 쓰는 것을 볼 수 있다.
3. 재사용 가능한 단위에서의 output
해당 스코프에 대해서는 조금 더 추가적으로 공부 후에 알아보도록 하자
해당 스코프의 경우는 커스텀 액션, Composite Action, Reusable Workflows에 대해서 찾아보면서 공부해보도록 하자
'CI\CD > Github Actions' 카테고리의 다른 글
| Github Actions - 환경변수 (0) | 2025.10.14 |
|---|---|
| Github Actions - Artifact (0) | 2025.10.13 |
| Github Actions(CI/CD 구축) - Spring Boot로 만든 개인 프로젝트의 CI/CD (0) | 2025.10.03 |
| Github Actions - Cache (0) | 2025.10.01 |
| Github Actions - Timeout (0) | 2025.10.01 |