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

如何在Jenkins扩展选择参数的Groovy脚本中使用AWS凭据

在Jenkins Groovy脚本中调用AWS凭据的实现方案

方法一:使用withCredentials步骤(推荐,安全可控)

通过Jenkins的Credentials Binding插件提供的withCredentials步骤,可安全地将AWS凭据注入到脚本环境中,避免明文暴露密钥。修改后的脚本如下:

withCredentials([usernamePassword(
    credentialsId: '你的AWS凭据ID', // 替换为Jenkins凭据中存储的AWS密钥ID
    usernameVariable: 'AWS_ACCESS_KEY_ID',
    passwordVariable: 'AWS_SECRET_ACCESS_KEY'
)]) {
    def command = 'aws acm list-certificates --query "CertificateSummaryList[?DomainName==\'*.osdemo.cf\'].CertificateArn" --output text'
    // 执行命令时传入包含AWS凭据的环境变量
    def proc = command.execute([], null, [
        'AWS_ACCESS_KEY_ID': env.AWS_ACCESS_KEY_ID,
        'AWS_SECRET_ACCESS_KEY': env.AWS_SECRET_ACCESS_KEY
    ])
    proc.waitFor()              

    def output = proc.in.text
    def exitcode = proc.exitValue()
    def error = proc.err.text

    if (error) {
        println "Std Err: ${error}"
        println "Process exit code: ${exitcode}"
        return exitcode
    }

    return output.tokenize()
}

关键说明

  • credentialsId:替换为你在Jenkins凭据管理中创建的AWS密钥对应的凭据ID
  • usernamePassword类型适配:AWS Access Key ID作为username,Secret Access Key作为password存储,符合Jenkins凭据的usernamePassword类型定义
  • 环境变量注入:执行aws命令时,通过execute方法的第三个参数传入凭据环境变量,AWS CLI会自动读取这些变量完成身份认证

方法二:通过Pipeline环境块注入凭据

若使用声明式Pipeline,可在环境块中直接绑定凭据,再在脚本中调用:

pipeline {
    agent any
    environment {
        // 绑定凭据,生成的变量格式为「凭据名_USR」和「凭据名_PSW」
        AWS_CREDS = credentials('你的AWS凭据ID')
    }
    stages {
        stage('查询ACM证书') {
            steps {
                script {
                    def command = 'aws acm list-certificates --query "CertificateSummaryList[?DomainName==\'*.osdemo.cf\'].CertificateArn" --output text'
                    def proc = command.execute([], null, [
                        'AWS_ACCESS_KEY_ID': AWS_CREDS_USR,
                        'AWS_SECRET_ACCESS_KEY': AWS_CREDS_PSW
                    ])
                    proc.waitFor()              

                    def output = proc.in.text
                    def exitcode = proc.exitValue()
                    def error = proc.err.text

                    if (error) {
                        println "Std Err: ${error}"
                        println "Process exit code: ${exitcode}"
                        return exitcode
                    }

                    return output.tokenize()
                }
            }
        }
    }
}

注意事项

  • 确保Jenkins已安装Credentials Binding插件,否则无法使用上述凭据绑定功能
  • 禁止在脚本中打印或存储AWS密钥,Jenkins的凭据机制会在步骤执行完毕后自动清除相关变量,保障安全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:35:11