Ubuntu Jenkins实现多环境部署的核心路径与实践
在Ubuntu环境下,通过Jenkins实现多环境(如开发、测试、预发布、生产)部署,需围绕环境隔离、自动化流程、配置管理三大核心,结合Jenkins Pipeline、Docker、Kubernetes等技术,构建可靠且可扩展的部署体系。以下是具体实现步骤与关键实践:
sudo apt install openjdk-11-jdk)、配置足够的磁盘空间(≥256MB内存,建议1GB+)及网络访问权限(如防火墙开放Jenkins端口,默认8080)。sudo apt install jenkins),启动服务并设置开机自启(sudo systemctl start jenkins && sudo systemctl enable jenkins)。访问Jenkins界面(http://<服务器IP>:8080)完成初始化(输入管理员密码、安装推荐插件如Git、Pipeline、Docker、Kubernetes)。dev-namespace、test-namespace、prod-blue、prod-green),避免资源冲突。sudo apt install docker.io),配置Jenkins节点权限(将Jenkins用户加入docker组:sudo usermod -aG docker jenkins)。通过Dockerfile定义应用镜像(如Spring Boot应用的Dockerfile),在Jenkins Pipeline中构建并推送镜像至Docker Registry(如Docker Hub、私有Registry)。stage('Build & Push Docker Image') {
steps {
script {
docker.build("${DOCKER_REGISTRY}/${APP_NAME}:${env.BUILD_NUMBER}")
docker.withRegistry('https://' + DOCKER_REGISTRY, 'docker-registry-creds') {
docker.image("${DOCKER_REGISTRY}/${APP_NAME}:${env.BUILD_NUMBER}").push()
}
}
}
}
kubectl命令部署应用至目标命名空间。stage('Deploy to Staging (Green)') {
steps {
script {
sh "kubectl apply -f k8s/deployment.yaml -n ${PROD_NAMESPACE_GREEN}"
sh "kubectl rollout status deployment/${APP_NAME} -n ${PROD_NAMESPACE_GREEN} --timeout=300s"
}
}
}
dev、test、prod),对应不同环境的配置(如user-service-dev.yml、user-service-prod.yml)。spring.profiles.active(如@profile.active@),打包时注入对应环境值(如-Pprod对应prod环境)。采用声明式Pipeline(推荐)定义多环境部署流程,核心阶段包括:
dev、test、prod)。parameters {
choice(name: 'ENVIRONMENT', choices: ['dev', 'test', 'prod'], description: 'Select target environment')
}
stage('Build & Unit Test') {
steps {
sh 'mvn clean package -DskipTests=false'
junit '**/target/surefire-reports/*.xml'
}
}
stage('Upload Artifact') {
steps {
nexusArtifactUploader artifacts: [[artifactId: 'user-service', classifier: '', file: 'target/user-service-${BUILD_NUMBER}.jar', type: 'jar']],
credentialsId: 'nexus-creds',
groupId: 'com.example',
nexusUrl: 'http://nexus.example.com',
nexusVersion: 'nexus3',
protocol: 'http',
repository: 'maven-releases',
version: "${BUILD_NUMBER}"
}
}
dev-namespace),触发自动化集成测试(如Selenium、JMeter)。prod-green),运行端到端测试(E2E)和性能测试,验证应用稳定性。prod-blue)导向新环境(prod-green),确保零停机。stage('Deploy to Production (Blue-Green)') {
steps {
script {
// 部署新版本至绿环境
sh "kubectl apply -f k8s/deployment.yaml -n ${PROD_NAMESPACE_GREEN}"
sh "kubectl rollout status deployment/${APP_NAME} -n ${PROD_NAMESPACE_GREEN} --timeout=300s"
// 运行验收测试
sh "kubectl exec -n ${PROD_NAMESPACE_GREEN} $(kubectl get pods -n ${PROD_NAMESPACE_GREEN} -l app=${APP_NAME} -o jsonpath='{.items[0].metadata.name}') -- run_acceptance_tests.sh"
// 人工审批
timeout(time: 30, unit: 'MINUTES') {
input message: 'Promote to Production?', ok: 'Deploy!'
}
// 蓝绿切换:更新Service指向绿环境
sh "kubectl patch svc/${APP_NAME} -n prod -p '{\"spec\":{\"selector\":{\"app\":\"${APP_NAME}\", \"env\":\"green\"}}}'"
// 可选:清理旧环境(保留7天后删除)
sh "kubectl delete ns ${PROD_NAMESPACE_BLUE} --grace-period=0 --force || true"
}
}
}
通过以上步骤,可在Ubuntu环境下通过Jenkins实现安全、可靠、高效的多环境部署,满足不同阶段的发布需求(如快速迭代开发、严格测试预发布、零停机生产)。