#!/bin/bash # Jenkins 构建触发脚本 # 用法: ./jenkins-build.sh [job-name] [env] # 示例: ./jenkins-build.sh ai-proj staging set -e # 加载凭据 source ~/.config/devops/credentials.env JOB_NAME="${1:-ai-proj}" DEPLOY_ENV="${2:-staging}" echo "触发 Jenkins 构建..." echo "Job: $JOB_NAME" echo "环境: $DEPLOY_ENV" echo "" # 触发构建 RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \ "$JENKINS_URL/job/$JOB_NAME/buildWithParameters" \ -u "$JENKINS_USER:$JENKINS_TOKEN" \ --data "DEPLOY_ENV=$DEPLOY_ENV&SKIP_TESTS=false") HTTP_CODE=$(echo "$RESPONSE" | tail -1) if [ "$HTTP_CODE" = "201" ]; then echo "构建已触发成功!" echo "" echo "查看构建状态: $JENKINS_URL/job/$JOB_NAME/" # 等待 2 秒后获取构建号 sleep 2 BUILD_INFO=$(curl -s "$JENKINS_URL/job/$JOB_NAME/lastBuild/api/json" \ -u "$JENKINS_USER:$JENKINS_TOKEN" 2>/dev/null) if [ -n "$BUILD_INFO" ]; then BUILD_NUM=$(echo "$BUILD_INFO" | python3 -c "import sys,json; print(json.load(sys.stdin).get('number','N/A'))" 2>/dev/null || echo "N/A") BUILD_STATUS=$(echo "$BUILD_INFO" | python3 -c "import sys,json; d=json.load(sys.stdin); print('进行中' if d.get('building') else d.get('result','未知'))" 2>/dev/null || echo "未知") echo "构建号: #$BUILD_NUM" echo "状态: $BUILD_STATUS" fi else echo "构建触发失败! HTTP 状态码: $HTTP_CODE" exit 1 fi