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

Jenkins中AWS认证失败求助:DefaultAWSCredentialsProvider及环境变量问题

问题排查与解决

1. 修复Pipeline环境变量配置的核心问题

你遇到的aws_access_key_id: not found错误,大概率是两个原因:一是Pipeline后续脚本错误地把变量名当成命令执行,二是环境变量配置的细节需要调整。

先修正Pipeline的环境变量及测试逻辑:

pipeline {
   agent any // 替换为你的实际Agent配置
   environment {
       // 确保Jenkins凭证中心已存在对应ID的凭证
       AWS_ACCESS_KEY_ID     = credentials('aws_access_key_id')
       AWS_SECRET_ACCESS_KEY = credentials('aws_secret_access_key')
   }
   stages {
       stage('验证环境变量') {
           steps {
               // Shell脚本中必须用$或${}引用环境变量,不能直接写变量名
               sh 'echo "AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID"'
               sh 'echo "AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY"'
           }
       }
   }
}

2. 理解DefaultAWSCredentialsProviderChain的加载逻辑

你的Java代码写法没问题,这个凭证链会按以下优先级自动加载凭证:

  • 系统属性:aws.accessKeyId、aws.secretKey
  • 环境变量:AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY
  • 本地~/.aws/credentials配置文件
  • EC2实例元数据服务(仅云内实例生效)

只要Pipeline正确注入了环境变量,Java程序就能自动读取到凭证。

3. 关键排查点

  • 凭证ID匹配:去Jenkins「凭证管理」页面核对,确保存储的凭证ID就是aws_access_key_id和aws_secret_access_key,大小写敏感。
  • 凭证类型正确:必须选择「用户名和密码」类型的凭证,用户名填AWS Access Key ID,密码填AWS Secret Access Key。
  • Agent权限:如果用远程Agent,确保Agent机器能正常拉取Jenkins凭证,且执行脚本的用户有读取环境变量的权限。
  • 脚本引用规范:所有Shell步骤中,引用环境变量必须加$前缀,比如$AWS_ACCESS_KEY_ID,否则Shell会把变量名当成命令执行,触发not found错误。

4. 简化测试流程

先验证环境变量是否正常注入,再运行Java程序:

pipeline {
   agent any
   environment {
       AWS_ACCESS_KEY_ID     = credentials('aws_access_key_id')
       AWS_SECRET_ACCESS_KEY = credentials('aws_secret_access_key')
   }
   stages {
       stage('打印环境变量') {
           steps {
               sh 'printenv | grep AWS_'
           }
       }
       stage('运行Java程序') {
           steps {
               sh 'java -jar your-application.jar' // 替换为你的Java程序启动命令
           }
       }
   }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:02:52