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 ...
随机推荐
- mybatis-generator数据库注释实体类生成以及generatorConfig文件配置
项目里新建表时model,mapper以及mapper.xml基本都是用Mybatis Generator(以下简称为MBG)自动生成的,但是MBG自动生成的model的注释实在有点非人类,至少中国人 ...
- Django后台中文乱码
无论如何,刚开始一定要写上默认编码utf8!!!!!! 第一种办法: 检查 ...\Lib\site-packages\Django-1.10.2-py2.7.egg\django\conf\loca ...
- Z+F激光扫描仪
链接:https://zhuanlan.zhihu.com/p/48589754 三维扫描仪有三个误差来源: ● 线性误差(激光雷达部分/LARA) ● 测距噪声(激光雷达部分/LARA) ● 测角误 ...
- Mac OS终端利器iTerm2(完美替代bash)
iTerm2 iTerm一个为Mac OS X编写的,功能齐全的终端仿真程序:目标是在为用户提供OS X下最佳的命令行体验,iTerm 2有很多能够提升效率的实用功能.比如说窗口分割.热键窗口.智能搜 ...
- 46、[源码]-Spring容器创建-注册BeanPostProcessors
46.[源码]-Spring容器创建-注册BeanPostProcessors 6.registerBeanPostProcessors(beanFactory);注册BeanPostProcesso ...
- mongodb 高级聚合查询
mongodb高级聚合查询 在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysq ...
- 利用亚马逊AWS搭建个人服务器
转载博客地址:https://www.jianshu.com/p/a045d4217175
- docker安装mysql5.7 数据挂载
docker安装mysql5.7,并数据卷挂载到主机 # docker 中下载 mysql docker pull mysql:5.7 #启动 docker run --name mysql3306 ...
- html页面引入vue组件
html页面引入vue组件需要在页面引入http-vue-loader.js 注意:要查看页面引入vue组件的效果不能直接在本地打开index.html,会有跨域问题,可以在本地配置一个nginx转发 ...
- Leetcode题目617:合并二叉树(递归-简单)
题目描述: 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新 ...