개발

SWM 프로젝트에서 쉽게 PR 검증

배우겠습니다 2024. 8. 15. 16:59

조건

  1. 중간발표, 새로운 피쳐 기획 및 개발로 인해 이 작업에서 많은 시간을 쏟기 어렵다(우선순위에서 밀린다)
  2. CI 자체가 많은 시간이 걸리면 안된다(PR 템플릿의 내용을 채우는 시간 고려해서 총 4분 이내면 좋을 것이다)

    문제 제시

  • 배포 작업을 백엔드 팀원이 수행했으나, 역시나 많은 난관이 생겼다. 하지만, 이것이 프로젝트 자체 코드의 문제인지 AWS infra 문제인지 알기 어려웠고, 이를 해결하기 위해 일일히 PR을 날리고 로컬에서 빌드하며 검증을 해야했다. 이 작업에서 많은 시간 및 커뮤니케이션 병목이 발생했다.

    문제 판단

  1. 빌드 정도는 PR때 쉽고 빠르게 검증할 수 있다고 생각한다. 결론적으로 빌드가 성공하면 (AWS infra문제가 아니라면)배포가 된다
  2. E2E 유닛 통합테스트까지는 인력과 시간이 부족하다 우린 빠른시간안에 3명의 인원으로 MVP를 만들어야한다(문제는 개발 외 업무도 많다)
  3. 로컬기준 빌드 타임을 볼때, PR 템플릿을 다 작성하기 전 완료될 것이다. github actions 환경에서도 같을 것이라 생각한다.
  4. 모노레포이므로 빌드 검증으로 이 문제를 해결할 수 있을 것이다.

    문제해결

  • API-SERVER, FRONT-END, SOCKET-SERVER를 빌드해 에러를 검출한다

    작동 시점

    name: Build-test
    

on:
pull_request:
branches: [dev]
types: ["opened", "synchronize"]

* default branch(이하 dev)로 PR이 열리거나(오픈) 추가 커밋이 날아오면(싱크로나이즈) 작동한다
#### jobs
```yml
jobs:
  build-front-end:
    if: contains(github.event.pull_request.changed_files, 'packages/front-end/')
    runs-on: ubuntu-latest
  • 각각의 프로젝트를 빌드할 job을 정의

  • 단 각각의 workspace 내부 파일에 작업이 일어날때만 해당 workspace build test가 작동하도록 했다.

    set each jobs

        - name: Checkout code
          uses: actions/checkout@v2
    
        - name: Set up Node.js
          uses: actions/setup-node@v2
          with:
            node-version: "20"
            cache: "yarn"
    
        - name: Enable Corepack
          run: corepack enable
    
        - name: Set Yarn version
          run: corepack prepare yarn@4.3.1 --activate
    
        - name: Install dependencies
          run: yarn install
          env:
            YARN_ENABLE_HARDENED_MODE: 0
  • 프로젝트와 동일한 node20및 yarn4.3.1버전을 세팅한다

  • 의존성을 설치한다. public repo기준 HARDEND_MODE가 작동해 json5 패키지 버전이 충돌이 발생했다.

    • 아쉽게도, 해결하지 못한 이슈라 부채로 남겨두기로 했다.
    • 우선 HARDEND_MODE를 해제했다.

      빌드

        - name: Build front-end
          run: yarn front-end run build
  • 각각의 빌드 스크립트를 작성한다.