From 35efc46545543405dd5b73517c113fa2de516ece Mon Sep 17 00:00:00 2001 From: Rinjae Date: Tue, 9 Jun 2026 15:36:58 +0900 Subject: [PATCH] =?UTF-8?q?ci=20-=20tomcat=20=EB=B0=B0=ED=8F=AC=20?= =?UTF-8?q?=EB=B0=8F=20=ED=97=AC=EC=8A=A4=EC=B2=B4=ED=81=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ROOT.war 로 /prod/devportal/webapps 배포 - startup.sh 후 90초 내 GET / 200 기대 - post-clean 으로 shutdown 보장 --- .gitea/workflows/eapim-portal-ci.yml | 75 ++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/.gitea/workflows/eapim-portal-ci.yml b/.gitea/workflows/eapim-portal-ci.yml index f283d95..ab75518 100644 --- a/.gitea/workflows/eapim-portal-ci.yml +++ b/.gitea/workflows/eapim-portal-ci.yml @@ -9,6 +9,12 @@ on: jobs: build: runs-on: [self-hosted, linux, eapim-portal] + env: + JAVA_HOME: /apps/opts/jdk8 + CATALINA_BASE: /prod/devportal + CATALINA_HOME: /prod/apache-tomcat-9.0.116 + CATALINA_PID: /prod/devportal/temp/catalina.pid + DEPLOY_HTTP_PORT: "39130" defaults: run: working-directory: eapim-portal @@ -52,3 +58,72 @@ jobs: eapim-portal/build/libs/eapim-portal.war eapim-portal/build/libs/eapim-portal-boot.war if-no-files-found: error + + - name: Stop tomcat (pre-clean) + working-directory: ${{ github.workspace }} + run: | + if [ -f "$CATALINA_PID" ] && kill -0 "$(cat $CATALINA_PID)" 2>/dev/null; then + "$CATALINA_HOME/bin/shutdown.sh" 30 -force || true + for i in $(seq 1 30); do + [ -f "$CATALINA_PID" ] && kill -0 "$(cat $CATALINA_PID)" 2>/dev/null || break + sleep 1 + done + fi + rm -f "$CATALINA_PID" + + - name: Deploy war as ROOT + working-directory: ${{ github.workspace }} + run: | + DEPLOY_DIR="$CATALINA_BASE/webapps" + rm -rf "$DEPLOY_DIR/ROOT" "$DEPLOY_DIR/ROOT.war" + cp eapim-portal/build/libs/eapim-portal.war "$DEPLOY_DIR/ROOT.war" + ls -la "$DEPLOY_DIR" + + - name: Start tomcat and health check (timeout 90s) + working-directory: ${{ github.workspace }} + run: | + LOG="$CATALINA_BASE/logs/catalina.$(date +%Y-%m-%d).log" + BEFORE=0 + [ -f "$LOG" ] && BEFORE=$(stat -c %s "$LOG") + + mkdir -p "$(dirname $CATALINA_PID)" + "$CATALINA_HOME/bin/startup.sh" + + DEADLINE=$(($(date +%s) + 90)) + STATUS=000 + while [ $(date +%s) -lt $DEADLINE ]; do + STATUS=$(curl -sS -o /dev/null -w '%{http_code}' --max-time 3 http://localhost:$DEPLOY_HTTP_PORT/ 2>/dev/null || echo "000") + if [ "$STATUS" = "200" ]; then + echo "HTTP 200 received from /" + break + fi + if [ -f "$LOG" ] && tail -c +$((BEFORE+1)) "$LOG" | grep -qE "Application listener .* Exception|SEVERE.*startup.Catalina"; then + echo "::error::Startup error detected in log" + tail -c +$((BEFORE+1)) "$LOG" | tail -80 + exit 1 + fi + sleep 2 + done + + if [ "$STATUS" != "200" ]; then + echo "::error::Health check failed within 90s (last HTTP status: $STATUS)" + [ -f "$LOG" ] && tail -c +$((BEFORE+1)) "$LOG" | tail -100 + exit 1 + fi + + echo "--- key boot log lines ---" + tail -c +$((BEFORE+1)) "$LOG" | grep -E "Server startup|Deployment of web" | head -10 || true + + - name: Stop tomcat (post-clean) + if: always() + working-directory: ${{ github.workspace }} + run: | + if [ -f "$CATALINA_PID" ] && kill -0 "$(cat $CATALINA_PID)" 2>/dev/null; then + "$CATALINA_HOME/bin/shutdown.sh" 30 -force || true + for i in $(seq 1 30); do + [ -f "$CATALINA_PID" ] && kill -0 "$(cat $CATALINA_PID)" 2>/dev/null || break + sleep 1 + done + [ -f "$CATALINA_PID" ] && kill -9 "$(cat $CATALINA_PID)" 2>/dev/null || true + fi + rm -f "$CATALINA_PID"