Przeglądaj źródła

ci(jenkins): 物理隔离守护,校验本机DEPLOY_ENV与APP_ENV一致

Co-authored-by: Cursor <cursoragent@cursor.com>
天空之城 2 tygodni temu
rodzic
commit
7e6be98403
1 zmienionych plików z 31 dodań i 2 usunięć
  1. 31 2
      Jenkinsfile

+ 31 - 2
Jenkinsfile

@@ -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 "============================================================"