CMP 포털 빌드 및 원격 배포 자동화 Bash 스크립트 실무

💡 핵심 요약 (Executive Summary)

본 가이드는 bash cmp build deploy.sh 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.

📑 Table of Contents
Enterprise Cloud/build-deploy.sh
bash
#!/bin/sh

VERSION=v3.0.

# ALL
APP_NAME=(admin-app dashboard-app openstack-app admin-api dashboard-api openstack-api cloud-service-broker service-catalog-engine)
# APP
#APP_NAME=(admin-app dashboard-app openstack-app)
# API 
#APP_NAME=(admin-api dashboard-api openstack-api)
# Service
#APP_NAME=(cloud-service-broker service-catalog-engine)

function getAppPath() {
  case $1 in
    "admin-app") echo "AdminApp";;
    "admin-api") echo "AdminApi";;
    "dashboard-app") echo "DashboardApp";;
    "dashboard-api") echo "DashboardApi";;
    "openstack-app") echo "OpenStackApp";;
    "openstack-api") echo "OpenStackApi";;
    "cloud-service-broker") echo "CloudServiceBroker";;
    "service-catalog-engine") echo "ServiceCatalogEngine";;
  esac
}

APP_COUNT=${#APP_NAME[@]}
SET=$( seq 0 $(($APP_COUNT-1)) )
echo "APP_COUNT: $APP_COUNT"

# send to product repository
if [ $1 = "prod_deploy" ]; then
  export TAG=$VERSION
  export PROFILE=prod
  export REGISTRY=harbor.hanacloudia.com:31443/stg-portal
  bash ./build-deploy.sh release
  bash ./build-deploy.sh mbuild
  bash ./build-deploy.sh dbuild
  # 전송속도 이슈로 개발환경에서 진행
  bash ./build-deploy.sh push
  bash ./build-deploy.sh package
  # 전송속도 이슈로 폐기
  #export REGISTRY=registry.hanacloudia.com:443/cmp-portal
  #bash ./build-deploy.sh save
  #bash ./build-deploy.sh sendToRepo
fi

if [ $1 = "prod_deploy_skip_push" ]; then
  export TAG=$VERSION
  export PROFILE=prod
  export REGISTRY=harbor.hanacloudia.com:31443/stg-portal
  bash ./build-deploy.sh mbuild
  bash ./build-deploy.sh dbuild
  # 전송속도 이슈로 개발환경에서 진행
  bash ./build-deploy.sh push
  bash ./build-deploy.sh package
  # 전송속도 이슈로 폐기
  #export REGISTRY=registry.hanacloudia.com:443/cmp-portal
  #bash ./build-deploy.sh save
  #bash ./build-deploy.sh sendToRepo
fi

# send and deploy to dev k8s
if [ $1 = "dev_deploy" ]; then
  export TAG=latest
  export PROFILE=dev
  export REGISTRY=harbor.hanacloudia.com:31443/dev-portal
  bash ./build-deploy.sh mbuild
  bash ./build-deploy.sh dbuild
  bash ./build-deploy.sh push
  bash ./build-deploy.sh deploy_dev
fi

if [ $1 = "stg_deploy" ]; then
  export TAG=$VERSION
  export PROFILE=prod
  export REGISTRY=harbor.hanacloudia.com:31443/stg-portal
  bash ./build-deploy.sh mbuild
  bash ./build-deploy.sh dbuild
  bash ./build-deploy.sh push
  bash ./build-deploy.sh deploy_stg
fi


# MAVEN BUILD 
if [ $1 = "mbuild" ]; then
	# 1.mvn build
	echo ---mvn build---
	
	for i in $SET
	do
	    rm -rf ./$(getAppPath ${APP_NAME[$i]})/target
			mvn -P $PROFILE -f ./$(getAppPath ${APP_NAME[$i]})/pom.xml clean package
	done
fi

# DOCKER BUILD 
if [ $1 = "dbuild" ]; then
	# 1.docker build
	echo ---DOCKER build---
	
	for i in $SET
	do
			docker-buildx build --platform linux/amd64  -t $REGISTRY/${APP_NAME[$i]}:$TAG ./$(getAppPath ${APP_NAME[$i]})
	done
	
	# 2.docker images 
  echo ---DOCKER images...---
	docker images | grep $REGISTRY
fi

# DOCKER SAVE
if [ $1 = "save" ]; then
  rm -rf ./temp
  mkdir ./temp
  cd ./temp

	# 1.docker save
	for i in $SET
	do
			echo ---docker save ${APP_NAME[$i]} ---
			docker save -o ${APP_NAME[$i]}.tar $REGISTRY/${APP_NAME[$i]}:$TAG
	done
fi

# DEPLOY
if [ $1 = "sendToRepo" ]; then
	cd ./temp
	TARGET_REPO=sychoi@<PUBLIC_IP_REDACTED>
	TARGET_SSH_PORT=7522
	TARGET_DIR=html/cmp/$TAG

	ssh -p $TARGET_SSH_PORT $TARGET_REPO rm -rf $TARGET_DIR
	ssh -p $TARGET_SSH_PORT $TARGET_REPO mkdir $TARGET_DIR

	for i in $SET
	do
			echo ---send images ${APP_NAME[$i]} ---
			scp -P $TARGET_SSH_PORT ${APP_NAME[$i]}.tar $TARGET_REPO:$TARGET_DIR/
			ssh -p $TARGET_SSH_PORT $TARGET_REPO chmod 777 $TARGET_DIR/${APP_NAME[$i]}.tar
	done
	ssh -p $TARGET_SSH_PORT $TARGET_REPO ls -al $TARGET_DIR/
fi


if [ $1 = "deployToK8s" ]; then
	cd ./temp
	[email protected]
	TARGET_SSH_PORT=22
	TARGET_DIR=deploy/Enterprise Cloud

	ssh -p $TARGET_SSH_PORT $TARGET_REPO rm -rf $TARGET_DIR
	ssh -p $TARGET_SSH_PORT $TARGET_REPO mkdir $TARGET_DIR

	for i in $SET
	do
			echo ---send images ${APP_NAME[$i]} ---
			scp -P $TARGET_SSH_PORT ${APP_NAME[$i]}.tar $TARGET_REPO:$TARGET_DIR/
			ssh -p $TARGET_SSH_PORT $TARGET_REPO chmod 777 $TARGET_DIR/${APP_NAME[$i]}.tar
	done
fi

# DOCKER LOAD
if [ $1 = "load" ]; then
	# 1.docker load 	
	for i in $SET
	do
			echo ---docker load ${APP_NAME[$i]} ---
			docker load -i ${APP_NAME[$i]}.tar
	done
fi


# DOCKER PUSH
if [ $1 = "push" ]; then
	# 1.docker push 	
	for i in $SET
	do
			echo ---docker push ${APP_NAME[$i]} ---
			docker push $REGISTRY/${APP_NAME[$i]}:$TAG
	done
fi

if [ $1 = "deploy_dev" ]; then
	[email protected]
	TARGET_SSH_PORT=22
	for i in $SET
	do
      ssh -p $TARGET_SSH_PORT $TARGET_REPO bash ./deploy/__deploy_to_k8s.sh ${APP_NAME[$i]}
	done
fi

if [ $1 = "deploy_stg" ]; then
	[email protected]
	TARGET_SSH_PORT=22
	for i in $SET
	do
      ssh -p $TARGET_SSH_PORT $TARGET_REPO bash ./deploy/__deploy_to_k8s_stg.sh ${APP_NAME[$i]} ${TAG}
	done
fi

if [ $1 = "release" ]; then
  git checkout develop
  git fetch
  git pull
  git branch release/${VERSION}
  git checkout release/${VERSION}
  git push --set-upstream origin release/${VERSION}
fi

if [ $1 = "package" ]; then
	[email protected]
	TARGET_SSH_PORT=22
	for i in $SET
	do
      ssh -p $TARGET_SSH_PORT $TARGET_REPO bash ./deploy/__package_prod.sh ${APP_NAME[$i]} ${TAG}
	done
fi
Enterprise Cloud-si/build-deploy.sh
bash
#!/bin/sh

VERSION=v3.0.
APP_NAME=(user-Enterprise Cloud-app admin-Enterprise Cloud-app Enterprise Cloud-api user-api user-app)

function getAppPath() {
  case $1 in
    "user-Enterprise Cloud-app") echo "Enterprise CloudApp";;
    "admin-Enterprise Cloud-app") echo "Enterprise CloudApp";;
    "Enterprise Cloud-api") echo "Enterprise CloudApi";;
    "user-api") echo "UserApi";;
    "user-app") echo "UserApp";;
  esac
}

