CentOS环境下Jenkins实现多环境部署的核心流程与配置要点
在CentOS系统中,通过Jenkins实现多环境(如开发、测试、生产)部署,需围绕参数化配置、环境隔离、自动化流程三大核心展开。以下是具体实现步骤与关键细节:
sudo yum install -y jenkins),并启动服务(sudo systemctl start jenkins)。若需容器化部署,可使用Docker(docker run -d -p 8080:8080 --name jenkins jenkinsci/blueocean)。参数化构建是多环境部署的核心入口,通过用户选择的参数动态调整构建流程。
ENVIRONMENT,选项值为dev,test,prod(对应开发、测试、生产环境),描述为“选择目标部署环境”;APP_VERSION,默认值为1.0.${BUILD_NUMBER},用于动态生成应用版本号。${ENVIRONMENT}引用,Pipeline项目通过params.ENVIRONMENT引用。http://gitlab.example.com/project/repo.git),若需指定分支,可通过${BRANCH_NAME}参数动态选择(如*/${BRANCH_NAME})。clean package -DskipTests -P${ENVIRONMENT}(-P参数激活Maven Profile,与后续Spring Boot Profile一致);./build.sh ${ENVIRONMENT}调用自定义脚本,生成可部署的包(如JAR、WAR或Docker镜像)。application.properties),可通过Shell脚本从Git仓库拉取对应环境的配置(如cp -r deploy-config/${ENVIRONMENT}/config/* ./src/main/resources/),替换默认配置。dev服务器),配置:
target/*.jar(Maven构建的JAR包);target(移除本地路径前缀);/opt/app/${ENVIRONMENT}/(远程服务器的目标目录,按环境隔离);chmod +x /opt/app/${ENVIRONMENT}/app.jar(赋予执行权限)。/opt/app/${ENVIRONMENT}/start.sh):nohup java -jar /opt/app/${ENVIRONMENT}/app.jar --spring.profiles.active=${ENVIRONMENT} > /opt/app/${ENVIRONMENT}/logs/app.log 2>&1 &(--spring.profiles.active参数激活Spring Boot Profile,加载对应环境的配置);Deploy阶段添加sh步骤,直接调用远程脚本(如ssh dev-server "cd /opt/app/${params.ENVIRONMENT} && ./start.sh")。src/main/resources下创建多环境配置文件:
application.yml(公共配置):spring.profiles.active=@profile.active@(Maven动态注入);application-dev.yml(开发环境):server.port: 8081、spring.datasource.url: jdbc:mysql://dev-db:3306/db;application-prod.yml(生产环境):server.port: 80、spring.datasource.url: jdbc:mysql://prod-db:3306/db。pom.xml中定义Profile,将@profile.active@注入application.yml:<profiles>
<profile>
<id>dev</id>
<properties>
<profile.active>dev</profile.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profile.active>prod</profile.active>
</properties>
</profile>
</profiles>
构建时通过-P${ENVIRONMENT}激活对应Profile,实现配置文件的动态替换。若需更灵活的流程控制,建议使用Jenkins Pipeline(声明式或脚本式)。以下是声明式Pipeline示例:
pipeline {
agent any
parameters {
choice(name: 'ENVIRONMENT', choices: ['dev', 'test', 'prod'], description: '选择部署环境')
string(name: 'APP_VERSION', defaultValue: '1.0.${BUILD_NUMBER}', description: '应用版本号')
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'mvn clean package -DskipTests -P${params.ENVIRONMENT}'
}
}
stage('Deploy to ${params.ENVIRONMENT}') {
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: params.ENVIRONMENT,
transfers: [
sshTransfer(
sourceFile: 'target/*.jar',
removePrefix: 'target',
remoteDirectory: "/opt/app/${params.ENVIRONMENT}/"
)
],
execCommand: "cd /opt/app/${params.ENVIRONMENT} && ./start.sh"
)
]
)
}
}
}
post {
always {
cleanWs()
}
}
}
该Pipeline实现了参数化构建→Maven打包→SSH传输→远程启动的全流程自动化,且可根据环境动态调整步骤。
withCredentials块或credentials参数引用,避免硬编码。/opt/app/${ENVIRONMENT}/app-${BUILD_NUMBER}.jar),若新版本部署失败,可通过脚本快速回滚到上一版本(如cp /opt/app/${ENVIRONMENT}/app-${PREV_BUILD_NUMBER}.jar /opt/app/${ENVIRONMENT}/app.jar)。通过以上步骤,即可在CentOS环境下通过Jenkins实现多环境(开发、测试、生产)的自动化部署,兼顾灵活性、安全性与可维护性。