현재 상황

Github Actions를 사용하고 있었고 현재는 배포 기능만 구현된 상태로 진행하고 있었다.

main 브랜치에 변경 사항이 merge 되면 Deploy Action이 실행되고 서버에서 빌드 후 배포 하는 과정을 거친다.

요구 사항

이렇게 CD만 구현한 상태로 개발을 진행하다보니 중간중간 빌드가 되지 않는 코드들이 메인 브랜치로 들어가게 되는 문제가 발생하였고 해당 문제를 해결하기 위한 임시 브랜치나, 아주 작은 별로 큰 의미가 없는 커밋들이 생기게 되는 문제가 있었다. 하지만 팀의 목표인 안정적인 채점 서버 구현을 위해 포기를 하고 넘어갔었지만 꼭 CI를 구현해보고 싶었기 때문에 이번 기회에 진행을 하게 되었다.

Pull Request를 날리고 해당 PR로 작성된 코드들이 빌드가 되는 코드인지, 문제가 없는 코드인지 테스트 하는 과정을 추가하는 목표를 가지고 시작했다. 그 후 최적화를 할 수 있으면 할 수 있도록 구성하는 목표를 잡았다.

기본 구축

Pull Request에서 Action 발생시키기

Github Actions에서 workflow를 실행시키는 트리거들의 목록에서 PR과 관련된 내용을 적용시켰다. 아무런 설정을 하지 않는다면 pull request는 opened, synchronize, reopened 이벤트가 발생한 경우 workflow를 실행시킨다. opened, reopened는 PR에서 쉽게 볼 수 있는 상태들과 일치하고 synchronize는 PR을 생성한 다음 로컬에서 새로운 내용을 commit하고 push한 경우 PR과 자동으로 동기화가 되는데 이 때를 의미한다.

actions/checkout

actions/checkout은 많은 actions에서 처음 단계로 많이 사용한다. 이름에서 알 수 있듯이 checkout을 해주는 역할을 한다. Actions 탭에서 로그를 확인하면 actions/checkout이 하는 일들을 확인할 수 있다.

  1. 깃 버전 확인
  2. 프로젝트를 저장할 폴더를 safe directory로 설정
  3. 프로젝트를 저장할 폴더를 git init로 초기화
  4. remote로 저장소 추가
  5. git 설정에 gc 비활성화
  6. 인증을 위한 정보 설정
  7. 저장소 fetch
  8. checkout

actions/setup-node