Files
ljwx-health/docker/compose/jenkins/templates/Jenkinsfile.docker
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

123 lines
3.8 KiB
Docker

pipeline {
agent any
environment {
DOCKER_REGISTRY = 'localhost:5001'
APP_NAME = 'my-app'
APP_VERSION = "${BUILD_NUMBER}"
REGISTRY_CREDENTIALS = 'registry-auth'
}
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
timeout(time: 30, unit: 'MINUTES')
timestamps()
}
stages {
stage('检出代码') {
steps {
checkout scm
script {
env.GIT_COMMIT_SHORT = sh(
script: 'git rev-parse --short HEAD',
returnStdout: true
).trim()
env.IMAGE_TAG = "${APP_VERSION}-${GIT_COMMIT_SHORT}"
}
}
}
stage('构建Docker镜像') {
steps {
script {
def imageName = "${DOCKER_REGISTRY}/${APP_NAME}:${IMAGE_TAG}"
def latestName = "${DOCKER_REGISTRY}/${APP_NAME}:latest"
echo "构建镜像: ${imageName}"
// 构建镜像
sh """
docker build -t ${imageName} .
docker tag ${imageName} ${latestName}
"""
// 推送镜像
withCredentials([usernamePassword(
credentialsId: REGISTRY_CREDENTIALS,
usernameVariable: 'REGISTRY_USER',
passwordVariable: 'REGISTRY_PASS'
)]) {
sh """
echo \$REGISTRY_PASS | docker login ${DOCKER_REGISTRY} -u \$REGISTRY_USER --password-stdin
docker push ${imageName}
docker push ${latestName}
"""
}
}
}
}
stage('镜像安全扫描') {
steps {
echo '执行镜像安全扫描...'
sh """
echo "扫描镜像: ${DOCKER_REGISTRY}/${APP_NAME}:${IMAGE_TAG}"
# 这里可以集成Trivy等安全扫描工具
"""
}
}
stage('部署到测试环境') {
when {
branch 'develop'
}
steps {
script {
echo '部署到测试环境...'
sh """
docker stop ${APP_NAME}-test || true
docker rm ${APP_NAME}-test || true
docker run -d --name ${APP_NAME}-test -p 8080:5000 ${DOCKER_REGISTRY}/${APP_NAME}:${IMAGE_TAG}
"""
}
}
}
stage('部署到生产环境') {
when {
anyOf {
branch 'main'
branch 'master'
}
}
steps {
script {
echo '部署到生产环境...'
sh """
docker stop ${APP_NAME}-prod || true
docker rm ${APP_NAME}-prod || true
docker run -d --name ${APP_NAME}-prod -p 8081:5000 ${DOCKER_REGISTRY}/${APP_NAME}:${IMAGE_TAG}
"""
}
}
}
}
post {
always {
echo 'Pipeline执行完成'
sh """
docker logout ${DOCKER_REGISTRY} || true
docker system prune -f || true
"""
}
success {
echo '✅ 构建成功!'
}
failure {
echo '❌ 构建失败!'
}
}
}