Files
java-template/deployment/scripts/jenkins-setup.sh
T
bruno 8c3881bf89 🚀 feat: 企业级CI/CD基础设施完整部署方案
✨ 新功能:
- 一键自动化部署脚本 (build-infra.sh)
- 统一端口配置 (3开头端口,避免冲突)
- 多平台Docker构建支持 (AMD64 + ARM64)
- Jenkins Configuration as Code (零手动配置)
- 完整的服务验证和健康检查

🏗️ 核心组件:
- Jenkins LTS + JDK21 (端口38080)
- Gitea 1.21 (端口33000, SSH: 32222)
- Docker Registry + UI (端口35001/35002)
- 统一cicd-network网络

📋 管理工具:
- 自动化部署和验证脚本
- 健康检查和日志管理工具
- 完整的文档和故障排查指南

🎯 已验证功能:
- 所有服务正常启动和运行
- API和Web界面完全可访问
- 多平台构建环境就绪
- 完整的CI/CD流水线支持

适用环境: Mac Studio M2 + Docker Desktop
2025-08-23 22:11:50 +08:00

274 lines
6.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Jenkins简化配置脚本
set -e
JENKINS_URL="http://localhost:8081/jenkins"
BASE_DIR="/Users/brunogao/work/infra"
# 颜色输出
G='\033[0;32m'; Y='\033[1;33m'; R='\033[0;31m'; NC='\033[0m'
log() { echo -e "${G}[INFO]${NC} $1"; }
warn() { echo -e "${Y}[WARN]${NC} $1"; }
# 获取初始管理员密码
get_admin_password() {
log "获取Jenkins初始管理员密码..."
local password=$(docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 2>/dev/null || echo "")
if [[ -n "$password" ]]; then
log "初始管理员密码: $password"
echo "$password" > /tmp/jenkins-admin-password.txt
log "密码已保存到: /tmp/jenkins-admin-password.txt"
else
warn "无法获取初始密码,Jenkins可能已经初始化"
fi
}
# 检查Jenkins状态
check_jenkins_status() {
log "检查Jenkins状态..."
if curl -s "$JENKINS_URL/login" > /dev/null; then
log "✅ Jenkins运行正常"
log "🌐 访问地址: $JENKINS_URL"
return 0
else
warn "❌ Jenkins无法访问"
return 1
fi
}
# 创建Jenkins配置目录
setup_directories() {
log "创建Jenkins配置目录..."
mkdir -p "$BASE_DIR/data/jenkins"
mkdir -p "$BASE_DIR/backup/jenkins"
mkdir -p "$BASE_DIR/docker/compose/jenkins"/{config,plugins,scripts}
log "✅ 目录创建完成"
}
# 创建插件安装脚本
create_plugin_installer() {
log "创建插件安装脚本..."
cat > "$BASE_DIR/docker/compose/jenkins/scripts/install-plugins.sh" << 'EOF'
#!/bin/bash
# Jenkins插件安装脚本
PLUGINS=(
"configuration-as-code:latest"
"job-dsl:latest"
"pipeline-stage-view:latest"
"blueocean:latest"
"gitea:latest"
"docker-plugin:latest"
"docker-workflow:latest"
"credentials-binding:latest"
"timestamper:latest"
"ws-cleanup:latest"
"build-timeout:latest"
"generic-webhook-trigger:latest"
"pipeline-utility-steps:latest"
"http_request:latest"
"email-ext:latest"
"maven-plugin:latest"
"gradle:latest"
"nodejs:latest"
"python:latest"
)
echo "推荐安装的插件列表:"
for plugin in "${PLUGINS[@]}"; do
echo "- $plugin"
done
echo ""
echo "在Jenkins管理界面中,进入 '管理Jenkins' -> '插件管理' -> '可选插件'"
echo "搜索并安装上述插件"
EOF
chmod +x "$BASE_DIR/docker/compose/jenkins/scripts/install-plugins.sh"
log "✅ 插件安装脚本已创建"
}
# 创建配置指南
create_config_guide() {
log "创建配置指南..."
cat > "$BASE_DIR/docker/compose/jenkins/CONFIG_GUIDE.md" << 'EOF'
# Jenkins配置指南
## 1. 初始化设置
1. 访问 http://localhost:8081/jenkins
2. 使用初始管理员密码登录(见 /tmp/jenkins-admin-password.txt)
3. 选择 "安装推荐的插件"
4. 创建管理员用户
5. 配置Jenkins URL: http://localhost:8081/jenkins/
## 2. 必要插件安装
运行插件安装脚本查看推荐插件:
```bash
./docker/compose/jenkins/scripts/install-plugins.sh
```
## 3. 系统配置
### 3.1 全局工具配置
- Git: /usr/bin/git
- Docker: /usr/local/bin/docker
- Maven: 自动安装最新版本
- Node.js: 自动安装最新LTS版本
### 3.2 凭据配置
在 "管理Jenkins" -> "凭据" 中添加:
- Gitea Token (Secret text)
- Docker Registry 认证 (Username/Password)
- SSH密钥 (SSH Username with private key)
### 3.3 系统设置
- 执行器数量: 4
- 安静期: 5秒
- SCM检出重试次数: 3
- Jenkins URL: http://localhost:8081/jenkins/
## 4. 创建Pipeline作业
### 4.1 基础Pipeline
```groovy
pipeline {
agent any
environment {
DOCKER_REGISTRY = 'localhost:5001'
GITEA_URL = 'http://gitea:3000'
}
stages {
stage('检出代码') {
steps {
git branch: 'main', url: "${GITEA_URL}/your-repo.git"
}
}
stage('构建测试') {
steps {
sh 'echo "执行测试..."'
}
}
stage('构建镜像') {
steps {
script {
def image = docker.build("${DOCKER_REGISTRY}/app:${BUILD_NUMBER}")
docker.withRegistry("http://${DOCKER_REGISTRY}") {
image.push()
}
}
}
}
}
}
```
### 4.2 Gitea Webhook配置
1. 在Gitea项目设置中添加Webhook
2. URL: http://localhost:8081/jenkins/generic-webhook-trigger/invoke
3. 内容类型: application/json
4. 触发事件: Push events
## 5. 性能优化
### 5.1 JVM参数优化
在docker-compose.yml中已配置:
- -Xmx2g -Xms1g
- -XX:+UseG1GC
- -XX:MaxGCPauseMillis=200
### 5.2 构建历史清理
- 保留构建数: 50
- 保留天数: 30
### 5.3 工作空间清理
使用 "Workspace Cleanup" 插件自动清理
## 6. 备份策略
### 6.1 自动备份
使用 jenkins-manager.sh 脚本:
```bash
./deployment/scripts/jenkins-manager.sh
# 选择选项 4 进行备份
```
### 6.2 手动备份
```bash
tar -czf jenkins-backup-$(date +%Y%m%d).tar.gz -C /Users/brunogao/work/infra/data/jenkins .
```
## 7. 故障排除
### 7.1 常见问题
- Jenkins无法启动: 检查端口占用和权限
- 插件安装失败: 检查网络连接和代理设置
- 构建失败: 检查工具配置和环境变量
### 7.2 日志查看
```bash
docker logs jenkins
docker exec jenkins tail -f /var/jenkins_home/logs/jenkins.log
```
EOF
log "✅ 配置指南已创建"
}
# 创建快速启动脚本
create_quick_start() {
log "创建快速启动脚本..."
cat > "$BASE_DIR/quick-start-jenkins.sh" << 'EOF'
#!/bin/bash
# Jenkins快速启动脚本
echo "🚀 启动Jenkins服务..."
cd /Users/brunogao/work/infra/docker/compose
docker-compose -f jenkins-compose.yml up -d
echo "⏳ 等待Jenkins启动..."
sleep 10
echo "🔑 获取管理员密码..."
password=$(docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword 2>/dev/null || echo "已初始化")
echo "管理员密码: $password"
echo "🌐 打开Jenkins..."
open http://localhost:8081/jenkins
echo "📖 查看配置指南..."
echo "配置指南位置: docker/compose/jenkins/CONFIG_GUIDE.md"
EOF
chmod +x "$BASE_DIR/quick-start-jenkins.sh"
log "✅ 快速启动脚本已创建"
}
# 主函数
main() {
log "开始Jenkins初始化配置..."
setup_directories
check_jenkins_status
get_admin_password
create_plugin_installer
create_config_guide
create_quick_start
log "✅ Jenkins初始化配置完成!"
log ""
log "📋 下一步操作:"
log "1. 访问 $JENKINS_URL"
log "2. 使用初始密码登录(见 /tmp/jenkins-admin-password.txt)"
log "3. 按照配置指南完成设置(见 docker/compose/jenkins/CONFIG_GUIDE.md)"
log "4. 运行插件安装脚本查看推荐插件"
log ""
log "🚀 快速启动命令: ./quick-start-jenkins.sh"
}
# 运行主函数
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi