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 工作目录来解决此问题。
我已经创建了一个 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 工作目录来解决此问题。