HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🧚
[1기]최종 프로젝트 데브코스
/
🐳
[팀11] 모디
/
CI / CD 를 해보자

CI / CD 를 해보자

생성일
Nov 28, 2021 08:48 AM
태그
속성
안녕하세요 Rosa 입니다. 이번 주 주말에 진행했던 Github actions 와 codeDeploy 를 활용한 CI / CD 를 Poogle 에게 배웠을 때, 이 내용을 모두가 들으면 도움이 될만하다 생각해서 정리해 봤습니다.
EC2와 S3 버킷 생성은 이미 알고있을 듯 하여 내용에서 뻈습니다.
과정을 다음과 같습니다.
notion image

Github actions

github actions 는 푸시등의 레포지토리를 변경하는 작업이 일어날 때, 깃허브에서 제공해주는 컴퓨터를 통해서 빌드 등의 작업을 하는 것을 말합니다.
github actions 를 사용하려면 아래 사진같이 Actions 에 들어가서 Set up a workflow yourself 버튼을 누른 뒤에 생기는 ./.github/workflows/main.yaml 파일을 수정해주시면 됩니다
notion image
속성들은 아래와 같습니다.
  • name : workflow의 이름을 지정합니다.
  • on : 해당 workflow가 언제 실행될건지 트리거를 지정할 수 있습니다.
  • job, steps : workflow는 하나 이상의 job을 가지게 되고, job은 여러 step에 따라 단계를 나눌 수 있습니다.
  • run-on : 해당 workflow를 어떤 OS 환경에서 실행 할 것인지 지정할 수 있습니다.
notion image
이렇게 main.yaml (다른 이름도 가능, 저희는 deploy.yaml 이라는 이름을 사용했습니다) 을 만들면 on에서 지정한 트리거가 일어날 경우 main.yaml 파일에 적어놓은 steps 가 실행되게 됩니다.
저희의 yaml 파일은 아래 내용이 더 추가되었습니다.
notion image

codeDeploy

CodeDeploy는 아래와 같은 단계로 수행됩니다.
  1. 소스코드와 appspec.yaml 을 리포지토리에 push 한다.
  1. github actions를 이용하여 deployment를 트리거 한다.
  1. CodeDeploy를 polling 하고 있던 EC2 인스턴스는 트리거를 확인한다.
    1. polling
      폴링(polling)이란 하나의 장치(또는 프로그램)가 충돌 회피 또는 동기화 처리 등을 목적으로 다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 송수신 등의 자료처리를 하는 방식을 말한다.
  1. 리포지토리에서 소스코드와 appspec.yaml 파일을 받아와 deployment 명령을 수행한다.
 
deploy 명령을 수행하기 위해서는 EC2 내의 명령을 받아줄 CodeDeploy-agent 라는 프로그램이 필요합니다. 따라서 아래와 같은 명령어를 통해서 설치해줘야합니다.
그 다음, AWS CodeDeploy 어플리케이션을 생성해서 EC2 와 연결해줘야합니다.
세부 이미지
  1. CodeDeploy -> 어플리케이션 에 들어가 생성을 해줍니다.
notion image
  1. 어플리케이션 생성 후 배포 그룹 생성 버튼을 눌러 배포그룹을 생성해줘야합니다.
notion image
서비스 역할은 IAM 계정을 통해서 codeDeploy access 를 얻은 사용자이 있어야합니다.
notion image
그 후, 만들었던 EC2 인스턴스와 연결해줘야합니다.
notion image
많은 요청이 들어오지 않기 때문에 로드 벨런서는 껐습니다.
notion image
 
위에서 말한 것 처럼, appspec.yaml 파일을 통해서 배포 설정을 해줘야합니다. appspec.yaml 파일은 프로젝트 최상단에 생성시키면 됩니다.
마지막으로 shell script를 작성하여, 구체적인 배포 스크립트를 만들면 되겠습니다. 이 부분은 아직 하지못했기 때문에 차후에 진행하여 업로드 하겠습니다.
이번 내용은 설명을 위해 몇가지 단계를 빠르게 이야기 했습니다. 좀 더 자세한 단계를 알고 싶다면 아래 블로그를 통해서 확인하면 될 것 같습니다!
블로그 링크
https://isntyet.github.io/deploy/github-action과-aws-code-deploy를-이용하여-spring-boot-배포하기(1)/
 
# This is a basic workflow to help you get started with Actions name: CI # Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the main branch push: branches: [ main ] pull_request: branches: [ main ] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it #- uses: actions/checkout@v2 # Runs a single command using the runners shell - name: Run pwd run: pwd # Runs a set of commands using the runners shell - name: Run ls -al run: ls -al
steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 // JDK set up - name: Set up JDK 1.11 uses: actions/setup-java@v1 with: java-version: 1.11 // gradlew 실행권한 추가 - name: Grant execute permission for gradlew run: chmod +x ./gradlew shell: bash // gradle 빌드 명령 - name: Build with Gradle run: ./gradlew build shell: bash - name: Make zip file run: zip -r ./$GITHUB_SHA.zip . shell: bash // AWS IAM credentials - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_REGION }} // s3에 업로드하는 aws cli 명령어 - name: Upload to S3 run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip // code deploy를 진행하는 aws cli 명령어 - name: Code Deploy run: aws deploy create-deployment --application-name modi-github-actions-deploy --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name modi-codeDeploy-s3-group --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=$GITHUB_SHA.zip
# 패키지 매니저 업데이트, ruby 설치 sudo yum update sudo yum install ruby sudo yum install wget # 서울 리전에 있는 CodeDeploy 리소스 키트 파일 다운로드 cd /home/ubuntu wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install # 설치 파일에 실행 권한 부여 chmod +x ./install # 설치 진행 및 Agent 상태 확인 sudo ./install auto sudo service codedeploy-agent status
version: 0.0 os: linux files: - source: / destination: /home/ubuntu/action overwrite: yes permissions: - object: / pattern: "**" owner: ubuntu group: ubuntu