웹서비스의 배포 과정은 코드를 수정하고 빌드와 테스트를 한 후 클라우드 서버에 올리는 과정의 반복이다. 이러한 반복적인 빌드, 테스트, 배포 과정을 대신 수행해 개발에 대해 더 집중할 수 있는 장점을 제공하는 자동화 과정을 CI/CD(Continuous Integration/Continuous Deployment)라고 한다.
개발과 운영이 합쳐진 단어로 개발로부터 배포로 진행되는 프로세스의 속도를 높이는 방식을 활용한 소프트웨어 개발 방법론으로 애자일 접근 방식을 적용하는 많은 팀들이 먼저 고려하는 사항으로 신속하고 지속적인 소프트웨어 제공을 목표하는 만큼 지속적인 통합 및 연속 배포를 하는 환경인 CI/CD를 구축하는 것이 DevOps에 있어 가장 중요한 요소라고 할 수 있다.
깃 브랜치에 수정된 코드를 푸시하면 빌드를 하고 테스트해서 통과하게 되면 통합하는 과정의 자동화를 의미하며 대표적인 관련 서비스로는 Jenkins, TravisCI, 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
배포 서버에 새로운 프로젝트를 반영하는 과정의 자동화를 의미하며 대표적인 서비스로는 AWS에서 제공되는 CodeDeploy가 있다.
wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto