【发布时间】:2019-11-25 08:32:45
【问题描述】:
我在 Azure DevOps 中声明了以下变量组。
KUBERNETES_CLUSTER = myAksCluster
RESOURCE_GROUP = myResourceGroup
在发布管道过程中,我想创建一个公共静态 IP 地址,以便分配给myAksCluster 中的某个应用程序。
通过 Azure cli 命令,我通过 az cli bash small script 创建了这种方式的静态 IP 地址。我们可以在这里假设我已经创建了 kubernetes 集群
#!/usr/bin/env bash
KUBERNETES_CLUSTER=myAksCluster
RESOURCE_GROUP=myResourceGroup
# Getting the name of the node resource group. -o tsv is to get the value without " "
NODE_RESOURCE_GROUP=$(az aks show --resource-group $RESOURCE_GROUP --name $KUBERNETES_CLUSTER --query nodeResourceGroup -o tsv)
echo "Node Resource Group:" $NODE_RESOURCE_GROUP
# Creating Public Static IP
PUBLIC_IP_NAME=DevelopmentStaticIp
az network public-ip create --resource-group $NODE_RESOURCE_GROUP --name $PUBLIC_IP_NAME --allocation-method static
# Query the ip
PUBLIC_IP_ADDRESS=$(az network public-ip list --resource-group $NODE_RESOURCE_GROUP --query [1].ipAddress --output tsv)
# Output
# I want to use the value of PUBLIC_IP_ADDRESS variable in Azure DevOps variable groups of the release pipeline
如果我执行az network public-ip list ... 命令,我将获得我的公共 IP 地址。
⟩ az network public-ip list --resource-group $NODE_RESOURCE_GROUP --query [1].ipAddress -o tsv
10.x.x.x
我想使用 PUBLIC_IP_ADDRESS 值将其分配给我的版本中的新 Azure DevOps 变量组,但是从 CLI 任务或 Azure Cli 任务中执行所有这些过程,就像发布管道过程的一部分一样。
这个想法是当我之前的 az cli bash 小脚本要在发布管道中执行时,我的 ReleaseDev azure 变量组中有一个新变量是这样的:
然后,我可以使用PUBLIC_STATIC_IP_ADDRESS,它将是一个天蓝色的 devops 变量,类似于应用程序的参数,它将在我的 kubernetes 集群中使用该 IP 值。
我一直在检查一些信息,也许我可以在我的发布管道中创建一个 Azure CLI 任务来执行 az cli bash 小脚本,该脚本正在以这种方式创建公共静态 IP 地址:
但是当我得到公共 IP 地址值时,我不知道如何从这个 Azure CLI 任务(我的脚本)创建变量 PUBLIC_STATIC_IP_ADDRESS 及其各自的值,我在这里得到了。
我可以使用发布管道中的 Azure CLI 任务来获取这个小型工作流吗?我一直在检查this recommendation之类的东西 但我不清楚
如何使用从我的发布管道传递的一些值创建一个 Az 变量组? Azure CLI 发布管道任务是正确的任务吗?
更新
我遵循 Lu Mike 提出的方法,因此我创建了一个 Powershell 任务并以内联类型/模式执行以下脚本:
# Connect-AzAccount
Install-Module -Name Az -AllowClobber -Force
@{KUBERNETES_CLUSTER = "$KUBERNETES_CLUSTER"}
@{RESOURCE_GROUP = "$RESOURCE_GROUP"}
@{NODE_RESOURCE_GROUP="$(az aks show --resource-group $RESOURCE_GROUP --name $KUBERNETES_CLUSTER --query nodeResourceGroup -o tsv)"}
# echo "Node Resource Group:" $NODE_RESOURCE_GROUP
@{PUBLIC_IP_NAME="Zcrm365DevelopmentStaticIpAddress"}
az network public-ip create --resource-group $NODE_RESOURCE_GROUP --name $PUBLIC_IP_NAME --allocation-method static
@{PUBLIC_IP_ADDRESS="$(az network public-ip list --resource-group $NODE_RESOURCE_GROUP --query [1].ipAddress --output tsv)"}
echo "##vso[task.setvaraible variable=ipAddress;]%PUBLIC_IP_ADDRESS%"
$orgUrl="https://dev.azure.com/my-org/"
$projectName = "ZCRM365"
##########################################################################
$personalToken = $PAT # "<your PAT>"
# I am creating a varaible environment inside the power shell task and reference it here.
##########################################################################
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personalToken)"))
$header = @{authorization = "Basic $token"}
$projectsUrl = "$($orgUrl)/$($projectName)/_apis/distributedtask/variablegroups/1?api-version=5.0-preview.1"
$requestBody = @{
"variables" = @{
"PUBLIC_STATIC_IP_ADDRESS" = @{
"value" = "$PUBLIC_IP_ADDRESS"
}
}
"@type" = "Vsts"
"name" = "ReleaseVariablesDev"
"description" = "Updated variable group"
} | ConvertTo-Json
Invoke-RestMethod -Uri $projectsUrl -Method Put -ContentType "application/json" -Headers $header -Body $requestBody
Invoke-RestMethod -Uri $projectsUrl -Method Put -ContentType "application/json" -Headers $header -Body $requestBody
重要
如您所见,在此过程中,我在此任务中混合了 az cli 命令和 powershell 语言。我不确定它是否好。
顺便说一句,我正在使用 Linux 代理。
我必须在 Install-Module -Name Az -AllowClobber -Force 命令中包含 -Force 标志才能安装 azure powershell 模块
我的输出如下:
2019-07-19T06:01:29.6372873Z Name Value
2019-07-19T06:01:29.6373433Z ---- -----
2019-07-19T06:01:29.6373706Z KUBERNETES_CLUSTER
2019-07-19T06:01:29.6373856Z RESOURCE_GROUP
2019-07-19T06:01:38.0177665Z ERROR: az aks show: error: argument --resource-group/-g: expected one argument
2019-07-19T06:01:38.0469751Z usage: az aks show [-h] [--verbose] [--debug]
2019-07-19T06:01:38.0470669Z [--output {json,jsonc,table,tsv,yaml,none}]
2019-07-19T06:01:38.0471442Z [--query JMESPATH] --resource-group RESOURCE_GROUP_NAME
2019-07-19T06:01:38.0472050Z --name NAME [--subscription _SUBSCRIPTION]
2019-07-19T06:01:38.1381959Z NODE_RESOURCE_GROUP
2019-07-19T06:01:38.1382691Z PUBLIC_IP_NAME Zcrm365DevelopmentStaticIpAddress
2019-07-19T06:01:39.5094672Z ERROR: az network public-ip create: error: argument --resource-group/-g: expected one argument
2019-07-19T06:01:39.5231190Z usage: az network public-ip create [-h] [--verbose] [--debug]
2019-07-19T06:01:39.5232152Z [--output {json,jsonc,table,tsv,yaml,none}]
2019-07-19T06:01:39.5232671Z [--query JMESPATH] --resource-group
2019-07-19T06:01:39.5233234Z RESOURCE_GROUP_NAME --name NAME
2019-07-19T06:01:39.5233957Z [--location LOCATION]
2019-07-19T06:01:39.5234866Z [--tags [TAGS [TAGS ...]]]
2019-07-19T06:01:39.5235731Z [--allocation-method {Static,Dynamic}]
2019-07-19T06:01:39.5236428Z [--dns-name DNS_NAME]
2019-07-19T06:01:39.5236795Z [--idle-timeout IDLE_TIMEOUT]
2019-07-19T06:01:39.5237070Z [--reverse-fqdn REVERSE_FQDN]
2019-07-19T06:01:39.5240483Z [--version {IPv4,IPv6}]
2019-07-19T06:01:39.5250084Z [--sku {Basic,Standard}] [--zone {1,2,3}]
2019-07-19T06:01:39.5250439Z [--ip-tags IP_TAGS [IP_TAGS ...]]
2019-07-19T06:01:39.5251048Z [--public-ip-prefix PUBLIC_IP_PREFIX]
2019-07-19T06:01:39.5251594Z [--subscription _SUBSCRIPTION]
2019-07-19T06:01:40.4262896Z ERROR: az network public-ip list: error: argument --resource-group/-g: expected one argument
2019-07-19T06:01:40.4381683Z usage: az network public-ip list [-h] [--verbose] [--debug]
2019-07-19T06:01:40.4382086Z [--output {json,jsonc,table,tsv,yaml,none}]
2019-07-19T06:01:40.4382346Z [--query JMESPATH]
2019-07-19T06:01:40.4382668Z [--resource-group RESOURCE_GROUP_NAME]
2019-07-19T06:01:40.4382931Z [--subscription _SUBSCRIPTION]
2019-07-19T06:01:40.5103276Z PUBLIC_IP_ADDRESS
2019-07-19T06:01:40.5133644Z ##[error]Unable to process command '##vso[task.setvaraible variable=ipAddress;]%PUBLIC_IP_ADDRESS%' successfully. Please reference documentation (http://go.microsoft.com/fwlink/?LinkId=817296)
2019-07-19T06:01:40.5147351Z ##[error]##vso[task.setvaraible] is not a recognized command for Task command extension. Please reference documentation (http://go.microsoft.com/fwlink/?LinkId=817296)
也许这就是我在执行az 命令时遇到问题的原因
Power shell 及其各自的 azure 任务对我来说是新的,我不确定如何才能完成这个过程。
【问题讨论】:
标签: bash kubernetes azure-devops azure-aks