我创建了一个多实例移动应用程序管道。它为每个租户(客户端)创建一个 apk 和一个 aab。为此,我使用管道参数,可以一次设置多个租户:
- name: Tenants
displayName: "Select Tenants to build for"
type: object
default:
- ExampleClient
- ExampleClient2
现在在 BuildAndroid 阶段,我想为每个租户构建一个 .apk 和 .aab,我使用矩阵和循环编译时间:
- stage: BuildAndroid
variables:
- group: ${{ TenantName }}
jobs:
- job: 'BuildAndroid'
strategy:
matrix:
${{ each tenant in parameters.Tenants }}:
${{ format('{0}_APK', tenant) }}:
TenantName: ${{ tenant }}
BuildFormat: 'apk'
SignAndroid: $(SignAndroidApk)
BuildApp: $(PackageAndroidApk)
${{ format('{0}_AAB', tenant) }}:
TenantName: ${{ tenant }}
BuildFormat: 'aab'
SignAndroid: $(SignAndroidAab)
BuildApp: $(PackageAndroidAab)
displayName: 'Build Android'
"- group: ${{ TenantName }}" 负责设置特定于租户的变量和秘密,但 TenantName 不可用,因为它是 for 循环矩阵的一部分。无法使用 $() 语法在运行时动态设置变量组。那我该怎么办呢?
(Line: 53, Col: 12): Unrecognized value: 'TenantName'. Located at position 1 within
expression: TenantName.
我的期望: 我可以在管道运行之前选择多个租户,并根据租户特定的变量和秘密为所有选定的租户构建 apk 和 aab。
我怎样才能改变我的方法来完成这项工作?
假设您希望使用
${{ TenantName }}
的组名称动态引用变量组,其名称与 parameters.Tenants
中定义的值相同,则以下示例有效。根据需要,您还可以在队列时为 parameters.Tenants
定义多个租户,管道作业将针对 each
中的 parameters.Tenants
值和从相应变量组检索值的矩阵进行扩展。
parameters:
- name: Tenants
displayName: "Select Tenants to build for"
type: object
default:
- ExampleClient1
- ExampleClient2
stages:
- stage: BuildAndroid
jobs:
- ${{ each tenant in parameters.Tenants }}:
- job: 'BuildAndroid_${{ tenant }}'
dependsOn: []
displayName: 'Build Android for ${{ tenant }}'
variables:
- group: ${{ tenant }}
strategy:
matrix:
${{ format('{0}_APK', tenant) }}:
TenantName: ${{ tenant }}
BuildFormat: 'apk'
SignAndroid: $(SignAndroidApk)
BuildApp: $(PackageAndroidApk)
${{ format('{0}_AAB', tenant) }}:
TenantName: ${{ tenant }}
BuildFormat: 'aab'
SignAndroid: $(SignAndroidAab)
BuildApp: $(PackageAndroidAab)
steps:
- script: |
echo "TenantName: $(TenantName)"
echo "BuildFormat: $(BuildFormat)"
echo "SignAndroid: $(SignAndroid)"
echo "BuildApp: $(BuildApp)"