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 文件读取设置为机密的变量。我还没有找到如何使它正常工作的方法,但现在我已经完成了大部分工作。
我有一个 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 文件读取设置为机密的变量。我还没有找到如何使它正常工作的方法,但现在我已经完成了大部分工作。