ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로젝트 구조 변경을 CI/CD 파이프라인에 반영하기
    인프라/aws 2024. 4. 25. 18:06

     

    기존의 싱글 모듈 프로젝트에서 CI/CD를 구축해 두었습니다. 이 프로젝트를 멀티 모듈 형태로 변경하면서 기존 프로젝트의 경로가 변경되었습니다. 이 변경된 내용을 Dockerfile과 각종 yml에 반영하는 과정을 메모합니다.


     

    이 글은 아래와 같은 순서로 작성되었습니다.

    1. 현재 상황

    2. 파이프라인 스테이지별 수정사항 반영

    3. 정리하기

     

     

    1. 현재 상황

    왼쪽의 이미지는 현재 구성되어있는 파이프라인의 모습이고 오른쪽은 프로젝트의 폴더 구조입니다.

    이전에 root 경로에 있던 quiz_service의 파일들이 ./quiz_service로 이동된 모습입니다.

     

     

     

     

    2. 파이프라인 스테이지별 수정사항 반영

    1. Source Stage

    우선 깃 브랜치 전략부터 변경이 필요했습니다. 기존에 main < develop < feature 순으로 머지하도록 작업을 했는데, 이제는 각 서비스별로 main < develop < feature를 둬야할 것 같습니다. quiz_service/main < quiz_service/dev < quiz_service/feature/작업 의 형태로 사용하기로 하였습니다.

    ( 현재는 dev 환경의 파이프라인을 구성 중이기 때문에 Source에서는 quiz_service/dev 를 바라봅니다.)

     

    2. Test Stage

    우선 CodeBuild에 가서 testspec.yml을 바라보는 경로를 ./quiz_service/testspec.yml으로 변경해줍니다.

     

     

     

    그리고 S3에서 가져오는 application.yml이 저장될 경로를 수정하고, 테스트 명령어도 변경해줍니다.

     

     

     

    3. Build Stage

    마찬가지로 CodeBuild에서 buildspec.yml 경로를 수정해줍니다.

     

     

    그리고 buildspec.yml에서 build 명령어를 변경해줍니다. 

    기존에는 Dockerfile을 루트 경로에서 찾았지만, -f 를 사용해서 ./quiz_service/Dockerfile 을 찾도록 합니다.

    # 기존 명령어
    - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG
    
    # 수정 후 명령어
    - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG -f ./quiz_service/Dockerfile ./

     

     

    이어서 Dockerfile의 경로들도 수정을 해줍니다.

    /workspace/app 경로에 /global 과 /quiz_service를 복사해줍니다.

     

    빌드 명령어도 수정해줍니다.

    # 수정 전
    ./gradlew build -x test
    
    # 수정 후
    ./gradlew :quiz_service:build -x test
    
    
    # 이렇게도 가능
    ./gradlew -p ./quiz_service build -x test

     

     

    4. Deploy Stage

    CodeDeploy는 프로젝트의 루트경로에서 appspec.yml을 찾습니다. 지금은 appspec.yml이 ./quiz_service에 있기 때문에 pipeline의 특정 단계에서 appspec.yml을 루트 경로로 변경해주어야합니다.

    ( CodeBuild는 **spec.yml 의 경로를 지정할 수 있지만 CodeDeploy는 안됩니다 ㅜ)

     

    2. Test Stage에서 사용하고 있는 testspec.yml에 post_build 단계를 추가하였습니다.

     

     

    그리고 appspec.yml 코드에서 사용하는 script의 경로도 변경해줍니다.

     

     

    3. 정리하기

    기억이 선명할 때 production에 적용되어있는 pipeline 까지 모두 수정을 해줍니다.

    production의 source는 quiz_service/main을 바라보도록 변경해주었습니다.

     

     

Designed by Tistory.