AWS Pipeline 배포 자동화

CodeDeploy-Agent 설치 (EC2 인스턴스)


EC2 개발 환경 구축


1. JAVA 설치

  1. 패키지 정보를 업데이트

    sudo apt update

  2. java 설치

    sudo apt install openjdk-11-jre-headless

  3. 설치 확인

    java -version 자바 버전이 정상적으로 나오면 설치 완료


2. AWS CLI 설치

설치

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ sudo apt install unzip
$ unzip awscliv2.zip
$ sudo ./aws/install

설치 확인

aws --version

역시 버전이 보인다면 설치 완료!


3. CodeDeploy Agent 설치

설치

sudo apt update
sudo apt install ruby-full
sudo apt install wget
cd /home/ubuntu
sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
sudo chmod +x ./install
sudo ./install auto > /tmp/logfile

설치 확인

sudo service codedeploy-agent status

active(runnung)가 있다면 정상 설치 후 실행중이다!


EC2 인스턴스 역할 부여


1. IAM 역할 수정

인스턴스 선택 -> 보안 -> IAM

EC2

2. IAM 권한 추가

IAM

3. 신뢰관계 편집

IAM2


EC2를 사용한 파이프라인 구축


1. 파이프라인에 올릴 소스코드 준비 (로컬)


🚨주의할 점🚨

단순한 문제로 시간이 많이 끌릴 수 있다. 실수하지 않도록 조심해야 된다.

  1. 파일명에서 오타가 나지 않게 주의한다.
  2. 경로를 제대로 확인한다


appspec.yml 파일 추가

배포 자동화를 도와주는 CodeDeploy-Agent가 인식하는 파일

경로: [프로젝트명]/DeployServer

version: 0.0
os: linux

files:
  - source: /
    destination: /home/ubuntu/build

hooks:
  BeforeInstall:
    - location: server_clear.sh
      timeout: 3000
      runas: root
  AfterInstall:
    - location: initialize.sh
      timeout: 3000
      runas: root
  ApplicationStart:
    - location: server_start.sh
      timeout: 3000
      runas: root
  ApplicationStop:
    - location: server_stop.sh
      timeout: 3000
      runas: root


buildspec.yml 파일 추가

배포 자동화에서 빌드를 담당하는 CodeBuild-Agent가 인식하는 파일

경로: [프로젝트명]/DeployServer

version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto11
  build:
    commands:
      - echo Build Starting on `date`
      - cd DeployServer
      - chmod +x ./gradlew
      - ./gradlew build
  post_build:
    commands:
      - echo $(basename ./DeployServer/build/libs/*.jar)
artifacts:
  files:
    - DeployServer/build/libs/*.jar
    - DeployServer/scripts/**
    - DeployServer/appspec.yml
  discard-paths: yes

쉘 파일 생성

최상위에 scripts 디렉토리를 생성 -> initialize.sh, server_clear.sh, server_start.sh, server_stop.sh

파일 4개를 생성


scripts/initialize.sh

#!/usr/bin/env bash
chmod +x /home/ubuntu/build/**

scripts/server_clear.sh

#!/usr/bin/env bash
rm -rf /home/ubuntu/build

scripts/server_start.sh

#!/usr/bin/env bash
cd /home/ubuntu/build
sudo nohup java -jar DeployServer-0.0.1-SNAPSHOT.jar > /dev/null 2> /dev/null < /dev/null &

scripts/server_stop.sh

#!/usr/bin/env bash
sudo pkill -f 'java -jar'

AWS CodeDeploy 대시보드

1. 애플리케이션 생성

AWS CodeDeploy 대시보드 -> 애플리케이션 -> 애플리케이션 생성 EC2 2


이름입력 -> EC2/온프레스 옵션 선택 -> 애플리케이션 생성


2. 배포 그룹 생성

 배포 그룹 선택 -> 배포 그룹 생성 app


배포 그룹 이름 입력(리소스이름-group) -> 서비스 역할-> IAM 역할 선택 (EC2 인스턴스에 연결O)


 환경구성 -> EC2 인스턴스 선택 -> 태그 그룹 -> Name 태그 -> 발급받은 인스턴스 선택 app 2


로드 밸런싱 활성화 해제 -> 배포 그룹 생성


파이프라인 구축

1. 파이프라인 설정 선택

 AWS CodePipeline -> 파이프라인 생성 pipe

파이프라인 이름과 역할 이름을 규칙에 맞게 입력


2. 소스 스테이지 추가

소스: Github(버전2) pipe2

GitHub 연결 버튼 -> 연결 이름 임의로 입력 -> 연결


 새 앱 설치 클릭 pipe3

github 계정 클릭 -> Only select repositories -> 소스코드 사용할 리포지토리 선택 -> Install 클릭


 리포지토리와 브랜치 지정 -> CodePipeline 기본값 선택 -> 다음


3. 빌드 스테이지 추가

빌드 공급자 -> AWS CodeBuild 선택 build

프로젝트 생성 -> 프로젝트 이름 입력


환경설정 build2

Buildspec 이름: “DeployServer/buildspec.yml


CodePipeline으로 계속 -> 다음 클릭


4. 배포 스테이지 추가

빨간 상자 안에 정보를 모두 입력 pipe_deploy


설정을 확인 -> 파이프라인 생성 pipe_deploy2


파이프라인 생성 & 배포 자동 실행!!! pipe_deploy3


파이프라인 deploy 관련 로그 확인

$ cd  (경로가 홈에 있어야 됩니다)
$ cd /opt/codedeploy-agent/deployment-root/deployment-logs

log 파일 읽는 방법

  1. Vim이나 nano와 같은 편집기를 사용
  2. cat [파일명]: cat 명령어를 사용해서 파일을 바로 읽기