Bash 我可以从Azure cli创建Azure DevOps变量组并向其传递一些值吗?

Bash 我可以从Azure cli创建Azure DevOps变量组并向其传递一些值吗?,bash,kubernetes,azure-devops,azure-aks,Bash,Kubernetes,Azure Devops,Azure Aks,我已经在Azure DevOps中声明了以下变量组 KUBERNETES_CLUSTER = myAksCluster RESOURCE_GROUP = myResourceGroup 在发布管道过程中,我想创建一个公共静态IP地址,以便分配给myAksCluster中的某个应用程序 通过Azure cli命令,我通过az cli bash小脚本创建静态IP地址。我们可以假设我已经创建了kubernetes集群 #!/usr/bin/env bash KUBERNETES_CLUSTER=

我已经在Azure DevOps中声明了以下变量组

KUBERNETES_CLUSTER = myAksCluster
RESOURCE_GROUP = myResourceGroup

在发布管道过程中,我想创建一个公共静态IP地址,以便分配给
myAksCluster
中的某个应用程序

通过Azure cli命令,我通过az cli bash小脚本创建静态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\u IP\u ADDRESS
值将其分配给我的发行版中的新Azure DevOps变量组,但从CLI任务或Azure CLI任务(如发行版管道过程的一部分)执行所有此过程。

其想法是,当我以前的az cli bash小脚本将在发布管道中执行时,我在我的ReleaseDev azure变量组中有一个新变量,如下所示:

在那之后,我可以使用
PUBLIC\u STATIC\u IP\u ADDRESS
,它将是一个类似azure devops变量的参数,用于应用程序,该应用程序将在我的kubernetes集群中使用该IP值

我一直在检查一些信息,也许我可以在我的发布管道中创建一个Azure CLI任务,以执行az CLI bash小脚本,该脚本通过以下方式创建公共静态ip地址:

但最后当我得到公共ip地址值时,我不知道如何从这个Azure CLI任务(我的脚本)创建变量
public\u STATIC\u ip\u address
,以及我在这里得到的相应值

我可以使用发布管道中的Azure CLI任务来获取这个小工作流吗?我一直在检查一些事情,比如 但我不清楚

如何创建一个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
命令时遇到一些问题的原因


Power shell及其各自的azure任务对我来说都是新任务,我不确定如何处理这个过程。

您可以尝试调用REST API()来添加或更新脚本中的变量组。请参考下面的脚本

$orgUrl = "https://dev.azure.com/<your organization >"
$projectName = "<your project>"
$personalToken = "<your PAT>"

$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" = "<the static ip you got>"
    }
  }
  "@type" = "Vsts"
  "name" = "<your variable group name>"
  "description" = "Updated variable group"
} | ConvertTo-Json

Invoke-RestMethod -Uri $projectsUrl -Method Put -ContentType "application/json" -Headers $header -Body $requestBody
$KUBERNETES_CLUSTER = "KUBERNETES_CLUSTER"
$RESOURCE_GROUP = "RESOURCE_GROUP"
$PUBLIC_IP_ADDRESS

$PUBLIC_IP_NAME="Zcrm365DevelopmentStaticIpAddress"
$NODE_RESOURCE_GROUP = az aks show --resource-group $RESOURCE_GROUP --name $KUBERNETES_CLUSTER --query nodeResourceGroup -o tsv | az network public-ip create --resource-group --name $PUBLIC_IP_NAME --allocation-method static

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/<org>/"

....
请参考以下链接了解powershell中az命令的用法


您可以使用前面提到的RESTAPI来更新变量组,也可以安装用于更新变量组的扩展

但重要的是,您需要在Azure CLI任务中设置一个变量,以便在第二个任务(Rest API任务或共享变量更新程序任务)中使用它。因此,您需要将这一行添加到脚本中:

echo "##vso[task.setvaraible variable=ipAddress;]%PUBLIC_IP_ADDRESS%"
现在,在接下来的任务中,您可以使用包含ip值的变量
$(ipAddress)


我不知道Azure DevOps服务REST API参考,看起来是一个很好的资源。我的疑问是,我是如何将所有这些结合起来工作的,我的意思是,我如何混合使用azure cli命令(bash)来获取IP地址和此脚本?我对此有点困惑。这个脚本是什么语言?Powershell?Azure命令行界面(CLI)是Microsoft管理Azure资源的跨平台命令行体验。它支持bash脚本和powershell脚本。上面的脚本是在powershell中编写的。您的意思是,类似于此过程吗?我的意思是,调用
az
cli命令中的脚本?或者在此powershell脚本中包含所有my
az
命令?您可以添加powershell任务,并将脚本分别指定为内联或脚本路径。在powershell脚本中,首先您需要使用powershell comand来安装Azure CLI模块,请参见,之后,您可以在powershell脚本中添加az命令和我的代码。顺便说一句,您提到的链接是针对VM的,您不需要为VM运行az命令。您好,Shayki。我或多或少地理解了要遵循的工作流程。为了熟悉Powershell语言,我在您的回答中采用了Mike Lu的方法,但我有一些错误。请看一下我原始问题中的“我的更新”部分好吗?@bgarcial为什么不在azure cli任务中设置变量,并在另一个powershell任务中将它们推送到组中?
echo "##vso[task.setvaraible variable=ipAddress;]%PUBLIC_IP_ADDRESS%"