Azure Devops -动态获取具有特定前缀的所有变量(Azure cli)

i86rm4rw  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(175)

目前我正在使用azure devops将应用容器部署到azure。
我已经创建了我的发布管道,并通过接口手动添加了每个ENVIRONMENT VARIABLE。
我想知道是否有任何方法可以动态地获得它,我的意思是添加带有给定前缀的环境变量并添加到命令中。
这是我现在使用的命令:

az containerapp create --resource-group $(ResourceGroupName) --name $(ContainerAppName) --container-name $(ContainerAppName) --environment $(CONTAINERAPPS_ENVIRONMENT) --cpu $(ContainerCpu) --memory $(ContainerMemory) --min-replicas $(MinReplicas) --max-replicas $(MaxReplicas)  --ingress $(IngressType) --target-port $(IngressPort) --registry-server $(RegistryServer) --registry-username $(RegistryUsername) --registry-password $(RegistryPasswordSecretName)  --secrets $(PasswordSecretName)=$(RegistryPassword) --image  $(ContainerImage) --env-vars ENV_ENVIRONMENT_NAME_PREFIX=$(ENV_ENVIRONMENT_NAME_PREFIX) ENV_CLIENT_CONFIG_PATH=$(ENV_CLIENT_CONFIG_PATH)

总结一下,获取所有前缀名为ENV_的VARIABLES,并将其传递给--env-vars

nxowjjhe

nxowjjhe1#

您可以在Azure发布管道的“变量”选项卡中添加环境变量,然后将其用作管道中的ENV_VAR,请参阅以下内容:-

我在内联脚本中使用了相同的代码作为环境变量:-

az config set extension.use_dynamic_install=yes_without_prompt
az containerapp create --name $(ENV_ContainerAppName)  --resource-group $(ENV_ResourceGroupName) --cpu $(ENV_ContainerCpu) --memory $(ENV_ContainerMemory) --environment $(ENV_CONTAINERAPPS_ENVIRONMENT)

容器应用程序部署成功,如下所示:-

您还可以在变量组中添加相同的变量,并在Azure DevOps项目中的多个管道中使用这些变量组,请参阅下文:-

并在任何管道中引用,如下所示:-

为了动态调用环境变量,你可以在Azure CLI任务中使用以下CLI命令:-
代码1:

#!/bin/bash

# set the prefix for your environment variables
envPrefix="ENV_"

# get the list of environment variables that have the specified prefix
envVars=$(env | grep "^$envPrefix" | sed "s/^$envPrefix//")

# create a string of environment variables in the format "KEY=VALUE"
envVarsStr=""
for envVar in $envVars; do
  envVarVal=$(eval "echo \$$envVar")
  envVarsStr+="$envVar=$envVarVal "
done

# create a string with the environment variables argument for the az command
envVarsArg="--env-vars $envVarsStr"

# set the extension configuration
az config set extension.use_dynamic_install=yes_without_prompt

# create the container app with the specified environment variables
az containerapp create --name $ContainerAppName --resource-group $ResourceGroupName --cpu $ContainerCpu --memory $ContainerMemory --environment $CONTAINERAPPS_ENVIRONMENT $envVarsArg

代码2:

#!/bin/bash

# Set the prefix for your environment variables
envPrefix="ENV_"

# Retrieve environment variables dynamically
containerAppName=${!envPrefix"CONTAINERAPP_NAME"}
resourceGroupName=${!envPrefix"RESOURCE_GROUP_NAME"}
containerCpu=${!envPrefix"CONTAINER_CPU"}
containerMemory=${!envPrefix"CONTAINER_MEMORY"}
containerAppsEnvironment=${!envPrefix"CONTAINERAPPS_ENVIRONMENT"}

# Retrieve environment variables that start with the prefix
envVars=()
while IFS='=' read -r key value; do
  envVars+=("$key=$value")
done < <(env | grep "^$envPrefix")

# Join the environment variables with a space
envVarsArg="--env-vars ${envVars[*]}"

# Set the Azure CLI extension configuration
az config set extension.use_dynamic_install=yes_without_prompt

# Create the Azure Container App
az containerapp create \
  --name "$containerAppName" \
  --resource-group "$resourceGroupName" \
  --cpu "$containerCpu" \
  --memory "$containerMemory" \
  --environment "$containerAppsEnvironment" \
  $envVarsArg

以上代码动态获取所需的环境变量并将其设置为所需的变量。然后检索以**“ENV_"开头的变量,并使用空格将其连接起来,创建envVarsArg**变量。然后使用Azure CLI扩展配置使用检索到的变量创建Azure容器应用。
输出:-

相关问题