MuleSoft Maven 插件不读取 Azure 管道中的变量

MuleSoft Maven plugin not reading variables in Azure pipelines

我有一个 MuleSoft 应用程序,我正尝试从管道部署它。 我正在使用 Maven 插件和连接的应用程序来获取凭据。插件配置如下所示:

<configuration>
  <armDeployment>
    <muleVersion>${app.runtime}</muleVersion>
    <uri>https://anypoint.mulesoft.com</uri>
    <businessGroupId>${BUSINESSGROUPID}</businessGroupId>
    <target>${TARGET}</target>
    <targetType>${TARGETGROUP}</targetType>
    <connectedAppClientId>${APPCLIENTID}</connectedAppClientId>
    <connectedAppClientSecret>${APPCLIENTSECRET}</connectedAppClientSecret>
    <connectedAppGrantType>client_credentials</connectedAppGrantType>
    <environment>${ENVIRONMENT}</environment>
  </armDeployment>
</configuration>

我在 Azure 管道中定义变量(其中 3 个是秘密凭据),当我 运行 管道时,我收到 401 未经授权的错误。

当我在上述配置中对值进行硬编码时,它工作正常。只有当我尝试让 POM 文件从管道变量中读取它们时,我才会收到此错误。 下面也是我的管道配置:

trigger:
- master

variables:
  APPCLIENTID: $(APPCLIENTID)
  APPCLIENTSECRET: $(APPCLIENTSECRET)
  ENVIRONMENT: $(ENVIRONMENT)
  BUSINESSGROUPID: $(BUSINESSGROUPID)
  TARGET: $(TARGET)
  TARGETGROUP: $(TARGETGROUP)


pool:
  vmImage: ubuntu-latest

steps:
- task: Maven@3
  inputs:
    mavenPomFile: 'pom.xml'
    mavenOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.8'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: true
    testResultsFiles: '**/surefire-reports/TEST-*.xml'
    goals: 'clean package deploy -DmuleDeploy'

不知道这里要不要重新定义变量

如何让POM文件正确读取变量?

您不能直接在 pom.xml 中使用 Azure Pipeline 变量。它们不是 Maven 中的属性。您必须在 Maven 的命令行中明确定义它们。

在目标输入中,您可以为命令行定义 Maven 属性,并使用 'goals' 输入为它们分配来自相应 Azure Pipeline 变量的值。

我猜 syntax for referencing variables$(var) 例如:

    goals: 'clean package deploy -DmuleDeploy -DAPPCLIENTID=$(APPCLIENTID)'

只需尝试在 APPCLIENTID 旁边添加其他属性。

好的,我发现问题出在哪里了。 Azure Pipelines 文档指出您需要使用 $() 才能访问变量,但对于 POM 文件,您需要使用 {}。所以 POM 文件应该是这样的:

<configuration>
<armDeployment>
    <muleVersion>${app.runtime}</muleVersion>
    <uri>https://anypoint.mulesoft.com</uri>
    <businessGroupId>${BUSINESSGROUPID}</businessGroupId>
    <target>${TARGET}</target>
    <targetType>${TARGETGROUP}</targetType>
    <connectedAppClientId>${APPCLIENTID}</connectedAppClientId>
    <connectedAppClientSecret>${APPCLIENTSECRET}</connectedAppClientSecret>
    <connectedAppGrantType>client_credentials</connectedAppGrantType>
    <environment>${ENVIRONMENT}</environment>
  </armDeployment>
</configuration>

我注意到的另一件事是,这样做将不允许 POM 文件读取设置为机密的变量。我还没有找到如何使它正常工作的方法,但现在我已经完成了大部分工作。