Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] 백엔드 CD 자동화 환경 구축 #67

Merged
merged 8 commits into from
Jul 25, 2024
Merged

[BE] 백엔드 CD 자동화 환경 구축 #67

merged 8 commits into from
Jul 25, 2024

Conversation

hw0603
Copy link
Member

@hw0603 hw0603 commented Jul 24, 2024

관련 이슈

작업 내용

백엔드 기능 구현 후 develop 브랜치에 머지되었을 때 배포 자동화 환경을 구축했습니다.
#59 에서 언급했던 것 처럼 현재는 개발서버에 대한 CD에 가까운데요, 이후 릴리즈 브랜치가 생기면 프로덕션 배포 자동화도 별개로 추가해야 할 듯 합니다!

develop 브랜치의 /backend 경로 하위에 변경사항이 발생할 경우 다음과 같은 순서로 배포를 진행합니다.

  1. bootJar 빌드
  2. jar을 포함한 Docker 이미지 빌드 후 Docker Hub 업로드
  3. EC2 인스턴스에서 Docker 이미지 pull -> 컨테이너 실행
  • 3번 작업은 EC2 인바운드 제한 정책을 준수하기 위해 self-hosted runner에서 동작합니다.

특이 사항

application.yml 과 같은 중요 프로퍼티를 외부에 공개하지 않기 위해 git submodule 을 사용합니다.
비공개 레포지토리는 /2024-momo-config이며, 변경사항 발생 시 pull 해야 하므로 프론트 크루분들도 함께 콜라보레이터로 초대해 두었습니다.

레포지토리 내 서브모듈의 경로는 다음과 같습니다.

/backend/src/main/resources/security

본 PR 병합 이후 develop에서 분기하는 브랜치의 application.yml은 서브모듈 내의 yml 파일로 관리해야 합니다.

서브모듈 내의 프로퍼티들을 classpath로 복사하기 위해 다음과 같은 Gradle task를 활용합니다.
해당 테스크는 .../resources/ 경로 내의 동일한 파일명을 가진 *.yml을 덮어 씀에 유의하세요.

tasks.register('copyYML', Copy) {
    from 'src/main/resources/security' // Submodule path
    include "*.yml"
    into 'src/main/resources'
}

로컬 레포지토리에 서브모듈 설정이 되어 있지 않다면 서브모듈을 직접 추가해야 합니다.

$ git submodule init
$ git submodule update --remote --merge  // 이후 서브모듈이 업데이트됐을 때, 명령으로 변경사항을 가져옵니다.

서브모듈은 원본 레포지토리와 독립된 하나의 레포지토리입니다.
원본 레포지토리는 서브모듈의 참조 해시 정보만을 가지고 있으므로, 서브모듈에 변경사항이 생긴 경우 항상 서브모듈부터 커밋 & 푸시 후 원본 레포지토리에 푸시해야 합니다.
(순서가 어긋날 경우 git diff 체크에서 서브모듈의 파일이 변경사항으로 감지되어 레포지토리가 꼬일 수 있어요🥲)

$ (momo) cd <path-to-submodule>
$ (momo-config) git commit -m "submodule 업데이트"
$ (momo-config) git push origin main
$ (momo) cd <path-to-parent-repo>
$ (momo) git commit -m "submodule 업데이트 반영"
$ (momo) git push origin <branch-name>

submodule 레퍼런스

리뷰 요구사항 (선택)

Github Action 의 on: push 트리거 특성 상, 레포지토리의 기본 브랜치(현재는 develop)에 워크플로우 파일이 머지되어야 Actions 탭에서 활성화됩니다.

PR 작성 시점에는 워크플로우를 직접 실행할 수 없어 테스트를 위해 부득이하게 트리거를 임시로 변경(5dbc9df) 한 후, 다시 복구 (4db6361) 해 뒀어요.
테스트 할 수 있는 만큼은 최대한 테스트 후 리뷰 요청 드리지만, 실제 문제가 없는지는 PR 머지 이후에 확인할 수 있을 것 같습니다😅


현재는 간단히 application.yml 하나로 설정을 관리하고 있지만, 이후 프로필이 다양해지거나 설정할 것들이 많아지면 application.yml.gitignore에서 해제하고, 중요 비밀들은 security 서브모듈 내의 yml 파일을 임포트하여 사용하는 방식을 취하면 좋을 것 같네요~

@hw0603 hw0603 added 🐈‍⬛ 백엔드 백엔드 관련 이슈에요 :) ⚙️ 환경설정 환경을 설정해요 :) 🐳 인프라 인프라를 구축해요 :) 🏡 집 가고 싶음 솔직히 집에 가고 싶어요 :( labels Jul 24, 2024
@hw0603 hw0603 added this to the 2차 데모데이 milestone Jul 24, 2024
@hw0603 hw0603 self-assigned this Jul 24, 2024
@hw0603 hw0603 marked this pull request as draft July 24, 2024 08:58
Copy link

github-actions bot commented Jul 24, 2024

Test Results

28 tests   28 ✅  3s ⏱️
10 suites   0 💤
10 files     0 ❌

Results for commit e4a3241.

♻️ This comment has been updated with latest results.

@hw0603 hw0603 marked this pull request as ready for review July 24, 2024 10:00
@hw0603 hw0603 force-pushed the feat/59-be-cd branch 2 times, most recently from e8134f5 to 578d3a6 Compare July 24, 2024 12:28
Copy link
Contributor

@ikjo39 ikjo39 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

컨텍스트 다 이해했습니다!
마크랑 페드로 모두 고생 많았어요🫡

Copy link
Contributor

@seokmyungham seokmyungham left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

와우 ㅋㅋ 페드로, 마크 고생하셨습니다 🎉🎉

Copy link
Contributor

@ehBeak ehBeak left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!👍

@hw0603 hw0603 merged commit 4c17f4d into develop Jul 25, 2024
10 checks passed
@hw0603 hw0603 deleted the feat/59-be-cd branch July 26, 2024 02:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
⚙️ 환경설정 환경을 설정해요 :) 🏡 집 가고 싶음 솔직히 집에 가고 싶어요 :( 🐈‍⬛ 백엔드 백엔드 관련 이슈에요 :) 🐳 인프라 인프라를 구축해요 :)
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

[BE] 서브모듈을 구축해요 :) [BE] 백엔드 CD 자동화 환경을 구축해요 :)
8 participants