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

如何在本地及GitHub Actions中用托管身份访问Azure Blob存储(Selenium Java)

解决Selenium Java测试通过托管身份访问Azure Blob存储的两种场景方案

一、本地运行自动化测试时的访问方案

步骤1:配置本地Azure身份验证

  • 安装Azure CLI后,运行 az login 命令,使用拥有目标Blob存储访问权限的Azure账号完成登录
  • 在Azure门户中,给当前登录的账号分配Storage Blob Data Reader(或更高权限,如需要上传则用Contributor)角色,作用范围可设置为目标存储账户或具体容器

步骤2:修改Java代码适配托管身份认证

替换原有的访问密钥认证逻辑,使用Azure Identity SDK的DefaultAzureCredential自动获取本地身份凭证:

import com.azure.storage.blob.BlobClient;
import com.azure.storage.blob.BlobContainerClient;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;
import com.azure.identity.DefaultAzureCredential;

public class BlobDownloadUtil {
    public static void downloadBlob(String storageAccountEndpoint, String containerName, String blobName, String localSavePath) {
        // DefaultAzureCredential会自动读取Azure CLI的登录身份
        BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
                .endpoint(storageAccountEndpoint)
                .credential(new DefaultAzureCredential())
                .buildClient();

        BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);
        BlobClient blobClient = containerClient.getBlobClient(blobName);
        
        blobClient.downloadToFile(localSavePath);
    }
}

步骤3:验证权限有效性

可通过Azure CLI检查当前账号的角色分配:

az role assignment list --assignee <你的Azure账号邮箱> --scope "/subscriptions/<订阅ID>/resourceGroups<资源组名>/providers/Microsoft.Storage/storageAccounts/<存储账户名>"

二、GitHub Actions流水线中的访问方案

步骤1:创建Azure服务主体并分配角色

使用Azure CLI创建专门用于GitHub Actions的服务主体,并赋予Blob访问权限:

az ad sp create-for-rbac --name "github-actions-blob-access" --role "Storage Blob Data Reader" --scopes "/subscriptions/<订阅ID>/resourceGroups<资源组名>/providers/Microsoft.Storage/storageAccounts/<存储账户名>"

执行后记录返回的appId、password、tenantId三个参数。

步骤2:配置GitHub仓库机密

在GitHub仓库的Settings > Secrets and variables > Actions页面,添加以下三个机密:

  • AZURE_CLIENT_ID:对应服务主体的appId
  • AZURE_CLIENT_SECRET:对应服务主体的password
  • AZURE_TENANT_ID:对应服务主体的tenantId

步骤3:修改GitHub Actions工作流

在测试执行步骤前添加Azure登录逻辑,确保流水线环境能获取到托管身份凭证:

name: Selenium Blob Test Pipeline
on: [push, pull_request]

jobs:
  run-tests:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 配置Java环境
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: Azure身份验证
        uses: azure/login@v1
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}

      - name: 执行Selenium测试
        run: mvn test # 根据你的项目构建工具调整命令,如gradle test

步骤4:代码适配说明

无需修改Java测试代码,DefaultAzureCredential会自动识别GitHub Actions中设置的环境变量,自动获取服务主体身份完成认证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:12:39