Azure Pipeline maven 任务未获取 GCP 凭据

Azure Pipeline maven task not picking up GCP credentials

我已经创建了一个 Azure 管道,它应该使用 GCP 服务帐户进行身份验证并执行 Maven 测试步骤。 在测试中,我有一个 BigQuery 客户端直接连接到 BigQuery 数据集,对其进行查询并进行一些断言,这就是我需要凭据的原因。

在我的本地机器上一切正常,我已将 GOOGLE_APPLICATION_CREDENTIALS 指向包含服务帐户密钥的 .json

即使在管道中,除了 maven 命令外,一切都可以使用密钥正常工作(我已经在一些 terraform 步骤上检查过它,他们正在获取以这种方式提供的凭据)。

下面是我使用的代码:

Azure 管道:

steps:
  - task: Bash@3
    displayName: Copy GCP Service Account Key
    inputs:
      workingDirectory: ${{parameters.working_drectory}}
      targetType: 'inline'
      script: 'echo ${{parameters.credentials}} | base64 -d > svc.json'

  - task: laurensknoll.google-cloud-sdk-tasks.gcloud-runner.GcloudRunner@0
    displayName: 'gcloud auth activate-service-account'
    inputs:
      command: 'auth activate-service-account'
      arguments: '--key-file svc.json'
      workingDirectory: ${{parameters.working_drectory}}

  - task: laurensknoll.google-cloud-sdk-tasks.gcloud-runner.GcloudRunner@0
    displayName: 'gcloud config set project'
    inputs:
      command: 'config set project'
      arguments: ${{parameters.project}}
      workingDirectory: ${{parameters.working_drectory}}

  - task: MavenAuthenticate@0
    # This task will authenticate your maven feed for input deps and output deps
    inputs:
      artifactsFeeds: $(incomingFeedName)

  - task: Maven@3
    # The version in the POM has to be set to the 'correct value' which is defined by line 2 of this file
    # Note that this changes the pom, so the cache key in the step called 'Cache Maven' will change, and we will need to change this back later
    inputs:
      mavenPomFile: 'samples/testproject/pom.xml'
      goals: 'test'
      mavenAuthenticateFeed: true
    displayName: Build test and set the version, package

相关POM部分:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven-surefire-plugin.version}</version>
        <configuration>
            <parallel>all</parallel>
            <threadCount>4</threadCount>
            <redirectTestOutputToFile>true</redirectTestOutputToFile>
            <systemPropertyVariables>
                <WSNSHELL_HOME>GOOGLE_APPLICATION_CREDENTIALS</WSNSHELL_HOME>
            </systemPropertyVariables>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>org.apache.maven.surefire</groupId>
                <artifactId>surefire-junit47</artifactId>
                <version>${maven-surefire-plugin.version}</version>
            </dependency>
        </dependencies>
    </plugin>

我已经尝试将 GOOGLE_APPLICATION_CREDENTIALS 作为一个选项传递给带有 -DGOOGLE_APPLICATION_CREDENTIALS=svc.json 的 maven,但这也没有用

问题是凭据 json 文件不在 maven 工作目录中,这意味着 maven 工作目录和其他步骤工作目录不相同。

已通过将凭据 json 文件复制到 maven 工作目录来解决此问题。