Azure DevOps 利用rest api设置variable group
我们在Azure DevOps中设置参数的时候,可以使用build,release各自的variables,但是各自的变量不能共用。此时我们需要使用variable group,它允许跨Build和Release来共享公共变量。
我们常规是做法是手动创建一个variable group,然后手动添加name和value。如果变量很多的时候,这种手动操作繁琐并且有一定的风险。下面我会演示三个过程:
我的主要参考:
https://www.danielstocker.net/updating-a-vsts-variable-group-from-the-command-line/
- 如何获取这个variable group
- 如何进行单个数据的更改操作
- 如何进行批量variable的添加
1.获取variable group中的值
获取variable group的前提是需要去申请一个personal access token,有了token后,注意自己azure devops 的account name ,project name,填入如下脚本中
$personalAccessToken = "YOUR_PAT_TOKEN_GOES_HERE"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$personalAccessToken)))
$accountname = "YOUR_ACCOUNT_NAME_GOES_HERE"
$variableGroupName = "YOUR_VARIABLE_NAME_GOES_HERE"
$projectName = "YOUR_PROJECT_NAME_GOES_HERE"
$vstsUri = "https://" + $accountname + ".visualstudio.com/"
# GET https://{accountName}.visualstudio.com/{project}/_apis/distributedtask/variablegroups?api-version=4.1-preview.1
# get variable groups and find our one
$call = $vstsUri + $projectName + "/_apis/distributedtask/variablegroups?api-version=5.0-preview.1"
$result = Invoke-RestMethod -Uri $call -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$groupId = (-1)
foreach($group in $result.value){
if($group.name.Equals($variableGroupName)){
$groupId = $group.id
break;
}
}
# if we can't find the group, throw an error
if($groupId -lt 0){
throw("Couldn't find group")
}
# get full json for our group
$call = $vstsUri + $projectName + "/_apis/distributedtask/variablegroups/" + $groupId + "?api-version=5.0-preview.1"
$group = Invoke-RestMethod -Uri $call -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
就我的参数设置对应我获取的结果:

