216 lines
8.1 KiB
Bash
216 lines
8.1 KiB
Bash
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# WAS 재기동 스크립트
|
|
# Jenkins Stage 6: WAS Restart에서 호출
|
|
# 지원: Tomcat, JBoss/WildFly, JEUS, WebLogic, Node.js(pm2/systemd)
|
|
# =============================================================================
|
|
set -euo pipefail
|
|
|
|
SERVER=""
|
|
SSH_KEY=""
|
|
SSH_USER="deploy"
|
|
SSH_PORT="${SSH_PORT:-22}"
|
|
WAS_TYPE="${WAS_TYPE:-tomcat}"
|
|
WAS_SERVICE="${WAS_SERVICE:-}" # systemd 서비스명 (빈칸이면 자동 감지)
|
|
STARTUP_WAIT="${STARTUP_WAIT:-60}" # 기동 대기 시간 (초)
|
|
LOG_DIR="${WORKSPACE:-/tmp}/build-logs"
|
|
RESTART_LOG="${LOG_DIR}/was-restart-$(date +%Y%m%d-%H%M%S).log"
|
|
|
|
GREEN='\033[0;32m'; RED='\033[0;31m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
|
log() { echo -e "${GREEN}[WAS]${NC} $*" | tee -a "${RESTART_LOG}"; }
|
|
err() { echo -e "${RED}[ERROR]${NC} $*" | tee -a "${RESTART_LOG}"; }
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $*" | tee -a "${RESTART_LOG}"; }
|
|
|
|
mkdir -p "${LOG_DIR}"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--server) SERVER="$2"; shift 2 ;;
|
|
--ssh-key) SSH_KEY="$2"; shift 2 ;;
|
|
--ssh-user) SSH_USER="$2"; shift 2 ;;
|
|
--was-type) WAS_TYPE="$2"; shift 2 ;;
|
|
--service) WAS_SERVICE="$2"; shift 2 ;;
|
|
--wait) STARTUP_WAIT="$2"; shift 2 ;;
|
|
*) shift ;;
|
|
esac
|
|
done
|
|
|
|
[[ -z "${SERVER}" ]] && { err "--server 파라미터가 필요합니다"; exit 1; }
|
|
[[ -z "${SSH_KEY}" ]] && { err "--ssh-key 파라미터가 필요합니다"; exit 1; }
|
|
|
|
chmod 600 "${SSH_KEY}"
|
|
TARGET_HOST="${TARGET_HOST:-${SERVER}}"
|
|
SSH_OPTS="-i ${SSH_KEY} -p ${SSH_PORT} -o StrictHostKeyChecking=no -o ConnectTimeout=10"
|
|
SSH_CMD="ssh ${SSH_OPTS} ${SSH_USER}@${TARGET_HOST}"
|
|
|
|
log "WAS 재기동: ${WAS_TYPE} @ ${TARGET_HOST}"
|
|
|
|
# ── Tomcat ────────────────────────────────────────────────────────────────────
|
|
restart_tomcat() {
|
|
local service="${WAS_SERVICE:-tomcat9}"
|
|
# 서비스명 자동 감지 (tomcat9 / tomcat10 / tomcat)
|
|
local actual_service
|
|
actual_service=$(${SSH_CMD} "
|
|
for s in tomcat9 tomcat10 tomcat; do
|
|
systemctl list-units --type=service | grep -q \"\$s\" && echo \"\$s\" && break
|
|
done
|
|
" 2>/dev/null || echo "${service}")
|
|
|
|
log "Tomcat 서비스 재기동: ${actual_service}"
|
|
${SSH_CMD} "sudo systemctl restart '${actual_service}'"
|
|
|
|
# 기동 확인
|
|
local elapsed=0
|
|
while [[ ${elapsed} -lt ${STARTUP_WAIT} ]]; do
|
|
if ${SSH_CMD} "sudo systemctl is-active --quiet '${actual_service}'" 2>/dev/null; then
|
|
log "Tomcat 기동 완료 (${elapsed}초)"
|
|
return 0
|
|
fi
|
|
sleep 3
|
|
elapsed=$((elapsed + 3))
|
|
done
|
|
err "Tomcat 기동 타임아웃 (${STARTUP_WAIT}초)"
|
|
${SSH_CMD} "sudo systemctl status '${actual_service}'" 2>&1 | tee -a "${RESTART_LOG}" || true
|
|
exit 1
|
|
}
|
|
|
|
# ── JBoss / WildFly ────────────────────────────────────────────────────────────
|
|
restart_jboss() {
|
|
local service="${WAS_SERVICE:-jboss}"
|
|
local actual_service
|
|
actual_service=$(${SSH_CMD} "
|
|
for s in jboss wildfly eap7 jboss-eap; do
|
|
systemctl list-units --type=service | grep -q \"\$s\" && echo \"\$s\" && break
|
|
done
|
|
" 2>/dev/null || echo "${service}")
|
|
|
|
log "JBoss/WildFly 서비스 재기동: ${actual_service}"
|
|
${SSH_CMD} "sudo systemctl restart '${actual_service}'"
|
|
|
|
local elapsed=0
|
|
while [[ ${elapsed} -lt ${STARTUP_WAIT} ]]; do
|
|
if ${SSH_CMD} "sudo systemctl is-active --quiet '${actual_service}'" 2>/dev/null; then
|
|
log "JBoss 기동 완료 (${elapsed}초)"
|
|
return 0
|
|
fi
|
|
sleep 5
|
|
elapsed=$((elapsed + 5))
|
|
done
|
|
err "JBoss 기동 타임아웃"
|
|
exit 1
|
|
}
|
|
|
|
# ── JEUS ──────────────────────────────────────────────────────────────────────
|
|
restart_jeus() {
|
|
local jeus_home="${JEUS_HOME:-/opt/jeus8}"
|
|
local domain="${JEUS_DOMAIN:-domain1}"
|
|
local server="${JEUS_SERVER:-server1}"
|
|
local admin_port="${JEUS_ADMIN_PORT:-9736}"
|
|
|
|
log "JEUS 서버 재기동: ${domain}/${server}"
|
|
${SSH_CMD} "
|
|
export JEUS_HOME='${jeus_home}'
|
|
export PATH=\"\${JEUS_HOME}/bin:\${PATH}\"
|
|
|
|
# 서버 중지
|
|
jeusadmin -host localhost:${admin_port} -u administrator \
|
|
'stopServer ${server}' 2>/dev/null || true
|
|
|
|
sleep 5
|
|
|
|
# 서버 시작
|
|
startManagedServer -domain '${domain}' -server '${server}' &
|
|
"
|
|
|
|
local elapsed=0
|
|
while [[ ${elapsed} -lt ${STARTUP_WAIT} ]]; do
|
|
if ${SSH_CMD} "
|
|
export JEUS_HOME='${jeus_home}'
|
|
jeusadmin -host localhost:${admin_port} -u administrator \
|
|
'serverinfo ${server}' 2>/dev/null | grep -q 'RUNNING'
|
|
" 2>/dev/null; then
|
|
log "JEUS 기동 완료 (${elapsed}초)"
|
|
return 0
|
|
fi
|
|
sleep 5
|
|
elapsed=$((elapsed + 5))
|
|
done
|
|
err "JEUS 기동 타임아웃"
|
|
exit 1
|
|
}
|
|
|
|
# ── WebLogic ──────────────────────────────────────────────────────────────────
|
|
restart_weblogic() {
|
|
local wl_home="${WL_HOME:-/opt/oracle/wlserver}"
|
|
local domain_home="${WL_DOMAIN_HOME:-/opt/oracle/domains/base_domain}"
|
|
local server="${WL_SERVER:-ManagedServer1}"
|
|
|
|
log "WebLogic 서버 재기동: ${server}"
|
|
${SSH_CMD} "
|
|
# 서버 중지
|
|
'${domain_home}/bin/stopWebLogic.sh' '${server}' 2>/dev/null || true
|
|
sleep 5
|
|
# 서버 시작
|
|
nohup '${domain_home}/bin/startManagedWebLogic.sh' \
|
|
'${server}' 'http://localhost:7001' &
|
|
"
|
|
|
|
local elapsed=0
|
|
while [[ ${elapsed} -lt ${STARTUP_WAIT} ]]; do
|
|
if ${SSH_CMD} "
|
|
curl -sf 'http://localhost:7001/management/tenant-monitoring/servers/${server}' \
|
|
2>/dev/null | grep -q '\"state\":\"RUNNING\"'
|
|
" 2>/dev/null; then
|
|
log "WebLogic 기동 완료 (${elapsed}초)"
|
|
return 0
|
|
fi
|
|
sleep 5
|
|
elapsed=$((elapsed + 5))
|
|
done
|
|
err "WebLogic 기동 타임아웃"
|
|
exit 1
|
|
}
|
|
|
|
# ── Node.js (pm2 또는 systemd) ────────────────────────────────────────────────
|
|
restart_nodejs() {
|
|
local service="${WAS_SERVICE:-}"
|
|
local app_name="${NODE_APP_NAME:-app}"
|
|
|
|
log "Node.js 재기동..."
|
|
${SSH_CMD} "
|
|
if command -v pm2 &>/dev/null; then
|
|
pm2 restart '${app_name}' || pm2 reload '${app_name}'
|
|
elif systemctl list-units --type=service | grep -q '${service:-nodejs}'; then
|
|
sudo systemctl restart '${service:-nodejs}'
|
|
else
|
|
echo '재기동 방법을 찾을 수 없습니다. PM2 또는 systemd 서비스가 필요합니다.'
|
|
exit 1
|
|
fi
|
|
"
|
|
sleep 3
|
|
log "Node.js 재기동 완료"
|
|
}
|
|
|
|
# ── 메인 ─────────────────────────────────────────────────────────────────────
|
|
main() {
|
|
log "=== WAS 재기동 시작: $(date) ==="
|
|
case "${WAS_TYPE,,}" in
|
|
tomcat|tomcat9|tomcat10) restart_tomcat ;;
|
|
jboss|wildfly|eap) restart_jboss ;;
|
|
jeus|jeus8|jeus9) restart_jeus ;;
|
|
weblogic|wls) restart_weblogic ;;
|
|
nodejs|node|pm2) restart_nodejs ;;
|
|
systemd)
|
|
log "systemd 서비스 재기동: ${WAS_SERVICE}"
|
|
${SSH_CMD} "sudo systemctl restart '${WAS_SERVICE}'"
|
|
;;
|
|
*)
|
|
err "지원하지 않는 WAS 종류: ${WAS_TYPE}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
log "=== WAS 재기동 완료 ==="
|
|
}
|
|
|
|
main "$@"
|