Github Actions#3

Donghoon Nam
원티드랩 기술 블로그
4 min readDec 29, 2019

목록

1. Github Actions 선택 배경
2. branch별로 S3에 배포
3. 빌드, 배포 step을 job으로 그룹핑 및 의존성 선언을 통한 배포
4. 배포 성공, 실패 슬랙 메세지 전송 공통 모듈 작성
5. Lighthouse action을 Github Actions scheduler 구현

이전 글에서 설명했던 시나리오에서 추가를 해보려고 합니다.

시나리오

시나리오 #1번에는 아래와 같은 문제가 있습니다.
1. ‘React Build’를 진행하다가 빌드 에러가 발생했을 때 ‘S3 배포'를 진행해도 의미가 없고 빌드된 파일이 없기 때문에 에러가 발생됩니다.
팀의 오정석님이 지적해 주셔서 위의 내용을 변경합니다.

step의 실행은 sequence하게 실행되기 때문에 위와 같은 문제가 발생되지는 않습니다. 다만 step을 job의 단위로 grouping하여 단위 테스트, E2E테스트, Lighthouse테스트를 병렬로 진행시킬 수 있습니다.
job은 각각의 runner에서 동작되기 때문에 속도 문제는 없고 제공해주는 시간을 엄청 빨리 소모하게 될거 같긴합니다.

2. deploy를 진행할 때 branch, server 별로 추가적인 작업을 하고자 할 때 구분하기가 쉽지 않습니다. 쉘 스크립트등으로 구분할 수 있지만 Github Actions에서 제공하는 기능으로 쉽게 해결 할 수 있습니다.

위의 해결 방법은 아래와 같이 진행해 보려고 합니다.
1. step들을 기능단위로 구분하여 job으로 grouping합니다.
-위의 예제에서는 ‘build’, ‘deploy to dev’, ‘deploy to prod’로 분류하였습니다.
2. build가 완료되고 나면 branch별로 deploy를 진행하게 합니다.
-build가 완료되고 deploy를 진행하게 하려면 jobs.<job_id>.needs를 사용하면 됩니다.
-branch별로 deploy job을 실행하려면 jobs.<job_id>.if를 사용하면 됩니다.
3. job간에는 데이터가 공유되지 않습니다.
-job은 runner위에서 동작되기 때문에 상태에 대한 것들이 공유 되지 않습니다.
-그렇다고 방법이 없는 것이 아닙니다. file을 통해 공유할 수 있습니다.
파일을 공유하는 방법은 artifact를 이용하는 것입니다.
-build job에서 build가 완료된 결과물을 upload artifact를 통하여 업로드하고
deploy job에서는 download artifact를 통하여 다운로드 받으면 됩니다.
upload artifact는 여러개를 만드실 수 있고 name을 통하여 upload, download
를 하시면 되고 path는 upload할 파일이 있는 경로를 지정하시면 됩니다.

위의 내용대로 코드를 작성하면 아래와 같습니다.

위의 코드로 진행하면 Github Actions에서 workflow를 눌러서 들어가서 확인하면 build job만 나오고 완료되면 branch별로 deploy_to_{branch}가 실행 됩니다.

job과 needs를 사용하고 develop branch에서 배포했을 때

예제는 https://github.com/seye2/github_actions_needs 에서 확인 하시면 됩니다.

--

--