CI/CD

코끼릭·2022년 6월 19일
0

IT

목록 보기
11/24
post-thumbnail

CI/CD

웹서비스의 배포 과정은 코드를 수정하고 빌드와 테스트를 한 후 클라우드 서버에 올리는 과정의 반복이다. 이러한 반복적인 빌드, 테스트, 배포 과정을 대신 수행해 개발에 대해 더 집중할 수 있는 장점을 제공하는 자동화 과정을 CI/CD(Continuous Integration/Continuous Deployment)라고 한다.

DevOps

개발과 운영이 합쳐진 단어로 개발로부터 배포로 진행되는 프로세스의 속도를 높이는 방식을 활용한 소프트웨어 개발 방법론으로 애자일 접근 방식을 적용하는 많은 팀들이 먼저 고려하는 사항으로 신속하고 지속적인 소프트웨어 제공을 목표하는 만큼 지속적인 통합 및 연속 배포를 하는 환경인 CI/CD를 구축하는 것이 DevOps에 있어 가장 중요한 요소라고 할 수 있다.

CI(Continuous Integration)

깃 브랜치에 수정된 코드를 푸시하면 빌드를 하고 테스트해서 통과하게 되면 통합하는 과정의 자동화를 의미하며 대표적인 관련 서비스로는 Jenkins, TravisCI, Github Actions 등이 있다.

Github Actions

Github 레포와 관련된 이벤트를 감지하고 레포에 저장된 프로젝트에 대해 일련의 빌드, 테스트, 업로드와 같은 작업을 수행할 수 있는 자동화 서비스로 .yml 파일 형태로 스크립트로 작성하고 지정한 이벤트가 감지될 경우 스크립트에서 정의한 작업들의 목록을 자동으로 수행해준다.

name: 예제 파일

//workflow가 시작되는 조건 정보
on:
  push:
    branches: [ "main" ]

//수행할 job 목록
jobs:

  //빌드와 업로드를 수행하는 job
  build_upload:
    runs-on: ubuntu-latest

    steps:
    - name: setting checkout
      uses: actions/checkout@v3
      
    //자바 개발 환경 설정      
    - name: Set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'

    //gradlew에 대한 실행 권한 부여
    - name: execution permission for gradlew
      run: chmod +x gradlew
      shell: bash
      
    - name: Build with Gradle
      run: ./gradlew build
      shell: bash
      
    //S3에 .zip 형태로 올려야 배포가 됨  
    - name: Make zip file
      run: zip -qq -r ./${{secrets.PROJECT}}.zip .
      shell: bash

CD(Continuous Deployment)

배포 서버에 새로운 프로젝트를 반영하는 과정의 자동화를 의미하며 대표적인 서비스로는 AWS에서 제공되는 CodeDeploy가 있다.

실제 CI/CD 동작 과정

  1. Github main branch push 이벤트 감지
  2. Github actions은 yml에 작성한 작업 수행
    • 빌드와 테스트를 수행할 수 있는 서버 환경 세팅
    • 성공적으로 테스트가 수행되면 슬랙 웹훅을 이용해 알림 메세지 전송
    • 빌드 결과를 압축해 S3에 업로드
  3. AWS CodePipeline에서 S3의 배포 프로젝트 변화 감지
  4. CodePipeline에서의 Deploy 과정 수행
  5. CodeDeploy에서 지정한 EC2에 빌드된 프로젝트 업로드
  6. yml에 작성된 업로드 후 수행되어야 하는 서비스의 재실행 과정 수행
  7. 새로운 수정사항이 반영된 서비스의 배포 완료

AWS를 활용한 CI/CD 파이프라인 세팅 과정

  1. 서비스 배포에 사용되는 EC2 생성
  • AmazonEC2RoleforAWSCodeDeploy 역할를 생성한 인스턴스에 부여
  • 생성한 인스턴스에 CodeDeploy agent 설치
    wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
    chmod +x ./install
    sudo ./install auto
  1. 빌드된 프로젝트를 업로드할 S3 버킷 생성
  2. CodeDeploy에서 배포할 서버로 1의 서버 등록
  • 배포그룹에 대한 CodeDeploy 역할 부여
  1. CodePipeline 세팅
  • Source Provider로 2의 S3와 프로젝트 파일명 등록
  • Deploy Provider로 3의 CodeDeploy 등록
  1. Github Actions에서 수행되는 workflow.yml 작성
  • 푸시 이벤트가 발생할 때 트리거 되도록 세팅
  • 빌드, 테스트 환경 세팅
  • 빌드 성공시 S3에 업로드 수행
  • 슬랙 알림 메세지 전송
  1. CodeDeploy에서 수행되는 appspec.yml 작성
  • 배포된 프로젝트의 업로드 위치 설정과 수행된 스크립트 지정
  1. deploy.sh 작성
  • 기존 프로젝트를 종료하고 변경된 프로젝트를 실행하는 스크립트 작성

CI/CD 실습 프로젝트 깃허브

profile
ㅇㅅㅇ

0개의 댓글