본문 바로가기
일/aws

AWS Code Deploy + Jenkins + GitLab

by blair2dev 2022. 1. 4.

AWS Code Deploy

 

사용자 -> 젠킨스 -> s3 배포, code deploy 실행 

-> codeDeploy 가 배포그룹에 등록된 ec2 에 설치된 에이전트 를 실행

-> codeDeploy 에이전트가 (s3 -> ec2) 복사 진행

-> codeDeploy 에이전트가 appspec.yml  실행 

-> appspec.yml 에 정의된 스크립트 실행 

-> 배포 완료

 

Jenkins 아이템 만들기 

 

 

 

 

 

codeDeploy 는 appspec.yml 을 통해 배포 위치, 실행할 스크립트를 관리한다. 

프로젝트 트리의 최상단에 위치 시킨다. 

 

 

서버에 ${DMSCONSISTENCY_DEPLOY_HOME}/src  이 경로가 존재 해야 함

 

sudo su - 

env 에 DMSCONSISTENCY_DEPLOY_HOME 나와야 함

~/.bashrc 여기에 정의 한다. 

 

 

appspec.yml  

=========================================================

# This is an appspec.yml template file for use with an EC2/온프레미스 deployment in CodeDeploy.

# The lines in this template starting with the hashtag symbol are

#   instructional comments and can be safely left in the file or

#   ignored.

# For help completing this file, see the "AppSpec File Reference" in the

#   "CodeDeploy User Guide" at

#   https://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref.html

version: 0.0

# Specify "os: linux" if this revision targets Amazon Linux,

#   Red Hat Enterprise Linux (RHEL), or Ubuntu Server

#   instances.

# Specify "os: windows" if this revision targets Windows Server instances.

# (You cannot specify both "os: linux" and "os: windows".)

os: linux

# os: windows

# During the Install deployment lifecycle event (which occurs between the

#   BeforeInstall and AfterInstall events), copy the specified files

#   in "source" starting from the root of the revision's file bundle

#   to "destination" on the Amazon EC2 instance.

# Specify multiple "source" and "destination" pairs if you want to copy

#   from multiple sources or to multiple destinations.

# If you are not copying any files to the Amazon EC2 instance, then remove the

#   "files" section altogether. A blank or incomplete "files" section

#   may cause associated deployments to fail.

files:

  - source: /

    destination: /root/app

    overwrite: true

hooks:

  BeforeInstall:

    - location: script/before_install.sh

      timeout: 180

  AfterInstall:

    - location: script/after_install.sh

      timeout: 180

=========================================================

 

 

before_install.sh

=========================================================

#!/bin/bash

 

source ~/.bashrc

set -e

 

DETAIL_PATH="${APPLICATION_NAME}/${DEPLOYMENT_GROUP_NAME}"

DOWN_PATH="${APPLICATION_NAME}/${DEPLOYMENT_GROUP_NAME}/release/${DEPLOYMENT_ID}"

echo ${DETAIL_PATH}

if [[ ${DEPLOY_PATH} ]]; then

  APP_HOME="${DEPLOY_PATH}/ncl/app"

else

  if [[ ${SPARK_USER} ]]; then

    APP_HOME="/home/${SPARK_USER}/spark"

  else

    APP_HOME="/root/spark"

  fi

fi

CURRENT_LINK="${APP_HOME}/${DETAIL_PATH}/latest"

PREVIOUS_LINK="${APP_HOME}/${DETAIL_PATH}/before"

 

 

#if [ -d ${DOWN_PATH} ]

#then

#  echo "DELETE ${DOWN_PATH}"

#  echo "mkdir -p ${DOWN_PATH}"

#  rm -rf ${DOWN_PATH}

#fi

 

mkdir -p ${APP_HOME}/${DOWN_PATH}

 

echo "unlink ${PREVIOUS_LINK}"

unlink "${PREVIOUS_LINK}" || true

 

echo "mv ${CURRENT_LINK} ${PREVIOUS_LINK}"

 

mv ${CURRENT_LINK} ${PREVIOUS_LINK} || true

 

if [[ ${SPARK_USER} ]]; then

  chown -R ${SPARK_USER}:${SPARK_USER} ${APP_HOME}/${DETAIL_PATH}

fi

=========================================================

 

 

after_install.sh

=========================================================

#!/bin/bash

 

source ~/.bashrc

set -e

 

DETAIL_PATH="${APPLICATION_NAME}/${DEPLOYMENT_GROUP_NAME}"

DOWN_PATH="${APPLICATION_NAME}/${DEPLOYMENT_GROUP_NAME}/release/${DEPLOYMENT_ID}"

 

echo ${DETAIL_PATH}

if [[ ${DEPLOY_PATH} ]]; then

  APP_HOME="${DEPLOY_PATH}/ncl/app"

else

  if [[ ${SPARK_USER} ]]; then

    APP_HOME="/home/${SPARK_USER}/spark"

  else

    APP_HOME="/root/spark"

  fi

fi

CURRENT_LINK="${APP_HOME}/${DETAIL_PATH}/latest"

PREVIOUS_LINK="${APP_HOME}/${DETAIL_PATH}/before"

 

 

#if [ -d ${DOWN_PATH} ]

#then

#  echo "DELETE ${DOWN_PATH}"

#  echo "mkdir -p ${DOWN_PATH}"

#  rm -rf ${DOWN_PATH}

#fi

 

 

echo "mv -f /root/app/* ${APP_HOME}/${DOWN_PATH}"

mv -f /root/app/* ${APP_HOME}/${DOWN_PATH}

 

ln -sfT ${APP_HOME}/${DOWN_PATH} ${CURRENT_LINK}

 

if [[ ${SPARK_USER} ]]; then

  chown -R ${SPARK_USER}:${SPARK_USER} ${APP_HOME}/${DETAIL_PATH}

fi

=========================================================

 

 

 

 

 

애플리케이션은 배포될 애플리케이션을 의미한다. 

 

배포그룹 생성 클릭

배포그룹은 배포가 될 위치(인스턴스) 집합을 의미한다. 

 

 

현재위치 : 배포 중 서비스가 잠시 중단된다. 

블루/그린 : 무중단 배포를 위해 새로운 인스턴스에 배포 후 로드벨런서에 이전 인스턴스 연결과 교체한다.

 

 

태그 값에 맞는 ec2 에 배포된다.

Code Deploy 에이전트 설치옵션으로 해당하는 ec2에 설치 한다. 

이미 설치 되어있는 경우에 안해도 된다. 

 

 

활성화 안함.  활성화 하면 배포중 트래픽 차단 및 허용을 자동으로 해줌