[Azure DevOps] 如何使用任务组
1. 使用 PowerShell 脚本
在上一篇文章中我们学会了怎么使用扩展在编译前实时更改版本号。有些情况下我们希望不适用扩展,例如喜欢发明轮子,或者根本没有安装扩展的权限。这时候我们可以自己写 PowerShell 解决这个问题。
在 Pipeline 中添加一个 PowerShell 的任务,Type 选择 Inline,然后在 Script 里输入这段 PowerShell 脚本:
$ComponentPath = $Env:Build_SourcesDirectory
$VersionNumber = $Env:AssemblyVersion+"."+$Env:Build_BuildId+".0"
$ErrorActionPreference = "Stop"
Write-Output "ComponentPath""$ComponentPath""."
Write-Output "VersionNumber""$VersionNumber""."
$assemblyFiles = Get-ChildItem -Recurse -Path $ComponentPath -Include AssemblyInfo.cs | Where-Object { $_.fullname -notmatch "\\packages\\" }
$assemblyVersionRegex = New-Object System.Text.RegularExpressions.Regex -ArgumentList '^\s*\[assembly:\s*AssemblyVersion\("[^"]*"\)\]',MultiLine
$assemblyFileVersionRegex = New-Object System.Text.RegularExpressions.Regex -ArgumentList '^\s*\[assembly:\s*AssemblyFileVersion\("[^"]*"\)\]',MultiLine
$assemblyInfoVersionRegex = New-Object System.Text.RegularExpressions.Regex -ArgumentList '^\s*\[assembly:\s*AssemblyInformationalVersion\("[^"]*"\)\]',Multiline
foreach ($file in $assemblyFiles)
{
$content = [System.IO.File]::ReadAllText($file)
$assemblyVersionReplacement = [string]::Format("[assembly: AssemblyVersion(""{0}"")]", $VersionNumber)
$assemblyFileVersionReplacement = [string]::Format("[assembly: AssemblyFileVersion(""{0}"")]", $VersionNumber)
$assemblyInfoVersionReplacement = [string]::Format("[assembly: AssemblyInformationalVersion(""{0}"")]", $VersionNumber)
$content = $assemblyVersionRegex.Replace($content, $assemblyVersionReplacement)
$content = $assemblyFileVersionRegex.Replace($content, $assemblyFileVersionReplacement)
$content = $assemblyInfoVersionRegex.Replace($content, $assemblyInfoVersionReplacement)
[System.IO.File]::WriteAllText($file, $content)
Write-Output "Updated file ""$file"" to have version ""$VersionNumber""."
}

上面这段 PowerShell 的作用是修改项目里的 AssemblyInfo.cs,将版本号改为 $Env:AssemblyVersion+"."+$Env:Build_BuildId+".0"。有了这个 Task,我们可以不再依赖扩展来实现这个功能。
需要注意的是,在 PowerShell 里使用 Azure Pipelines 的变量的格式是 $Env: + 变量名,变量名里的句号 . 要改为下划线 _,例如 $(Build.BuildId) 在 PowerShell 里的引用方式为 $Env:Build_SourcesDirectory。
2. 使用任务组
下一步,为了不在每个 Pipeline 中复制粘贴这个 Task 及其中的 PowerShell 脚本,我们需要把这个 Task 做成一个公共的东西。这时候可以使用任务组 ,它可以将已在生成或发布管道中定义的一系列任务封装到可添加到生成或发布管道中的单个可重用任务,就像任何其他任务一样。不过需要注意的是 YAML 管道不支持任务组,任务组只能用在经典管道中。
创建任务组的方式如下图所示,在任务列表中选中一个或多个任务,然后在右键菜单中选中 Create task group,在弹出的对话框中输入名称,选择分类,最后点击 Create 完成创建。

创建任务组后,之前选中的任务就原地转换为新的任务组。

这个任务组的使用方式其它任务一样,在 Add tasks 里添加到 Pipeline 即可。

3. 管理任务组
在左边的菜单中选中 Task groups 进入任务组列表的页面,在列表中选中要管理的任务组进入任务组的详细页面。

