070 Shell script - kimdonggwan337/dongdong GitHub Wiki
[ํ์ผ ๋ด์ฉ ์นํ]
#!/bin/bash
### ๊ณตํต ํจ์(git clone, git push) ###
RETRY_RUN() {
local CMD="$1"
local MAX_TRY=3
local TRY=1
# TRY =< MAX_TRY
while [ $TRY -le $MAX_TRY ]; do
echo "[์๋ $TRY/$MAX_TRY] ์คํ: $CMD"
if eval "$CMD"; then
return 0
fi
echo "[์คํจ] $CMD"
# TRY == MAX_TRY
if [ $TRY -eq $MAX_TRY ]; then
echo "$MAX_TRY ๋ฒ ๋ชจ๋ ์คํจ โ ์คํฌ๋ฆฝํธ ์ข
๋ฃ"
exit 1
fi
TRY=$((TRY + 1))
sleep 1
done
}
### git clone ###
GIT_REPO_PATH() {
# patch pod ์กด์ฌ ์ฌ๋ถ
CHECK_POD=$(kubectl get deployment -n patch patch --ignore-not-found)
if [ -n "$CHECK_POD" ]; then
# NAS PATH๋ฅผ ๋ถ๋ฌ์์ BASE_PATH ์ ์ธ
NAS_PATH=$(kubectl get deployment -n webapps event -o json | jq -r \
'.spec.template.spec.volumes[] | select(.name=="nfs-vol-data") | .hostPath.path')
BASE_PATH="${NAS_PATH}/patch"
else
BASE_PATH="/home/install"
fi
#### ๊ฐ์ฅ ์ต์ ๊ฒ๋ง ๋ฐ๊ฒ ํ ์๋์๋ค.####
cd "$BASE_PATH"
GIT_URL="https://{ID, PWD}@kdocker.amaranth10.co.kr/amaranth10/gcmsAmaranth${NEW_GCMSID}"
RETRY_RUN "git clone \"$GIT_URL\""
}
### ๋ฌธ์์ด ์นํ ###
GCMSID_CHANGE() {
NEW_BASE_PATH="${BASE_PATH}/gcmsAmaranth${NEW_GCMSID}"
echo "์นํ ์ค"
while true; do
# NEW_BASE_PATH์ ๋ชจ๋ ํ์ผ ๋ด์ฉ ์ค _${OLD_GCMSID}, gcmsAmaranth${OLD_GCMSID} ์นํ
find "$NEW_BASE_PATH" -type f -exec sed -i \
-e "s/_${OLD_GCMSID}/_${NEW_GCMSID}/g" \
-e "s/gcmsAmaranth${OLD_GCMSID}/gcmsAmaranth${NEW_GCMSID}/g" {} +
# ์นํ๋์ง ์์ OLD_GCMSID ์กฐํ
RETRY_COUNT=$(grep -R "${OLD_GCMSID}" "$NEW_BASE_PATH" | wc -l)
if [ "$RETRY_COUNT" -eq 0 ]; then
echo "์นํ ์๋ฃ"
return 0
fi
# ์นํ๋์ง ์์ ๋ชฉ๋ก ์ถ๋ ฅ
grep -R "${OLD_GCMSID}" "$NEW_BASE_PATH"
while true; do
read -p "์นํ๋์ง ์์ ํญ๋ชฉ์ด ์กด์ฌํฉ๋๋ค. ์ฌ์นํ์ ์งํํ์๊ฒ ์ต๋๊น? (Y=์ฌ์นํ, N=์ข
๋ฃ, S=git push ์คํ)" ANSWER
case "$ANSWER" in
Y|y)
echo "์ฌ์นํ์ ์งํํฉ๋๋ค."
break
;;
N|n)
echo "์คํฌ๋ฆฝํธ๋ฅผ ์ข
๋ฃํฉ๋๋ค."
exit 0
;;
S|s)
echo "์ฌ์นํ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ๊ณ git push๋ฅผ ์งํํฉ๋๋ค."
return 0
;;
*)
echo "์๋ชป๋ ์
๋ ฅ์
๋๋ค. ๋ค์ ์
๋ ฅํด์ฃผ์ธ์."
;;
esac
done
done
}
### git push ###
GIT_REPO_PUSH() {
# ๊ธฐ์กด ๋๋ ํฐ๋ฆฌ ์ญ์
OLD_BASE_PATH="${BASE_PATH}/gcmsAmaranth${OLD_GCMSID}"
rm -rf "$OLD_BASE_PATH"
cd "$NEW_BASE_PATH"
# git push
RETRY_RUN "git add --all && git commit -m \"๋ง์ด๊ทธ๋ ์ด์
(SaaSํ -> ๊ตฌ์ถํ)\" && git push"
}
main() {
# ์ฌ์ฉ์ ์
๋ ฅ
read -p "๋ณ๊ฒฝ ์ GCMSID ์
๋ ฅ -> ex) 29866 : " OLD_GCMSID
read -p "๋ณ๊ฒฝ ํ GCMSID ์
๋ ฅ -> ex) 35542 : " NEW_GCMSID
# gitlab clone, ์์
๋๋ ํฐ๋ฆฌ ์ง์
GIT_REPO_PATH
# ๋ฌธ์ ์นํ
GCMSID_CHANGE
# git push, ๊ธฐ์กด ๋๋ ํฐ๋ฆฌ ์ญ์
GIT_REPO_PUSH
}
main
[๋ชจ๋ ์ค์น]
#!/bin/bash
# ๊ณตํต ์ฌ์๋ ํจ์
## ๋๋ ํฐ๋ฆฌ ์์ฑ, ํ์ผ ๋ค์ด๋ก๋, deploy-webhwpctrl.yml ์นํ, git push, ์์ถํด์
function RETRY_RUN() {
local CMD="$1"
local MAX_TRY=3
local TRY=1
while [ $TRY -le $MAX_TRY ]; do
echo "[์๋ $TRY/$MAX_TRY] ์คํ: $CMD"
if eval "$CMD"; then
echo "[์ฑ๊ณต]"
return 0
fi
TRY=$((TRY+1))
sleep 1
done
echo "$MAX_TRYํ ๋ชจ๋ ์คํจ โ ์คํฌ๋ฆฝํธ ์ข
๋ฃ"
exit 1
}
function MODULE_FILE_DOWN() {
# PATCH POD ์กด์ฌ ์ฌ๋ถ ํ์ธ(์ค์น ๊ฒฝ๋ก ์ค์ )
CHECK_POD=$(kubectl get deployment -n patch patch --ignore-not-found)
# NAS ๊ฒฝ๋ก (ex: /data), dirname์ผ๋ก ์์ ๊ฒฝ๋ก ์ถ์ถ
NAS_PATH=$(dirname "$(kubectl describe deploy gw -n webapps | grep -A 2 'nfs-vol-data' | tail -n 1 | awk '{print $2}')")
# ๋ค์ด๋ก๋ URL ๋ฐ ์ถ๋ ฅ ํ์ผ ๊ฒฝ๋ก ์ค์
DOWNLOAD_URL="https://kdocker.amaranth10.co.kr/api/v4/projects/702/repository/files/module_install.tar.gz/raw?ref=master"
# ์ค์น ๊ฒฝ๋ก ์ค์
if [ -n "$CHECK_POD" ]; then
BASE_PATH="${NAS_PATH}/data/patch"
else
BASE_PATH="/home/install"
fi
OUT_FILE="$BASE_PATH/module_add/module_install.tar.gz"
# ๋๋ ํฐ๋ฆฌ ์์ฑ
RETRY_RUN "mkdir -p $BASE_PATH/module_add"
if [ -f "$BASE_PATH/module_add/module_install/webhwpctrl/deploy-webhwpctrl-v2.yml" ]; then
echo "์ด๋ฏธ ๋๋ ํฐ๋ฆฌ/ํ์ผ์ด ์กด์ฌํฉ๋๋ค โ ์์ถํ์ผ ๋ค์ด๋ก๋ ์๋ต"
else
RETRY_RUN "curl -s -X GET --header \"PRIVATE-TOKEN: YE-Gp1-sudfnc1xnGVPt\" \"$DOWNLOAD_URL\" -o \"$OUT_FILE\""
RETRY_RUN "tar -xzf \"$OUT_FILE\" -C \"$BASE_PATH/module_add\""
echo "๋ค์ด๋ก๋ ๋ฐ ์์ถํด์ ์๋ฃ"
fi
}
# cm-auth.yaml, nginx-cm.yaml ์์ ํจ์
function CM_EDIT() {
local MAX_TRY=3
local TRY=1
while [ $TRY -le $MAX_TRY ]; do
read -p "GCMSID ๊ฐ์ ์
๋ ฅํ์ธ์ (์: 29135): " GCMSID
GCMS_DIR="${BASE_PATH}/gcmsAmaranth${GCMSID}"
# ๋๋ ํฐ๋ฆฌ ํ์ธ
if [ -d "$GCMS_DIR" ]; then
break
fi
echo "๋๋ ํฐ๋ฆฌ๊ฐ ์์ต๋๋ค. ๋ค์ ์
๋ ฅํด์ฃผ์ธ์"
TRY=$((TRY+1))
done
if [ $TRY -gt $MAX_TRY ]; then
echo "${MAX_TRY}ํ ๋ชจ๋ ์คํจ โ ์คํฌ๋ฆฝํธ๋ฅผ ์ข
๋ฃํฉ๋๋ค."
exit 1
fi
# cm-auth.yaml, nginx-cm.yaml ๊ฒฝ๋ก ์ค์
CM_AUTH="${GCMS_DIR}/auth/cm/cm-auth.yaml"
CM_NGINX="${GCMS_DIR}/nginx/cm/cm-nginx.yaml"
# auth, nginx ๋ฐฑ์
์์ฑ
RETRY_RUN "cp \"$CM_AUTH\" \"${CM_AUTH}.bak\""
RETRY_RUN "cp \"$CM_NGINX\" \"${CM_NGINX}.bak\""
# cm-nginx.yaml -> location ~ /( ๋ก ์์ํ๊ณ event, apiproxy ํฌํจ๋ ๋ผ์ธ ์ฐพ๊ธฐ
NGINX_NUM=$(awk '/^[:space:](/kimdonggwan337/dongdong/wiki/:space:)*location[:space:](/kimdonggwan337/dongdong/wiki/:space:)+~[:space:](/kimdonggwan337/dongdong/wiki/:space:)+\/\(/ && /event/ && /apiproxy/ {print NR; exit}' "$CM_NGINX")
# location ๋ผ์ธ์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ ์ข
๋ฃ
if [ -z "$NGINX_NUM" ]; then
echo "location ๋ผ์ธ์ ์ฐพ์ ์ ์์ต๋๋ค"
exit 1
fi
WEBHWP=("webhwpctrl" "webhwpctrl-admin")
for HWP in "${WEBHWP[@]}"; do
# location ๋ชฉ๋ก์ ์กด์ฌํ์ง ์์ผ๋ฉด ํญ๋ชฉ ์ถ๊ฐ ๋ฐ ๊ฒ์ฆ
# 1. ์ค ๋ ๊ณต๋ฐฑ ์ ๊ฑฐ
# 2. )/{ , ) / {, ) / { ๋ฑ ๊ณต๋ฐฑ ์ ๊ฑฐ
# 3. ์นํ ํ ์กด์ฌ ์ฌ๋ถ ๊ฒ์ฆ
if ! sed -n "${NGINX_NUM}p" "$CM_NGINX" | grep -qE "(\(|\|)${HWP}(\||\))"; then
RETRY_RUN "
sed -i \"${NGINX_NUM}s/[:space:](/kimdonggwan337/dongdong/wiki/:space:)*$//\" \"$CM_NGINX\" &&
sed -i \"${NGINX_NUM}s/)[:space:](/kimdonggwan337/dongdong/wiki/:space:)*\/[:space:](/kimdonggwan337/dongdong/wiki/:space:)*{/|${HWP})\/ {/\" \"$CM_NGINX\" &&
sed -n \"${NGINX_NUM}p\" \"$CM_NGINX\" | grep -qE \"(\\(|\\|)${HWP}(\\||\\))\"
"
fi
# auth ROUTING
# 1. routing, freepath, request ๋ง์ง๋ง ์ค ๋ฒํธ ์กฐํ
# 2. ๋ง์ง๋ง ์ค ๋ฐ๋ก ์๋ Klago.freepath.${HWP}=* ์ถ๊ฐ
# 3. ๊ฒ์ฆ
if ! grep -qF "Klago.routing.${HWP}=webhwpctrl-svc.webapps:8080" "$CM_AUTH"; then
RETRY_RUN "
ROUT_LINE=\$(grep -n 'Klago.routing.' \"$CM_AUTH\" | tail -n 1 | cut -d ':' -f1) &&
sed -i \"\${ROUT_LINE} a\\"Klago.routing.${HWP}=webhwpctrl-svc.webapps:8080"\" \"$CM_AUTH\" &&
grep -qF \""Klago.routing.${HWP}=webhwpctrl-svc.webapps:8080"\" \"$CM_AUTH\"
"
fi
# auth FREEPATH
if ! grep -qF "Klago.freepath.${HWP}=*" "$CM_AUTH"; then
RETRY_RUN "
FREE_LINE=\$(grep -n 'Klago.freepath.' \"$CM_AUTH\" | tail -n 1 | cut -d ':' -f1) &&
sed -i \"\${FREE_LINE} a\\Klago.freepath.${HWP}=*\" \"$CM_AUTH\" &&
grep -qF \"Klago.freepath.${HWP}=*\" \"$CM_AUTH\"
"
fi
# auth REQUEST
if ! grep -qE \"\\|${HWP}(\\||$)\" \"$CM_AUTH\"; then
RETRY_RUN "
REQU_LINE=\$(grep -n 'Klago.request.body.out' \"$CM_AUTH\" | tail -n 1 | cut -d ':' -f1) &&
sed -i \"\${REQU_LINE}s/\\$/|${HWP}/\" \"$CM_AUTH\" &&
grep -qE \"\\|${HWP}(\\||$)\" \"$CM_AUTH\"
"
fi
done
RETRY_RUN "kubectl apply -f \"$CM_AUTH\""
RETRY_RUN "kubectl apply -f \"$CM_NGINX\""
}
function FILE_REPLACE() {
# webhwpctrl-v2 ๋ค์ด๋ก๋ ํ์ผ ๊ฒฝ๋ก
HWP2_PATH="${BASE_PATH}/module_add/module_install/webhwpctrl/deploy-webhwpctrl-v2.yml"
# ์์ค ํ์ผ ์กด์ฌ ์ฌ๋ถ ํ์ธ
if [ ! -f "$HWP2_PATH" ]; then
echo "์์ค ํ์ผ์ด ์กด์ฌํ์ง ์์ต๋๋ค: $HWP2_PATH"
exit 1
fi
RETRY_RUN "cp \"$HWP2_PATH\" \"${GCMS_DIR}/webapps/deploy\""
# gw ๋ฐฐํฌ ์ด๋ฏธ์ง ํ๊ทธ ์ถ์ถ
IMAGE=$(kubectl get deploy gw -n webapps -o jsonpath='{.spec.template.spec.containers[0].image}' | awk -F: '{print $NF}')
# 1. ์นํ
# 2. ๊ฒ์ฆ
RETRY_RUN "
sed -i \"s|/var_data|${NAS_PATH}|g\" \"${GCMS_DIR}/webapps/deploy/deploy-webhwpctrl-v2.yml\" &&
grep -q \"${NAS_PATH}\" \"${GCMS_DIR}/webapps/deploy/deploy-webhwpctrl-v2.yml\"
"
RETRY_RUN "
sed -i \"s|:lastest|:${IMAGE}|g\" \"${GCMS_DIR}/webapps/deploy/deploy-webhwpctrl-v2.yml\" &&
grep -q \":${IMAGE}\" \"${GCMS_DIR}/webapps/deploy/deploy-webhwpctrl-v2.yml\"
"
if [ -f "${GCMS_DIR}/webapps/deploy/deploy-webhwpctrl.yml" ]; then
RETRY_RUN "mv \"${GCMS_DIR}/webapps/deploy/deploy-webhwpctrl.yml\" \"${GCMS_DIR}/webapps/deploy/deploy-webhwpctrl.yml.bak\""
fi
cd "$GCMS_DIR"
# git push
RETRY_RUN "git add --all && git commit -m \"์นํ๊ธ๊ธฐ์๊ธฐv2 ์ค์น\" && git push"
}
function LICENSE_DIR_CREATE() {
# webhwpctrl ๊ธฐ๋ณธ ๋๋ ํฐ๋ฆฌ
LICENSE_PATH="${NAS_PATH}/data/webhwpctrl"
CUST_PATH="${LICENSE_PATH}/customfont"
FRON_PATH="${LICENSE_PATH}/Fonts"
# ๋๋ ํฐ๋ฆฌ ์์ฑ
RETRY_RUN "mkdir -p \"${LICENSE_PATH}/customfont\" \"${LICENSE_PATH}/Fonts\""
# ๊ถํ ๋ณ๊ฒฝ, ๊ฒ์ฆ
RETRY_RUN "chown -R 1000:1000 \"$LICENSE_PATH\" && stat -c '%u' \"$LICENSE_PATH\" | grep -q '^1000$'"
}
function POD_DEPLOY() {
echo " Pod ์ ์ฉ ์์ "
# auth ํ๋ ์ ์ฉ
RETRY_RUN "kubectl rollout restart deployment go-auth -n auth"
# nginx ํ๋ ์ ์ฉ
RETRY_RUN "kubectl rollout restart deployment nginx nginx-front -n nginx"
# ์นํ๊ธ๊ธฐ์๊ธฐ v2 ๋ฐฐํฌ
RETRY_RUN "kubectl apply -f \"${GCMS_DIR}/webapps/deploy/deploy-webhwpctrl-v2.yml\""
}
#์นํ๊ธ๊ธฐ์๊ธฐ v2 ์ค์น ์คํฌ๋ฆฝํธ
main() {
#module_install.tar.gz ๋ค์ด๋ก๋ ๋ฐ ์์ถํด์
MODULE_FILE_DOWN
# auth, nginx cm.yaml์์
CM_EDIT
# deploy-webhwpctrl-v2.yml ์นํ ๋ฐ git push
FILE_REPLACE
# ๋ผ์ด์ ์ค ๋๋ ํฐ๋ฆฌ ์์ฑ ๋ฐ ๊ถํ ๋ณ๊ฒฝ
LICENSE_DIR_CREATE
# ์นํ๊ธ๊ธฐ์๊ธฐ v2 ๋ฐฐํฌ ํ๋ ์ ์ฉ
POD_DEPLOY
}
main