$group.variables
wb2ip : @{value=}
wbcross : @{value=hellodevops}
wbtest : @{value=hello 123}
2. 对单个值进行update
下面演示如何对单个值进行修改,比如修改wbtest的值为hello 456
$group.variables.wbtest = @{"value" = "hello 456"}
$call = $vstsUri + $projectName + "/_apis/distributedtask/variablegroups/" + $groupId + "?api-version=5.0-preview.1"
$result = Invoke-RestMethod -Uri $call -Method Put -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body (ConvertTo-Json $group -Depth 10)
运行完如上,我再次get,可以发现我的wbtest的值已经发生了修改
$group.variables
wb2ip : @{value=}
wbcross : @{value=hellodevops}
wbtest : @{value=hello 456}
3. 批量添加variables的操作,我们可以先将变量顶一个json字符串中,当然也可以是一个json文件。
$vgJson = @'
{
"variables": {
"test1": {
"value": "hello"
},
"test2": {
"value": "world"
}
},
"type": "Vsts",
"name": "test",
"description": "Updated variable group"
}
$result = Invoke-RestMethod -Uri $call -Method Put -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body $vgJson
Azure DevOps 利用rest api设置variable group的更多相关文章
- Azure DevOps Server:Git权限设置
Azure DevOps Server 权限概述 在Azure DevOps Server (之前名称为TFS)中,权限是一个比较复杂的概念.从权限层级上来说,包括服务器级别.团队项目集合级别.团队项 ...
- Azure DevOps的variable group实现array和hashtable参数的传递
Azure Devops中的variable group建议或者只能(?)添加string类型的value.基于此我们想在variable group实现array或者hashtable的传递的核心思 ...
- Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)
一,引言 之前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,所有的资源代码全部写在一个 main.tf 文件中.然后 ...
- Azure DevOps(二)利用Azure DevOps Pipeline 构建基础设施资源
一,引言 上一篇文章记录了利用 Azure DevOps 跨云进行构建 Docker images,并且将构建好的 Docker Images 推送到 AWS 的 ECR 中.今天我们继续讲解 Azu ...
- Azure Terraform(九)利用 Azure DevOps Pipeline 的审批来控制流程发布
一,引言 Azure Pipeline 管道是一个自动化过程:但是往往我们由于某种原因,需要在多个阶段之前获得批准之后再继续下一步流程,所以我们可以向Azure Pipeline 管道添加审批!批准流 ...
- Azure Terraform(十)利用 Azure DevOps 的条件语句选择发布环境
一,引言 之前我讲过的所有的案例中,都是将整个Azure Resource 部署到同一个订阅下,没有做到灵活的在 Azure Pipeline 在运行前选择需要部署的环境.在实际的项目开发中,我们也会 ...
- 利用 Azure Devops 创建和发布 Nuget 包
利用 Azure Devops 创建和发布 Nuget 包 原 Visual Studio Team Service ,简称 VSTS,能够创建 pipelines 管道以构建应用程序,并将其部署到任 ...
- 如何利用Azure DevOps快速实现自动化构建、测试、打包及部署
前两天有朋友问我,微软的Azure好用吗,适不适合国人的使用习惯,我就跟他讲了下,Azue很好用,这也是为什么微软云营收一直涨涨涨的原因,基本可以再1个小时内实现自动化构建.打包以及部署到Azure服 ...
- Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源
一,引言 上一篇我们结合学习 Azure Traffic Manger 的内容,做了一个负载均衡的基础设施架构.通过 Terraform 部署执行计划,将整个 Azure Traffic Manage ...
随机推荐
- Django中的Session与Cookie
1.相同与不同 Cookie和Session都是为了记录用户相关信息的方式, 最大的区别就是Cookie在客户端记录而Session在服务端记录内容. 2.Cookie和Session之间的联系的建立 ...
- Django REST framework+Vue 打造生鲜电商项目(笔记四)
(PS:部分代码和图片来自博客:http://www.cnblogs.com/derek1184405959/p/8813641.html.有增删) 一.用户登录和手机注册 1.drf的token功能 ...
- HDU-1465-不容易系列之一(容斥)
链接: https://vjudge.net/problem/HDU-1465 题意: 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好"一件"事情尚且不易 ...
- 四十二.部署MongoDB服务 、 MongoDB基本使用
1. 部署MongoDB服务 192.168.4.50 创建服务工作目录 ]# mkdir /usr/local/mongodb ]# cd /usr/local/mongodb/ ]# mkdir ...
- Hdu CRB and Queries(整体二分)
CRB and Queries Time Limit: 6000 MS Memory Limit: 131072 K Problem Description There are N boys in C ...
- Ansible管理上千台主机时需要的速度优化
1 开启ssh长连接 OpenSSH 5.6版本后SSH支持了Multiplexing 设置参数 ssh_args = -C -o ControlMaster=auto -o ControlPersi ...
- 设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件。
设计一个树型目录结构的文件系统,其根目录为 root,各分支可以是目录,也可以是文件,最后的叶子都是文件. 我实现的功能是提供父目录(兄弟目录),输入文件名,创建树型目录结构,文本文件不可以再有子目录 ...
- centos7 浏览器(firefox)中文乱码
主要问题在于firefox用了系统没有的字体 百度的方案: 通过yum安装中文字体 (找不到对应的库) 修改firefox的默认字体(尴尬.不知道改哪个才有效) 粗暴的解决方案: 把 windows ...
- 函数第二部分:为什么说动态参数是没有计划好的参数-Python基础前传(11)
动态参数1-一个星号变元组 动态参数存在的意义? 函数的作者有时候也不知道这个函数到底需要多少个参数,这时候动态参数就有存在的意义了 动态参数创建-加* 底层原理是:把数值型或其他数据类型变成了元组类 ...
- 如何用Xshell导出文件到桌面本地
在软件开发中,会经常用到登录到Linux服务器,查看相关日志,同时也会远程取出文件到本地环境, 在没有xftp客户端的情况下,如何直接使用xshell软件直接下载文件到本地呢 下载文件: 使用sz命令 ...