在 Task 页中可以像在 Pipeline 中管理任务一样管理任务组的任务,也可以修改任务组的名称、分类、版本号等信息。
在 History 页中可以查看更改的历史记录。
在 References 页中可以看到任务组被引用的 Build pipelines、Release Pipelines、Task groups。
4. 最后
任务组是一个很好用的功能,可惜在 YAML 管道中不能使用。有关任务组的更多内容可以参考官方文档:
[Azure DevOps] 如何使用任务组的更多相关文章
- 使用ML.NET + Azure DevOps + Azure Container Instances打造机器学习生产化
介绍 Azure DevOps,以前称为Visual Studio Team Services(VSTS),可帮助个人和组织更快地规划,协作和发布产品.其中一项值得注意的服务是Azure Pipeli ...
- 在Azure DevOps Server (TFS 2019) 流水线传递参数
变量概述 在Azure DevOps Server的流水线中,变量是衔接不同任务和不通代理之间的桥梁,它可以使相对松散.各自独立的任务之间相关影响并共享数据.在流水线中使用变量,可以在各任务之间相互调 ...
- Azure DevOps Server:Git权限设置
Azure DevOps Server 权限概述 在Azure DevOps Server (之前名称为TFS)中,权限是一个比较复杂的概念.从权限层级上来说,包括服务器级别.团队项目集合级别.团队项 ...
- 在Azure DevOps Server (TFS) 中修改团队项目名称
概述 [团队项目]: 在Azure DevOps Server (原名TFS)中,团队项目(Team Project)是一个最基本的数据组织容器,包含了一个团队或者信息系统中的所有信息,包括源代码.文 ...
- 微软 Azure DevOps Server 2019 Update 1 (TFS 2019.1)
1.概述 微软在2019年5月发布Azure DevOps Server 2019后不到2个月的时间里,就快速准备好了第一个升级包(2019 Update 1),并计划在几周后发布正式版本.也许你还没 ...
- Azure DevOps Server (TFS) 修改工作项附件大小限制
1. 问题描述 当上传工作项附件时,系统提示"附件大小限制" 2.解决方案 2.1 默认设置 默认情况下,Azure DevOps Service和Team Foundation ...
- 如何利用Azure DevOps快速实现自动化构建、测试、打包及部署
前两天有朋友问我,微软的Azure好用吗,适不适合国人的使用习惯,我就跟他讲了下,Azue很好用,这也是为什么微软云营收一直涨涨涨的原因,基本可以再1个小时内实现自动化构建.打包以及部署到Azure服 ...
- Azure Devops测试管理(上)
因为最近测试人员合并到我这边开发组,对于如何能更好管理测试流程和测试与开发能更高效的完成任务,通俗的说如何能更敏捷,深入思考,然后就开始琢磨起TFS(也称之为VSTS/Azure Devops,因为我 ...
- 【Azure DevOps系列】什么是Azure DevOps
DevOps DevOps是一种重视"软件开发人员(Dev)"和"IT运维技术人员(Ops)"之间沟通合作的文化,它促进开发和运营团队之间的协作,以自动化和可重 ...
随机推荐
- 1.初级篇——最基础的"穷竭搜索”
A.Lake Counting(POJ 2386) 题意: 由于最近的降雨,农夫约翰田地的各个地方都有水汇聚,用N x M(1 <= N <= 100; 1 <= M <= 1 ...
- 【BUAA软工】团队任务拆解
项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:团队任务拆解及时间规划 团队任务拆解 Alpha阶段总体规划 初步完成产品功能规格说明书中的基础功能 目前阶段仅支持本地上传文件至当前N ...
- 用JIRA管理你的项目——(三)基于LDAP用户管理
JIRA提供了基于LDAP方式的用户管理,也就是用户密码的管理交给LDAP,而JIRA只管理用户在系统中的角色. 要打开JIRA的LDAP设置,首先需要验证下你的LDAP服务是否正常! 几乎有所有的L ...
- 【转载】CentOS下查看电脑硬件设备属性命令
CentOS下查看电脑硬件设备属性命令2018年09月13日 17:48:31 乔烨 阅读数 510如何在linux下查看电脑硬件设备属性 # uname -a # 查看内核/操作系统/CPU信息 # ...
- LNMP/LAMP
LNMP/LAMP 环境: 名称 Linux Nginx MySQL PHP Apache 版本 Centos7 nginx-1.14.1 mysql-5.6.25 php-5.6.36 Apache ...
- Linux服务之DHCP服务篇(scp)
一.概念 名称:DHCP----Dynamic Host Configuration Protocol 动态主机配置协议 功能:DHCP是一个局域网的网络协议,使用UDP协议工作 主要用途:给内部网络 ...
- python基础之列表、元组
一.列表 列表(list)是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 作用:多个装备,多个爱好,多门课程,多个女朋友等 定义:[ ]内可以有多个任意类型的值,逗号 ...
- IDEA 自定义文件头注释
什么是 IDEA 自定义文件头注释 IDEA 自定义文件头注释指的是创建 Java 类文件时,IDEA 可以自动设置文件头的注释信息,如下: 如何设置 IDEA 自定义文件头注释 打开 File-&g ...
- Jmeter- 笔记12 - 性能测试分析 & 性能测试流程
性能测试分析 场景设计.监视图表: 设计场景:阶梯式.波浪式 监视器: 收集用于性能分析的数据:TPS图表.聚合报告\汇总报告.察看结果树.响应时间.吞吐量 服务器资源监控:cpu.内存.磁盘io 分 ...
- 如何在Python中加速信号处理
如何在Python中加速信号处理 This post is the eighth installment of the series of articles on the RAPIDS ecosyst ...