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에 설치 한다.
이미 설치 되어있는 경우에 안해도 된다.
활성화 안함. 활성화 하면 배포중 트래픽 차단 및 허용을 자동으로 해줌
'일 > aws' 카테고리의 다른 글
Amazon EMR 구축 #2 :: 프로비저닝 (0) | 2022.02.01 |
---|---|
Amazon EMR 구축 #1 :: 개념 정리 (0) | 2022.02.01 |
AWS DMS Consistency Checking Application Concept (0) | 2022.01.11 |
AWS DMS :: from aurora mySQL to S3 (0) | 2021.12.06 |
[Python] AWS S3 Lifecycle 스토리지 클래스 변경 배치 (0) | 2021.08.28 |