如何设置 TFS 2013 构建定义以从 Git 标签构建?

2023-12-04

我想在 TFS 2013 中创建一个特殊的构建定义以从标签构建。该项目中使用的源代码管理是 Git。

所以,假设我有一个名为v1.0。我希望此构建定义提取与该标签对应的源并运行构建。触发器现在并不重要——甚至可以是手动的。这怎么可能?

我可以看到您只能选择“源设置”选项卡上的分支...

考虑高级场景:创建新标签时会触发构建,并从新创建的标签中获取源来运行构建。那可能吗?如果是这样,怎么办?

除了 MSDN 上解释的简单默认场景之外,我找不到任何信息。可能是因为配置(Git 模式下的 TFS 2013)相当新......

提前致谢。


我做了一些调查并使用了 TFS 默认提供的功能。说实话,它几乎涵盖了我描述的基本场景。

Git 的默认构建模板包含一个名为Checkout override:

enter image description here

该字段接受标签名称或您想要构建的修订版本的 ID:

enter image description here

这里的好处是这个设置会覆盖(就像名字所暗示的:))默认分支。我的意思是,如果您从 master 分支创建了一个标签,但在构建定义的“源”选项卡上指定了另一个分支,则没关系 -Checkout override优先。

我将尝试调查高级场景(在我的问题中描述)。我想会有一些自定义代码...将在此处发布更新。

2013 年 12 月 23 日更新正如预期的那样,为了能够选择要构建的标签,需要一些自定义代码。我最终创建了一个自定义编辑器并将其分配给Checkout override场地。因此,没有选项可以粘贴任何修订版本,只能从列表中选择一个标签 - 但这适合我的情况。

因此,首先您应该为字段创建一个自定义编辑器。基本上,创建一个类,继承它System.Drawing.Design.UITypeEditor类并重写一些方法。本演练帮助了很多,以及这本书(第 18 章“定制构建过程”)。

从特定 TFS 团队项目的特定 Git 存储库获取标签列表的有用代码如下:

private List<string> GetAvailableTags(IServiceProvider provider)
{
  // obtain the current build definition object
  var buildDefinition = (IBuildDefinition)provider.GetService(typeof(IBuildDefinition));
  // obtain the current source provider for the build definition (Git or TFVC)
  var sourceProvider = buildDefinition.GetDefaultSourceProvider();

  // obtain the project collection
  var teamProjectCollection = buildDefinition.BuildServer.TeamProjectCollection;
  // obtain a service object to communicate with Git repo
  var gitRepoService = teamProjectCollection.GetService<GitRepositoryService>();

  // this will get the partial URL of the Git repo (in a form <teamproject>/<repo>)
  var repoUrl = sourceProvider.Fields[BuildSourceProviders.GitProperties.RepositoryName];

  string projectName;
  string repoName;

  // this is the way to parse the partial URL obtained above, into project name and repo name
  if (BuildSourceProviders.GitProperties.ParseUniqueRepoName(repoUrl, out projectName, out repoName))
  {
    // this will get all Git repos of the current team project
    var source = gitRepoService.QueryRepositories(projectName);
    // this will take the current Git repo we work with
    var repo = source.First(x => x.Name.Equals(repoName, StringComparison.OrdinalIgnoreCase));
    // this will get all the tags in this Git repo
    var tags = gitRepoService.QueryRefs(repo.Id, "tags");

    // and finally, the list of pure tag names is returned
    return tags.Select(gitRef => gitRef.Name.Substring("refs/tags/".Length)).ToList();
  }

  return new List<string>();
}

带有自定义编辑器的 DLL 必须对 VS 可见(在我的例子中,我只是将程序集放入Common7\IDE\PrivateAssemblies\我的 VS 安装文件夹)。然后,在字段元数据编辑器中,您应该为所需字段指定自定义编辑器:

enter image description here

现在,如果我们编辑构建定义,或者对新构建进行排队,我们可以从下拉列表中选择必要的标签:

