zioinfo-mail/scripts/setup/setup_jenkins.py
DESKTOP-TKLFCPR\ython 28d3ba4836 refactor(cleanup): commit folder reorganization - scripts/, _archive/, docs/ restructure
- Move backend/frontend/messenger/ old paths to _archive/
- Reorganize scripts into scripts/deploy, check, push, setup, misc
- Move docs (pptx, docx) to docs/
- Add .claude agents and skills for fullstack/folder-cleanup harness
- workspace/ projects remain intact

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 19:43:09 +09:00

96 lines
3.1 KiB
Python

"""Jenkins 초기 설정 자동화"""
import paramiko, sys, time, json
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('101.79.17.164', username='root', password='1q2w3e!Q', timeout=30)
def run(label, cmd, timeout=60):
print(f'\n[{label}]')
_, o, e = client.exec_command(cmd, timeout=timeout)
out = o.read().decode('utf-8', errors='replace').strip()
err = e.read().decode('utf-8', errors='replace').strip()
if out: print(out[:500])
if err:
bad = [l for l in err.splitlines() if not any(k in l.lower() for k in ['warn','info','downloading'])]
if bad: print('ERR:', '\n'.join(bad[:3]))
return out
# 1. Jenkins CLI jar 다운로드
run('CLI jar 다운로드', """
if [ ! -f /tmp/jenkins-cli.jar ]; then
curl -sf http://localhost:8080/jnlpJars/jenkins-cli.jar -o /tmp/jenkins-cli.jar 2>/dev/null
test -f /tmp/jenkins-cli.jar && echo "다운로드 완료" || echo "실패"
fi
ls -la /tmp/jenkins-cli.jar 2>/dev/null
""")
# 2. Jenkins 설정 완료 여부 확인
run('Jenkins 웹 상태', """
HTTP=$(curl -sf -o /dev/null -w "%{http_code}" http://localhost:8080/ 2>/dev/null)
echo "HTTP 상태: $HTTP"
if [ "$HTTP" = "403" ] || [ "$HTTP" = "200" ]; then
echo "Jenkins 웹 응답 정상"
else
echo "아직 초기화 중..."
fi
""")
# 3. Groovy 스크립트로 Jenkins 설정 (초기 설정 우회)
run('Groovy 초기 설정', """
INIT_PW=c753461ad51f4b85901e90bff6612f84
# Jenkins init.groovy.d로 초기 설정
mkdir -p /var/lib/jenkins/init.groovy.d
cat > /var/lib/jenkins/init.groovy.d/00_setup.groovy << 'GROOVY'
import jenkins.model.*
import hudson.security.*
import jenkins.install.InstallState
def instance = Jenkins.getInstance()
// 설정 완료 처리 (wizard 건너뛰기)
if(!instance.installState.isSetupComplete()) {
InstallState.INITIAL_SETUP_COMPLETED.initializeState()
}
// admin 계정 설정
def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount('admin', 'admin')
instance.setSecurityRealm(hudsonRealm)
def strategy = new FullControlOnceLoggedInAuthorizationStrategy()
strategy.setAllowAnonymousRead(false)
instance.setAuthorizationStrategy(strategy)
instance.save()
println "Jenkins setup complete"
GROOVY
echo "Groovy 스크립트 생성"
""")
# 4. Jenkins 재시작
run('Jenkins 재시작', 'systemctl restart jenkins && sleep 10 && systemctl is-active jenkins')
# 5. 상태 재확인
time.sleep(10)
run('재시작 후 API 확인', """
for i in 1 2 3 4 5; do
HTTP=$(curl -sf -o /dev/null -w "%{http_code}" http://localhost:8080/api/json -u admin:admin 2>/dev/null)
echo "시도 $i: HTTP $HTTP"
if [ "$HTTP" = "200" ]; then break; fi
sleep 5
done
""")
run('플러그인 설치 (필수)', """
java -jar /tmp/jenkins-cli.jar -s http://localhost:8080 -auth admin:admin install-plugin \
git workflow-aggregator pipeline-stage-view credentials-binding \
ssh-agent nodejs timestamper ansicolor \
2>/dev/null && echo "플러그인 설치 완료" || echo "플러그인 설치 실패 (수동 필요)"
""", timeout=120)
client.close()
print('\n=== Jenkins 초기 설정 완료 ===')