|
|
@@ -7,12 +7,15 @@ pipeline {
|
|
|
ansiColor('xterm')
|
|
|
}
|
|
|
|
|
|
- // 构建时手选环境与分支:一份 Jenkinsfile 服务 dev / sit / uat 三个环境
|
|
|
+ // 构建时手选环境与分支:一份 Jenkinsfile 服务 dev / sit / uat 三个环境。
|
|
|
+ // 物理隔离架构下:每台 Jenkins 上设全局环境变量 DEPLOY_ENV=dev/sit/uat,
|
|
|
+ // Validate Deploy Target stage 会强制 APP_ENV 必须等于 DEPLOY_ENV,
|
|
|
+ // 避免把错误环境的代码部署到错误的机器上。
|
|
|
parameters {
|
|
|
choice(
|
|
|
name: 'APP_ENV',
|
|
|
choices: ['dev', 'sit', 'uat'],
|
|
|
- description: '部署到哪个环境'
|
|
|
+ description: '部署到哪个环境(物理隔离下:必须与本机 DEPLOY_ENV 一致,否则构建失败)'
|
|
|
)
|
|
|
string(
|
|
|
name: 'BRANCH',
|
|
|
@@ -47,6 +50,32 @@ pipeline {
|
|
|
|
|
|
stages {
|
|
|
|
|
|
+ stage('Validate Deploy Target') {
|
|
|
+ // 物理隔离守护:本机的 DEPLOY_ENV 必须与请求的 APP_ENV 一致
|
|
|
+ // 在 dev 服务器误选 sit/uat 时,立即失败,避免把 uat 代码部到 dev 机
|
|
|
+ // 配置方式:在每台机器的 Jenkins "Global properties → Environment variables"
|
|
|
+ // 设置 DEPLOY_ENV 为 dev / sit / uat 之一。
|
|
|
+ // 未配置 DEPLOY_ENV 时(如本地调试),跳过校验。
|
|
|
+ steps {
|
|
|
+ script {
|
|
|
+ def expected = env.DEPLOY_ENV
|
|
|
+ if (expected && expected != params.APP_ENV) {
|
|
|
+ error """
|
|
|
+ ============ 部署环境与本机定位不匹配 ============
|
|
|
+ 本机被定位为: DEPLOY_ENV=${expected}
|
|
|
+ 你请求部署的: APP_ENV=${params.APP_ENV}
|
|
|
+ 本次构建已终止,避免错误地把 ${params.APP_ENV} 部署到 ${expected} 机器上。
|
|
|
+ 如果你确实想改本机定位,请联系运维修改 Jenkins 全局环境变量 DEPLOY_ENV。
|
|
|
+ =================================================
|
|
|
+ """.stripIndent()
|
|
|
+ }
|
|
|
+ if (!expected) {
|
|
|
+ echo "提示: 本机 Jenkins 未设置 DEPLOY_ENV,跳过部署目标校验。"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
stage('Show Build Info') {
|
|
|
steps {
|
|
|
echo "============================================================"
|