enter image description here

希望这能为您节省一些时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何设置 TFS 2013 构建定义以从 Git 标签构建? 的相关文章

  • 竹子 - 构建我的拉取请求

    当拉取请求进入 git 时 我试图触发竹子中的构建 我可以将 webhook 信息发送到竹子 但它不是构建适当的 sha 标记的签入 而是构建 主 分支 这是否需要对竹子进行一些自定义 git 设置 到目前为止我还没有看到任何简单的事情 在
  • 在 MySQL 数据库上使用版本控制 (Git)

    我是一名 WordPress 设计师 开发人员 越来越多地使用版本控制 特别是 Git 尽管我确实在某些项目中使用 SVN 我目前正在使用 Beanstalk 作为我的远程仓库 将所有 WordPress 文件添加到我的存储库中是没有问题的
  • 反向合并具有干净历史记录的缝合功能分支

    我有这个 d0 f1 d1 d2 f2 d3 merge d4 f3 merge
  • 如何在“git-pull”自动合并后更改提交消息?

    有时 当结果生成自动合并时 我的协作者会 惊慌 git pull 然后接受默认的提交消息 在推送此提交之前 我想确保该消息得到修复 但是 amend似乎不起作用 修复这种情况下生成的消息的最佳方法是什么 我能为他们提供的最佳指示是 git
  • 使用 Git 撤消临时更改

    假设我在 master 上并且有一个斑点 DEBUG FALSE CACHE SIZE 100 code code code 现在我开始在新分支中调试 DEBUG TRUE Don t forget to turn off CACHE SI
  • 使用 reposurgeon 将 svn repo 转换为 git

    我正在尝试使用 svn repo 转换为 git再生外科医生 http www catb org esr reposurgeon 这是我所做的 有一个具有 svn 名称 gt git 名称映射的 repo map 文件 svnadmin d
  • 如何从另一个目录使用git?

    假设有如下文件夹结构 repos repo1 lt here is git repository I do cd repos 我现在如何使用存储库 repo1仍然在repos目录 我不想做 cd repo1 git status git c
  • 错误:无法锁定引用..“引用/标签”存在;无法创建“参考/标签/”

    当我尝试从 github 中提取更改时 出现奇怪的 无法锁定引用 错误 我尝试过 git gc 并查找类似的错误 但找不到解决方案 gt git pull error cannot lock ref refs tags v2 8 refs
  • Gitlab-runner 更改 builds_dir

    我在生产服务器上的默认 builds dir 是 root builds qL8eZYTH 0 faramarzqoshchi testing gitlab runner 我希望它是这样的 home domain name public h
  • git fetch 的默认远程

    如果我在当地的分支机构not跟踪任何远程分支 我发出命令 git fetch 鉴于我定义了几个遥控器 GIT DIR config 从哪个远程获取 我试图从man page https www kernel org pub software
  • 如何在提交后删除本地 git 历史记录?

    我想从 Dropbox 切换到开源 Sparkleshare 它使用 git 进行同步和版本控制 如果说我在文件夹中删除了一个 1GB 文件 它会保留在本地 git 文件夹的历史记录中 但我希望将这种大量数据放在服务器上而不是客户端上 如何
  • 压缩 git log --graph 输出?

    有没有办法压缩输出git log graph那么它会在视觉上压缩遵循线性历史的提交吗 基本上 我只想查看图中某些分支分歧 合并的点 以获得我的分支结构的顶层 概述 举个例子 如果我有这个 A Z H B G C F D E 我希望它显示类似
  • 编辑 git patch 给出“您编辑的块不适用”

    我正在交互地添加一个文件 git add template panels panel reports php p diff git a template panels panel reports php b template panels
  • 如何从本地 TFS2015 获取 PAT

    我们希望将自定义步骤从 XAML 构建迁移到本地 TFS2015 中的新构建任务 我安装了 NodeJS 和 tfx cli 但是当 tfx cli 想要连接到 TFS 时 我需要提供 pat 个人访问令牌 但我找不到在哪里可以获得它 所有
  • 为什么我必须使用“git commit -a”而不仅仅是“git commit”?

    我正在尝试了解 Git 的复杂性 我使用 git clone url here 从 GitHub 上下载了一个存储库 我做了一些更改 尝试使用 git commit 来提交它们 这似乎没有将更改推送到我的本地存储库 在本地目录 git 中
  • 创建 Git 标签时自动运行 Git hook

    是否有一个 Git 钩子可以在添加新的 Git 标签时执行 因为我想自动将新的 Git 标签名称写入文本文件 您知道如何执行此操作吗 虽然目前无法使用挂钩 但您始终可以创建一个简单的脚本 mytag sh bin sh z 1 git ta
  • 用于跟踪远程分支的 Git 子模块

    我正在尝试使用 git 子模块将 10 多个存储库聚合到一个结构中 以便于开发 它应该克隆模块并签出分支 相反 模块以分离头模式检出 git clone email protected cdn cgi l email protection
  • 如何为Git存储库组织和设置镜像备份服务器?

    我正在将一些 svn 存储库移至 Git 所以 我基本上尝试做的是 设置一台带有裸 Git 存储库的服务器 我将从中拉取和推送到该存储库 为第一台服务器上的所有存储库设置一些备份服务器 所以 假设我的服务器上有一个目录 例如 HOME gi
  • 无法连接到存储库:执行 git 命令时出错:git ls-remote -h ***public github url *** HEAD

    I have installed jenkins on ec2 instance when i try to configure my public github repo with the ec2 instance then it thr
  • git 可以知道你当前的分支是从哪个分支分支出来的吗?

    我想创建一个 git 别名 让我可以从其分支的原始分支同步我的分支 例如 如果我从

