✨ 新功能: - 一键自动化部署脚本 (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
274 lines
6.9 KiB
Bash
Executable File
274 lines
6.9 KiB
Bash
Executable File
#!/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 |