You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins工作目录意外变更原因排查

问题分析与解决方案

问题1:Jenkins自动切换到@2工作目录

出现DBClusterMigration@2这类目录,是因为你在Pipeline中同时使用了agent any和嵌套的node("jenkins-prod")块,Jenkins会为node块单独分配备用工作空间,而非复用预期目录。

解决方法

方式1:直接指定agent节点,避免嵌套node块

pipeline {
  options {
    disableConcurrentBuilds()
  } 
  agent { label "jenkins-prod" } // 直接绑定目标节点
  environment {
    REGION = 'us-east-1'
    ENV = "${params.ENVIRONMENT}"
    JENKINS_NODE="jenkins-${ENV}"
    BUILDVERSION = sh(script: 'date +%Y%m%d%H%M', returnStdout: true).trim()
  }   
  stages {
    stage('Creating and sharing snapshot from prod') {
      steps {
        dir("/home/centos/workspace/DBClusterMigration") {
          // 执行脚本逻辑
        }
      }
    }
  } 
}

方式2:在node块中显式指定自定义工作空间

node("jenkins-prod") {
  customWorkspace "/home/centos/workspace/DBClusterMigration"
  dir("/home/centos/workspace/DBClusterMigration") {
    // 执行脚本逻辑
  }
}

问题2:RDS快照ID无效错误

从日志可见prod-${BUILDVERSION}未正确替换为prod-202310250709,直接丢失前缀,核心问题有两个:

  1. environment块中变量定义错误,不应加def关键字,且shell命令的反引号会导致嵌套解析问题;
  2. 单引号包裹的shell脚本无法引用Jenkins环境变量,变量替换会失效。

解决方法

修正环境变量定义与shell脚本的变量引用:

pipeline {
  options {
    disableConcurrentBuilds()
  } 
  agent { label "jenkins-prod" }
  environment {
    REGION = 'us-east-1'
    ENV = "${params.ENVIRONMENT}"
    JENKINS_NODE="jenkins-${ENV}"
    // 移除def,直接通过sh步骤赋值,避免反引号嵌套问题
    BUILDVERSION = sh(script: 'date +%Y%m%d%H%M', returnStdout: true).trim()
  }   
  stages {
    stage('Creating and sharing snapshot from prod') {
      steps {
        dir("/home/centos/workspace/DBClusterMigration") {
          // 用双引号包裹脚本,让Jenkins先替换环境变量再执行shell
          sh """
            aws rds create-db-cluster-snapshot --db-cluster-snapshot-identifier prod-${BUILDVERSION} --db-cluster-identifier prod --region ${REGION}
            aws rds copy-db-cluster-snapshot --source-db-cluster-snapshot-identifier prod-${BUILDVERSION} --target-db-cluster-snapshot-identifier reencrypted-prod-${BUILDVERSION} --kms-key-id b21e3752-3797-4604-9136-b0fc6d40cd3b --region ${REGION}
            aws rds modify-db-cluster-snapshot-attribute --db-cluster-snapshot-identifier reencrypted-prod-${BUILDVERSION} --attribute-name restore --values-to-add "782918959274" "953441081555" "451870394779" --region ${REGION}
          """
        }
      }
    }
  } 
}

关键修正点

  • 去掉environment中BUILDVERSION的def关键字,Jenkins环境变量无需用def声明;
  • 移除shell命令里的反引号,直接执行date +%Y%m%d%H%M,避免嵌套解析;
  • 将shell脚本的单引号改为双引号(三引号),确保Jenkins先替换变量再传递给shell执行。

内容的提问来源于stack exchange,提问作者Evgeniy Pozdnyakov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:39:55