Files
BizCare/scripts/install-jenkins-bizcare-job.sh
T
2026-07-13 10:07:33 +09:00

112 lines
4.4 KiB
Bash

#!/usr/bin/env bash
# ==============================================================================
# Jenkins Job 설치/갱신 — BizCare-Pipeline (Track B)
# 서버에서 실행: bash scripts/install-jenkins-bizcare-job.sh
# ==============================================================================
set -euo pipefail
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:${PATH:-/usr/bin:/bin}"
JENKINS_HOME="${JENKINS_HOME:-/Users/aidev/.jenkins}"
JENKINS_URL="${JENKINS_URL:-http://127.0.0.1:8090}"
JOB_NEW="BizCare-Pipeline"
JOB_OLD="BillCare-Pipeline"
BARE_REPO="file:///Volumes/ADATA/git/BizCare.git"
DEPLOY_SCRIPT="/Volumes/ADATA/git/deploy-bizcare.sh"
write_job() {
local job="$1" desc="$2"
local dir="${JENKINS_HOME}/jobs/${job}"
mkdir -p "$dir"
cat > "${dir}/config.xml" <<EOF
<?xml version='1.1' encoding='UTF-8'?>
<project>
<description>${desc}</description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.plugins.git.GitSCM" plugin="git@5.0.0">
<configVersion>2</configVersion>
<userRemoteConfigs>
<hudson.plugins.git.UserRemoteConfig>
<url>${BARE_REPO}</url>
</hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
<branches>
<hudson.plugins.git.BranchSpec>
<name>*/main</name>
</hudson.plugins.git.BranchSpec>
</branches>
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
<submoduleCfg class="empty-list"/>
<extensions/>
</scm>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers/>
<concurrentBuild>false</concurrentBuild>
<builders>
<hudson.tasks.Shell>
<command>#!/bin/bash
set -euo pipefail
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:\$PATH"
export GIT_DIR="/Volumes/ADATA/git/BizCare.git"
export WORK_TREE="/Users/aidev/apps/BizCare"
echo "=== BizCare Jenkins Build #\${BUILD_NUMBER} ==="
echo "시각: \$(date)"
echo "GIT_DIR=\$GIT_DIR"
echo "WORK_TREE=\$WORK_TREE"
SERVICE_NAME="\${SERVICE_NAME:-all}" ${DEPLOY_SCRIPT}
</command>
</hudson.tasks.Shell>
</builders>
<publishers/>
<buildWrappers/>
</project>
EOF
echo "[OK] wrote ${dir}/config.xml"
}
echo "======================================================"
echo " Jenkins BizCare job 설치 $(date '+%Y-%m-%d %H:%M:%S')"
echo "======================================================"
[ -d "$JENKINS_HOME" ] || { echo "ERROR: JENKINS_HOME 없음: $JENKINS_HOME"; exit 1; }
[ -x "$DEPLOY_SCRIPT" ] || { echo "ERROR: deploy 스크립트 없음: $DEPLOY_SCRIPT"; exit 1; }
[ -d /Volumes/ADATA/git/BizCare.git ] || { echo "ERROR: BizCare.git 없음"; exit 1; }
write_job "$JOB_NEW" "BizCare — Track B (deploy-bizcare.sh, file:// BizCare.git)"
write_job "$JOB_OLD" "BillCare → BizCare 위임 — Track B (deploy-bizcare.sh, file:// BizCare.git)"
# Jenkins에 설정 리로드
if curl -sf -o /dev/null "${JENKINS_URL}/login" 2>/dev/null; then
echo "[INFO] Jenkins reloadConfiguration 시도: $JENKINS_URL"
# crumb (보안 켜져 있으면)
CRUMB_JSON="$(curl -sf "${JENKINS_URL}/crumbIssuer/api/json" 2>/dev/null || true)"
HDR=()
if [ -n "$CRUMB_JSON" ]; then
FIELD="$(printf '%s' "$CRUMB_JSON" | python3 -c "import sys,json; print(json.load(sys.stdin).get('crumbRequestField',''))" 2>/dev/null || true)"
VAL="$(printf '%s' "$CRUMB_JSON" | python3 -c "import sys,json; print(json.load(sys.stdin).get('crumb',''))" 2>/dev/null || true)"
if [ -n "$FIELD" ] && [ -n "$VAL" ]; then
HDR=(-H "${FIELD}:${VAL}")
fi
fi
if curl -sf "${HDR[@]}" -X POST "${JENKINS_URL}/reload" >/dev/null 2>&1 \
|| curl -sf "${HDR[@]}" -X POST "${JENKINS_URL}/reloadConfiguration" >/dev/null 2>&1; then
echo "[OK] Jenkins reload 요청 성공"
else
echo "[WARN] HTTP reload 실패 — Jenkins 재시작 또는 UI에서 'Reload Configuration from Disk' 실행"
echo " 또는: launchctl kickstart -k gui/\$(id -u)/homebrew.mxcl.jenkins-lts"
fi
else
echo "[WARN] Jenkins 미기동 ($JENKINS_URL) — job 파일은 기록됨. Jenkins 기동 후 자동 로드됨"
fi
echo "======================================================"
echo " Job: $JOB_NEW (정본)"
echo " Job: $JOB_OLD (구 이름 호환 → 동일 BizCare 배포)"
echo " SCM: $BARE_REPO"
echo " Deploy: $DEPLOY_SCRIPT"
echo "======================================================"