azure-devops - Azure Devops - 为每个部署环境创建一个映射变量
问题描述
部署微服务时,我需要从 Azure 安全文件存储下载证书文件。我有大约十几个微服务,每个微服务大约有 6 个生命周期/环境。证书名称不遵循严格的命名约定。我想创建一个变量 hashmap/map/associative 数组。
我尝试将这些作为参数输入 azure-pipeline.yaml
- name: sslCerts
type: object
default:
- environmentName: Development
sslCertificate: service1-dev.p12
sslCertificateKey: service1-dev
- environmentName: Sandbox
sslCertificate: service1-sbxdev.p12
sslCertificateKey: service-sbxdev-key
但我不知道如何取消引用它们:
jobs:
# ######################## Stage: Terraform Plan and Apply in Dev ########################
- template: ../azure-pipelines-template/apply-stages.yml
parameters:
sslCertificate: ${{ parameters.sslCerts[${{ parameters.envName }} ].sslCertificate)
然后我尝试了“B”计划来编写一个 powershell 脚本来输出简单的变量。它在作业开始运行之前因为 DownLoadSecureFile 任务错误而失败(未找到安全文件)。所以下面的代码永远没有机会运行。
$DeploymentPath = $args[0]
$certs = @{
Sandbox = {
certName = "sbx-cert"
certKey = "sbx-cert-key"
}
Development = {
certName = "dev-cert"
certKey = "dev-cert-key"
}
}
$cert = $certs[$DeploymentPath]
# These Magic Codes create variable in Azure Devops
write-output "##vso[task.setvariable variable=sslCertificate]$cert.certName"
write-output "##vso[task.setvariable variable=sslCertificateKeyFile]$cert.certKey"
我真的不想创建 70 多个变量文件(微服务和环境的每种组合)。是否有一些我缺少的对象参数的插值。我可以在脚本或 terraform 中复制 DownloadSecureFile 任务并将其从 AzureDevops yaml 中取出吗?
解决方案
你非常接近,有两件事需要改变:
将您的参数声明为映射(而不是数组):
parameter: - name: sslCerts type: object default: Development: sslCertificate: service1-dev.p12 sslCertificateKey: service1-dev Sandbox: sslCertificate: service1-sbxdev.p12 sslCertificateKey: service-sbxdev-key
这样环境名就变成了key,引用的时候就可以使用了。
一旦你在里面
${{ }}
,就不需要嵌套它:jobs: # ######################## Stage: Terraform Plan and Apply in Dev ######################## - template: ../azure-pipelines-template/apply-stages.yml parameters: sslCertificate: ${{ parameters.sslCerts[parameters.envName].sslCertificate $}}
推荐阅读
- javascript - 从 vue.js 中的子发射传递时值未定义
- python - 我该如何解决这个错误?(python 3.8) XxXx
- android - 当 Fragment 恢复时,Observer 停止接收实时数据更新
- r - 如何在 R 中的不同字符串上使用 for 循环?
- google-sheets - countif importrange 返回 0
- java - 将节点值更改为二叉树中的高度
- python - 基于时间序列的数据的错误,箱单调增加
- objective-c - Xcode SQLClient 问题
- javascript - Webpack:忽略 React Native 模块并加载 Web 模块
- objective-c - 如何在可可 swift 中打开选择应用程序对话框