使用发布管道 YAML 和 AzDevOps 变量组设置 Azure 容器实例变量

问题描述 投票:0回答:1

我想使用发布管道 YAML 和 AzDevOps 组变量为 .net 8 应用程序设置 Azure 容器实例 (ACI) 自定义环境变量。

我想将 DEV、QA、PROD 的相应 AzDevops 变量组链接到相应的 AzDevops 发布管道阶段,因为相同的变量可能具有不同的 DEV/QA/PROD 值。这个想法是容器应用程序运行时覆盖环境变量中 appsettings.json 的值(如果已定义)。

此处的 Microsoft 链接示例 仅使用硬编码值,可以工作,但我需要使用变量。

例如appsettings.json:

"ConnectionString":
{
 "DefaultConnection":""
}

YAML 会是

environmentVariables:
    -name: "ConnectionString__DefaultConnection"
     value: $(ConnectionString.DefaultConnection) #$(ConnectionString_DefaultConnection)

当我使用像 ConnectionString.DefaultConnection 这样的点符号将 AzDevops 变量组链接到发布管道阶段时,发布管道日志显示正确的值并将其打印为 [ConnectionString_DefaultConnection] 但由于某种原因,当我将其放入 YAML 中时,该值无法识别。我的值变量语法是否错误?

我需要在deployment.yaml中添加像这样的变量组吗?

variables:
- group: ${{ if eq(parameters.environment, 'dev') }}:
    - dev-variables
  ${{ if eq(parameters.environment, 'qa') }}:
    - qa-variables

deployment.yaml 文件,请注意变量名中的点

apiVersion: '2021-10-01'
location: northcentralus
name: aci-cc-dev
type: Microsoft.ContainerInstance/containerGroups
properties:
  imageRegistryCredentials: # Credentials to pull a private image
  - server: myacrname.azurecr.io
    username: myusername
    password: ###ACR_PASSWORD###
  osType: Linux
  subnetIds:
   - id: "/subscriptions/1111111111111111111/resourceGroups/rg-prod-network-001/providers/Microsoft.Network/virtualNetworks/vnet/subnets/apps"
     name: apps
  ipAddress:
    type: Private
    ports:
    - protocol: tcp
      port: '8080'
  restartPolicy: Always
  containers:
    - name: myaci-api
      properties:
        image: myacrname.azurecr.io/mycontainerapp-api:###BUILD_ID###
        environmentVariables:
          - name: PORT
            value: '8080'
          #- name: ConnectionStrings__DefaultDbConnection
          #  value: $(CONNECTIONSTRINGS_DEFAULTDBCONNECTION)
          - name: ConnectionStrings__DefaultDbConnection
            value: $(ConnectionStrings.DefaultDbConnection)
        ports:
          - port: 8080
        resources:
          requests:
            cpu: 1.0
            memoryInGB: 2.0
    
azure azure-devops azure-pipelines azure-container-instances azure-releases
1个回答
0
投票

在 Azure DevOps 管道中使用 az container create 命令时动态设置环境变量的一种方法是使用以下选项:

  • --environment-variables
    :容器的环境变量列表。采用
    key=value
    格式的空格分隔值。
  • --secure-environment-variables
    :容器的secure环境变量列表。采用
    key=value
    格式的空格分隔值。

示例 - 在 Bash shell 或 Azure Cloud Shell 中运行 CLI:

az create ... \
--environment-variables 'PORT'='8080' \
--secure-environment-variables 'ConnectionStrings__DefaultDbConnection'='$(ConnectionStrings.DefaultDbConnection)'

如果使用 Windows 命令提示符,请用双引号指定变量,例如

--environment-variables "PORT"="8080"

但是,上面的示例可能不适用于

--file
选项。您可能需要使用相应的选项设置整个容器配置,例如端口、请求等:

az container create --resource-group
                    [--acr-identity]
                    [--add-capabilities]
                    [--allow-escalation]
                    [--assign-identity]
                    [--azure-file-volume-account-key]
                    [--azure-file-volume-account-name]
                    [--azure-file-volume-mount-path]
                    [--azure-file-volume-share-name]
                    [--cce-policy]
                    [--command-line]
                    [--cpu]
                    [--dns-name-label]
                    [--drop-capabilities]
                    [--environment-variables]
                    [--file]
                    [--gitrepo-dir]
                    [--gitrepo-mount-path]
                    [--gitrepo-revision]
                    [--gitrepo-url]
                    [--image]
                    [--ip-address {Private, Public}]
                    [--location]
                    [--log-analytics-workspace]
                    [--log-analytics-workspace-key]
                    [--memory]
                    [--name]
                    [--no-wait]
                    [--os-type {Linux, Windows}]
                    [--ports]
                    [--priority]
                    [--privileged]
                    [--protocol {TCP, UDP}]
                    [--registry-login-server]
                    [--registry-password]
                    [--registry-username]
                    [--restart-policy {Always, Never, OnFailure}]
                    [--role]
                    [--run-as-group]
                    [--run-as-user]
                    [--scope]
                    [--seccomp-profile]
                    [--secrets]
                    [--secrets-mount-path]
                    [--secure-environment-variables]
                    [--sku]
                    [--subnet]
                    [--subnet-address-prefix]
                    [--vnet]
                    [--vnet-address-prefix]
                    [--vnet-name]
                    [--zone]

请参阅命令的文档了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.