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

如何从Jenkins单个凭证存储中获取多个密钥

解决方案

你理解的没错:credentials('file')方法只会返回凭证文件的路径,不会自动解析文件内的键值对。要把文件里的订阅ID、租户ID等变量提取出来供流水线使用,有两种实用的方式:

方式一:Groovy解析文件并注入环境变量(推荐)

这种方式能把变量加载到Jenkins全局环境中,所有后续stage都能直接使用:

修改你的Jenkinsfile如下:

//Jenkinsfile (Declarative Pipeline)
pipeline {
    agent { label 'AZcli' }

    environment {
        SECRETS_FILE = credentials('AZJenkinsSecretsFile')
    }

    stages {
        stage('加载密钥变量') {
            steps {
                script {
                    // 读取密钥文件内容
                    def secretsText = readFile(SECRETS_FILE)
                    // 逐行解析key=value格式的内容
                    secretsText.eachLine { line ->
                        if (line.trim() && line.contains('=')) {
                            def keyValue = line.split('=', 2)
                            def key = keyValue[0].trim()
                            def value = keyValue[1].trim()
                            // 将变量注入Jenkins全局环境
                            env[key] = value
                        }
                    }
                }
                // 可选:验证变量是否加载成功
                sh 'echo "订阅ID: $subscription 租户ID: $tenant"'
            }
        }

        stage('使用Azure密钥') {
            steps {
                sh '''
                    # 直接使用加载好的变量执行Azure CLI命令
                    az login --service-principal -u $client -p $password --tenant $tenant
                    az account set --subscription $subscription
                '''
            }
        }
    }
}

方式二:Shell脚本直接加载文件

如果只需要在单个Shell步骤中使用这些变量,可以直接用source命令加载文件:

pipeline {
    agent { label 'AZcli' }

    environment {
        SECRETS_FILE = credentials('AZJenkinsSecretsFile')
    }

    stages {
        stage('执行Azure操作') {
            steps {
                sh '''
                    # 加载密钥文件到当前Shell环境
                    source $SECRETS_FILE
                    # 直接使用变量
                    az login --service-principal -u $client -p $password --tenant $tenant
                    az account set --subscription $subscription
                '''
            }
        }
    }
}

注意:这种方式的变量仅在当前Shell步骤中有效,其他步骤无法直接访问。

关键说明

  • 你的密钥文件格式(key=value每行一个)非常适合这两种解析方式,不需要修改文件内容。
  • 无论哪种方式,都避免了把敏感信息硬编码到Jenkinsfile中,符合安全要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:36:26