我想使用发布管道 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 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]
请参阅命令的文档了解更多详细信息。