随机推荐

  • 元素中的文本换行

    我正在尝试使用在图像上添加文本
  • 创建自定义 UI 视图类以用作地图注释

    我使用故事板创建了一个自定义 UIView 我不希望它位于故事板中的坐标 但我希望能够在整个应用程序中的地图上不同位置重用它像这样 我还希望能够根据用户的请求更新其中的文本 并且只要单击绿色按钮 其中的数字就会增加 我也想自定义下面的图像
  • 在 C 中使用具有相同标志的 fopen 打开文件

    我无法理解这段代码的输出 int main FILE f f1 f fopen mytext w if f1 fopen mytext w 0 printf unable n fprintf f hello n fprintf f1 hi
  • Android TimePicker 在横向模式下显示不佳

    我目前正在构建一个针对 API 23 的应用程序 最低 API 16 我遇到一个问题 TimePicker 显示在 AlertDialog 中 在 Nexus 5 API 在 Nexus 5 API 23 纵向 上 纵向模式下的时间选择器
  • 何时清除 Android 中的缓存目录?

    我有一个显示来自互联网的图片的应用程序 展示设计师的作品 我开始在内部缓存目录中缓存我的内容 但应用程序内容可能需要大约 150 MB 的缓存大小 Android 文档说的是 您应该始终自己维护缓存文件并保持在 合理限制消耗的空间 例如 1
  • jboss Resteasy 使用 @Context 进行参数注入

    我正在使用 jboss 7 1 和 Resteasy 进行基于令牌的身份验证 我使用 PreProcessInterceptor 来拦截请求 获取令牌 从令牌检索用户 然后根据方法上的自定义注释检查用户角色 我现在想做的是将 User 注入
  • 使用 html5 canvas 将图像裁剪为非矩形形状并进行转换

    我是 html5 canvas 的新手 但我正在创建一个基于 html5 canvas 的图像裁剪器 其中包括下一个功能 它应该将图像裁剪为多边形 但不一定是矩形 裁剪图像后 应将图像转换为矩形 我尝试搜索任何满足这些功能的图像裁剪器 但没
  • jquery 中可调整大小、可拖动的对象。可能的?

    我想要一个既可以调整大小又可以拖动的对象 我需要 X Y Size 的对象 这可能吗 有一个例子http www jsfiddle net davidThomas DGbT3 1 它获取可拖动对象的 x 和 y 我怎样才能让它调整大小 Th
  • 如何保留历史 RDD 以供在给定代码中进一步使用

    var history RDD String List String sc emptyRDD val dstream1 val dstream2 val historyDStream dstream1 transform rdd gt rd
  • Android:具有不同 alpha 值的嵌套线性布局

    我有一个矩形 LinearLayout 它有一些边距 一些圆角和 0 3 的 alpha 值 在这个布局中 我有 4 种不同的布局 因为我在不同的位置显示不同的图像 我的问题是 虽然主布局是 0 3 但我希望我的孩子完全可见 或者不受其父
  • Python - 通过 Firefox 的 Tor 浏览器,无法单击按钮

    我一直在尝试通过 Tor 浏览器作为 Firefox 的代理来访问某个站点 dumpert nl 我使用 Tor 浏览器的原因是这样我每次进入网站时都可以使用不同的 IP 地址进入该网站 我知道这是可能的 但我还没有找到方法来做到这一点 我
  • 通过 RequestCultureProviders 处理路由 (URL) 中的文化

    我想创建一个适当的 requestCultureProviders 来使用以下路由模板处理 AspNetCore WebApp 中的路由文化 http url domain culture controller action 例子 http
  • 带对话框的自定义标记

    我如何实现如上所示的对话框 到目前为止 这就是我现在能做的 map addLayer id markers type symbol source markers interactive true layout text field pric
  • 刷新 chrome 页面时用户变为 null flutter web firebase

    我可以在网络中使用 Firebase Auth 正确登录和注册 当我热重新加载页面时 用户信息将保持不变并且他们保持登录状态 但是 如果我使用 Chrome 刷新页面 用户将变为空 我需要再次登录 认证服务 static Future
  • 在ios中运行一个简单的python脚本

    我想在 ios 上运行 python 脚本 我不想用 Python 编写整个应用程序 而只编写其中的一小部分 我试图理解 PyObjC 但它并不那么容易 请给我举个例子好吗 我想将以下方法的结果保存在NSString多变的 def doSo
  • Android 12 新蓝牙权限

    蓝牙是我们应用程序的主要依赖项 因此 我们已经尝试实现新的 Android 12 蓝牙权限 我们唯一的资源是Android 开发人员 Android 12 中的新蓝牙权限 就是说添加权限 android permission BLUETOO
  • 为什么我会收到 Android : 目标服务器未能响应?

    API链接 http www familybuds com storegrunt new api home validate step one platform 1 发布参数 store name abc 代码位于 GoDaddy 服务器上
  • 在 Rails 中使用 collection_check_boxes 填充表单时传递额外的属性到连接表?

    填充表单时是否可以添加额外的属性来连接表collection check boxes在 Rails 中还是我必须以不同的方式填充表单 目前我有 Product Package 和 PackageItem 模型 包包含许多产品 但也可以在包中
  • 带渐变的 SVG 路径

    目前 我有一个脚本 通过 GIMP 中的 py 插件 可以生成一个带有渐变的 SVG 路径 通过具有不同宽度和颜色的同一路径的多个路径来模拟 但是 我想知道是否有一种语法可以生成类似的内容 而无需定义多个路径 就像定义一个渐变和单一路径一样
  • 如何设置 TFS 2013 构建定义以从 Git 标签构建?

    我想在 TFS 2013 中创建一个特殊的构建定义以从标签构建 该项目中使用的源代码管理是 Git 所以 假设我有一个名为v1 0 我希望此构建定义提取与该标签对应的源并运行构建 触发器现在并不重要 甚至可以是手动的 这怎么可能 我可以看到