zioinfo-mail/scripts/setup/jenkins_configure.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

101 lines
3.5 KiB
Python

import paramiko, sys, time
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)
JENKINS = 'http://127.0.0.1:9080'
AUTH = 'admin:1q2w3e!Q'
def run(label, cmd, timeout=120):
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[:400])
if err:
bad = [l for l in err.splitlines() if not any(k in l.lower() for k in ['warn','info','downloading','progress'])]
if bad: print('ERR:', '\n'.join(bad[:2]))
return out
# 1. API 접속 확인
run('API 확인', f"""
HTTP=$(curl -sf -o /dev/null -w "%{{http_code}}" {JENKINS}/api/json -u {AUTH} 2>/dev/null)
echo "HTTP: $HTTP"
if [ "$HTTP" = "200" ]; then
curl -sf {JENKINS}/api/json -u {AUTH} 2>/dev/null | python3 -c "
import sys,json; d=json.load(sys.stdin); print('Jenkins', d.get('fullName','OK'))
" 2>/dev/null
fi
""")
# 2. 필수 플러그인 설치
run('필수 플러그인 설치', f"""
java -jar /tmp/jenkins-cli.jar -s {JENKINS} -auth {AUTH} install-plugin \
git workflow-aggregator pipeline-stage-view credentials-binding \
ssh-agent nodejs timestamper ansicolor http_request junit \
gitea 2>&1 | tail -5
echo "플러그인 설치 요청 완료"
""")
# 3. Gitea Credential 등록 (Groovy Script Console)
run('Gitea Credential 등록', f"""
CRUMB=$(curl -sf "{JENKINS}/crumbIssuer/api/json" -u {AUTH} 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['crumb'])" 2>/dev/null)
echo "Crumb: $CRUMB"
curl -sf -X POST "{JENKINS}/scriptText" -u {AUTH} \
-H "Jenkins-Crumb: $CRUMB" \
--data-urlencode 'script=
import jenkins.model.*
import com.cloudbees.plugins.credentials.*
import com.cloudbees.plugins.credentials.domains.*
import com.cloudbees.plugins.credentials.impl.*
def store = Jenkins.instance.getExtensionList("com.cloudbees.plugins.credentials.SystemCredentialsProvider")[0]?.getStore()
if (store) {{
def cred = new UsernamePasswordCredentialsImpl(
CredentialsScope.GLOBAL, "gitea-token", "Gitea zio account",
"zio", "Zio@Admin2026!"
)
store.addCredentials(Domain.global(), cred)
println "Credential 등록 완료"
}} else {{
println "Store null - credentials 플러그인 확인 필요"
}}
' 2>/dev/null
""")
# 4. 환경변수 설정
run('글로벌 환경변수 설정', f"""
curl -sf -X POST "{JENKINS}/scriptText" -u {AUTH} \
--data-urlencode 'script=
import jenkins.model.*
import hudson.EnvVars
def instance = Jenkins.instance
def globalProps = instance.globalNodeProperties
def envVarsNodeProperty = globalProps.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
if (!envVarsNodeProperty) {{
def newProp = new hudson.slaves.EnvironmentVariablesNodeProperty()
globalProps.add(newProp)
envVarsNodeProperty = [newProp]
}}
def envVars = envVarsNodeProperty[0].getEnvVars()
envVars.put("ITSM_BASE_URL", "http://127.0.0.1:9001")
envVars.put("GITEA_URL", "http://127.0.0.1:9003")
envVars.put("SERVER_HOST", "101.79.17.164")
instance.save()
println "환경변수 설정 완료"
' 2>/dev/null
""")
# 5. 상태 확인
run('최종 상태', f"""
HTTP=$(curl -sf -o /dev/null -w "%{{http_code}}" {JENKINS}/api/json -u {AUTH} 2>/dev/null)
echo "Jenkins API: HTTP $HTTP"
java -jar /tmp/jenkins-cli.jar -s {JENKINS} -auth {AUTH} version 2>/dev/null
""")
client.close()
print('\n=== Jenkins 기본 설정 완료 ===')