๐ก CMP Build & Remote Deployment Automation Bash โ Executive Summary
Technical architectural analysis, practical configuration manifests, and deployment instructions for CMP Build & Remote Deployment Automation Bash.
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




Leave a Reply