APP_COUNT=${#APP_NAME[@]}
SET=$( seq 0 $(($APP_COUNT-1)) )
echo "APP_COUNT: $APP_COUNT"
echo "SET: $SET"

if [ $1 = "prod_deploy" ]; then
  	[email protected]
  	TARGET_SSH_PORT=22
    ssh -p $TARGET_SSH_PORT $TARGET_REPO bash ./deploy/__package_prod-si.sh ${VERSION}
fi
if [ $1 = "prod_deploy_skip_push" ]; then
  	[email protected]
  	TARGET_SSH_PORT=22
    ssh -p $TARGET_SSH_PORT $TARGET_REPO bash ./deploy/__package_prod-si_skip-push.sh ${VERSION}
fi
# send and deploy to dev k8s
if [ $1 = "dev_deploy" ]; then
  export TAG=latest
  export REGISTRY=harbor.hanacloudia.com:31443/dev-portal
  export ACTIVE_PROFILE=dev
  bash ./build-deploy.sh mbuild
  bash ./build-deploy.sh dbuild
  bash ./build-deploy.sh push
  bash ./build-deploy.sh deploy_dev
fi
if [ $1 = "stg_deploy" ]; then
  export TAG=$VERSION
  export REGISTRY=harbor.hanacloudia.com:31443/stg-portal
  export ACTIVE_PROFILE=prod
  bash ./build-deploy.sh mbuild
  bash ./build-deploy.sh dbuild
  bash ./build-deploy.sh push
  bash ./build-deploy.sh deploy_stg
fi


# MAVEN BUILD 
if [ $1 = "mbuild" ]; then
	# 1.mvn build
	echo ---mvn build---
	
	for i in $SET
	do
	    if [ ${APP_NAME[$i]} = "admin-Enterprise Cloud-app" ]; then
	      export PROFILE=${ACTIVE_PROFILE}_admin
	      cd $(getAppPath ${APP_NAME[$i]})
        cp ./styles/admin/css/* ./src/assets/css/
        cp ./styles/admin/img/* ./src/assets/img/
        npm cache clean --force
        npm install
        npm run $PROFILE
        cd ..
	    elif [ ${APP_NAME[$i]} = "user-Enterprise Cloud-app" ]; then
	      export PROFILE=${ACTIVE_PROFILE}_user
	      cd $(getAppPath ${APP_NAME[$i]})
        cp ./styles/admin/css/* ./src/assets/css/
        cp ./styles/admin/img/* ./src/assets/img/
        npm cache clean --force
        npm install
        npm run $PROFILE
        cd ..
	    else
	      export PROFILE=$ACTIVE_PROFILE
			  rm -rf ./$(getAppPath ${APP_NAME[$i]})/target
			  mvn -P $PROFILE -f ./$(getAppPath ${APP_NAME[$i]})/pom.xml clean package
	    fi
	done
fi

# DOCKER BUILD 
if [ $1 = "dbuild" ]; then
	# 1.docker build
	echo ---DOCKER build---
	
	for i in $SET
	do
			docker-buildx build --platform linux/amd64  -t $REGISTRY/${APP_NAME[$i]}:$TAG ./$(getAppPath ${APP_NAME[$i]})
	done
	
	# 2.docker images 
  echo ---DOCKER images...---
	docker images | grep $REGISTRY
fi

# DOCKER SAVE
if [ $1 = "save" ]; then
  rm -rf ./temp
  mkdir ./temp
  cd ./temp

	# 1.docker save
	for i in $SET
	do
			echo ---docker save ${APP_NAME[$i]} ---
			docker save -o ${APP_NAME[$i]}.tar $REGISTRY/${APP_NAME[$i]}:$TAG
	done
fi

# DOCKER LOAD
if [ $1 = "load" ]; then
	# 1.docker load 	
	for i in $SET
	do
			echo ---docker load ${APP_NAME[$i]} ---
			docker load -i ${APP_NAME[$i]}.tar
	done
fi


# DOCKER PUSH
if [ $1 = "push" ]; then
	# 1.docker push 	
	for i in $SET
	do
			echo ---docker push ${APP_NAME[$i]} ---
			docker push $REGISTRY/${APP_NAME[$i]}:$TAG
	done
fi

if [ $1 = "deploy_dev" ]; then
	[email protected]
	TARGET_SSH_PORT=22
	for i in $SET
	do
      ssh -p $TARGET_SSH_PORT $TARGET_REPO bash ./deploy/__deploy_to_k8s.sh ${APP_NAME[$i]}
	done
fi

if [ $1 = "deploy_stg" ]; then
	[email protected]
	TARGET_SSH_PORT=22
	for i in $SET
	do
      ssh -p $TARGET_SSH_PORT $TARGET_REPO bash ./deploy/__deploy_to_k8s_stg.sh ${APP_NAME[$i]} ${TAG}
	done
fi
in-server-actions
archived_scripts/k8s-master-node/deploy/__deploy_to_k8s.sh
bash
#!/bin/bash

kubectl rollout restart deploy -n dev-portal $1
archived_scripts/k8s-master-node/deploy/__deploy_to_k8s_stg.sh
bash
#!/bin/bash
app=$1
tag=$2

if [[ "$app" == "admin-Enterprise Cloud-app" || "$app" == "user-Enterprise Cloud-app" ]]; then
        kubectl set image -n stg-portal deploy/$app nginx=harbor.hanacloudia.com:31443/stg-portal/${app}:${tag}
else
        kubectl set image -n stg-portal deploy/$app ${app}-container=harbor.hanacloudia.com:31443/stg-portal/${app}:${tag}
fi
kubectl rollout restart deploy -n stg-portal $app
archived_scripts/k8s-master-node/deploy/__package_prod-si.sh
bash
#!/bin/bash

TAG=$1
FILE=Enterprise Cloud-si.tgz
PWD_PATH=$(pwd)/deploy

SSH_ADDR=sychoi@<PUBLIC_IP_REDACTED>
SSH_PORT=7522
SSH_PATH=html/cmp-si

cd $PWD_PATH/Enterprise Cloud-si

  git checkout develop
  git fetch
  git pull
  git branch release/$TAG
  git checkout release/$TAG
  git push --set-upstream origin release/$TAG

cd $PWD_PATH
tar cvzf $FILE ./Enterprise Cloud-si
ssh -p$SSH_PORT $SSH_ADDR mkdir -p $SSH_PATH/$TAG
ssh -p$SSH_PORT $SSH_ADDR rm -rf $SSH_PATH/$TAG/$FILE
scp -P$SSH_PORT $PWD_PATH/$FILE $SSH_ADDR:$SSH_PATH/$TAG/
ssh -p$SSH_PORT $SSH_ADDR chmod 777 $SSH_PATH/$TAG/$FILE
ssh -p$SSH_PORT $SSH_ADDR ls $SSH_PATH/$TAG/ -alh
rm -rf $PWD_PATH/$FILE
archived_scripts/k8s-master-node/deploy/__package_prod-si_skip-push.sh
bash
#!/bin/bash

TAG=$1
FILE=Enterprise Cloud-si.tgz
PWD_PATH=$(pwd)/deploy

SSH_ADDR=sychoi@<PUBLIC_IP_REDACTED>
SSH_PORT=7522
SSH_PATH=html/cmp-si

cd $PWD_PATH
tar cvzf $FILE ./Enterprise Cloud-si
ssh -p$SSH_PORT $SSH_ADDR mkdir -p $SSH_PATH/$TAG
ssh -p$SSH_PORT $SSH_ADDR rm -rf $SSH_PATH/$TAG/$FILE
scp -P$SSH_PORT $PWD_PATH/$FILE $SSH_ADDR:$SSH_PATH/$TAG/
ssh -p$SSH_PORT $SSH_ADDR chmod 777 $SSH_PATH/$TAG/$FILE
ssh -p$SSH_PORT $SSH_ADDR ls $SSH_PATH/$TAG/ -alh
rm -rf $PWD_PATH/$FILE
archived_scripts/k8s-master-node/deploy/__package_prod.sh
bash
#!/bin/bash

MODULE=$1
TAG=$2

ASIS_REGISTRY=harbor.hanacloudia.com:31443/stg-portal
TOBE_REGISTRY=registry.hanacloudia.com:443/cmp-portal

PWD_PATH=$(pwd)/deploy

SSH_ADDR=sychoi@<PUBLIC_IP_REDACTED>
SSH_PORT=7522
SSH_PATH=html/cmp

CONTAINER_BINARY=docker

rm -rf $PWD_PATH/v3.*
mkdir $PWD_PATH/$TAG
ssh -p$SSH_PORT $SSH_ADDR mkdir $SSH_PATH/$TAG

echo "==================$MODULE IMAGE PULLING=================="
$CONTAINER_BINARY pull $ASIS_REGISTRY/$MODULE:$TAG
echo "==================$MODULE IMAGE TAGGING=================="
$CONTAINER_BINARY tag $ASIS_REGISTRY/$MODULE:$TAG $TOBE_REGISTRY/$MODULE:$TAG
echo "$MODULE image registry changed $ASIS_REGISTRY/$MODULE:$TAG to $TOBE_REGISTRY/$MODULE:$TAG"
echo "==================$MODULE IMAGE SAVING=================="
$CONTAINER_BINARY save -o $PWD_PATH/$TAG/$MODULE.tar $TOBE_REGISTRY/$MODULE:$TAG
echo "image saved $PWD_PATH/$TAG/$MODULE.tar"
echo "==================$MODULE IMAGE SENDING=================="
ssh -p$SSH_PORT $SSH_ADDR rm -rf $SSH_PATH/$TAG/$MODULE.tar
scp -P$SSH_PORT $PWD_PATH/$TAG/$MODULE.tar $SSH_ADDR:$SSH_PATH/$TAG/
ssh -p$SSH_PORT $SSH_ADDR chmod -R 777 $SSH_PATH/$TAG/
ssh -p$SSH_PORT $SSH_ADDR ls $SSH_PATH/$TAG/ -alh
Jar file build
bash
#!/bin/bash

#TI내부 로컬개발환경에서 사용하기 위한 솔루션 Jar 파일 릴리즈

#modules=( ServiceCatalogEngine CloudServiceBroker AdminApi AdminApp DashboardApp DashboardApi OpenstackApi OpenstackApp )
modules=( AdminApp DashboardApp OpenstackApp )

# mvn build
for MODULE_NAME in "${modules[@]}"; do mvn -P hanadev -f ./$MODULE_NAME/pom.xml clean package ; done

# 기존 빌드 삭제 및 다운로드서버로 이동
for MODULE_NAME in "${modules[@]}"
do 
	ssh -p7522 sychoi@<PUBLIC_IP_REDACTED> "rm -f ./html/cmp-jar/$MODULE_NAME-3.0.jar"
	scp -P7522 ./$MODULE_NAME/target/$MODULE_NAME-3.0.jar sychoi@<PUBLIC_IP_REDACTED>:html/cmp-jar
done

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *