devwithpug / RandHand-Chat

[랜손챗] 과학기술정보통신부 주최 / 2021 공개SW 개발자대회 은상 수상작
7 stars 4 forks source link

Github Actions CI 워크플로우를 병렬적으로 구성 #60

Closed devwithpug closed 3 years ago

devwithpug commented 3 years ago

1. 이슈 내용

Github Actions 의 CI 워크플로우 구성이 비효율적인 문제 마이크로 서비스를 하나하나 순차적으로 빌드하는 구성 -> 시간이 너무 많이 소요됨(5~7분 가량) 병렬적으로 각각의 job을 분할하여 CI 워크플로우 구성이 필요함

2. 작업 할 위치

.github/workflows/**

3. 작업 목표

(1) job matrix를 이용한 방법으로 구현해보기 참고 (1) (2) 이번 기회를 통해 Github Actions 워크플로우에 대해 자세히 알아보기

devwithpug commented 3 years ago

job matrix

찾아본 결과 동일한 워크플로우에 대해 설정값, OS 환경 등을 다르게 구성하여 한번에 job을 효과적으로 여러번 돌릴 수 있는 방법이었다. 현재 랜손챗 CI 워크플로우의 문제점은 각각의 서비스들을 병렬적으로 build & push 해야한다는 점이었기 때문에 matrix 는 적용이 어려워 보였다.

job.needs

job matrix와 관련된 자료들을 찾던 중 job.needs 값이 설정가능하다는 것을 알게되었고 하나의 job에 step들을 나누어 설정하는 것이 아니라 애초에 여러개의 job으로 yaml 파일을 구성하면 Github Actions에서 자동으로 각각의 job들을 병렬적으로 수행해준다는 것을 알게되었다. (왜 이제 알았을까..ㅎㅎ)

적용

먼저, 기존에 steps에 한꺼번에 들어가있던 모든 빌드 라인들을 각각의 job으로 구성하였다. 그리고 모든 프로젝트가 build & push가 완료된 후 CodeDeploy에 트리거를 발동하도록 needs 값을 추가해주었다.

  ci:
    runs-on: ubuntu-latest
    needs: [eureka, config, gateway, chat, gesture]
    steps:
    - name: EC2 인스턴스 내부의 CodeDeploy 트리거 발동
      run: aws deploy --region ap-northeast-2 create-deployment --application-name CodeDeploy-application-randhand --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name CodeDeploy-group-randhand --github-location repository=devwithpug/RandHand-Chat,commitId=${GITHUB_SHA}
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        Default_region_name: ap-northeast-2

parallel jobs 결과

image

여러개의 job 으로 나누어 병렬적으로 프로젝트 빌드를 수행 소요 시간을 약 50% 줄일 수 있었다!

CodeDeploy 정상 작동 확인

image