Bash 我可以从Azure cli创建Azure DevOps变量组并向其传递一些值吗?
我已经在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=
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脚本中包含所有myaz
命令?您可以添加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%"