【发布时间】:2015-04-24 07:17:14
【问题描述】:
我们使用 git 作为源代码控制,并遵循 git flow 工作流程。
我们正在使用 Visual Studio 2013
我们使用的是 Teamcity v8.1
我们有 2 个 C# 解决方案。解决方案 A 和解决方案 B。解决方案 B 使用解决方案 A 创建的 nuget 包。
我们使用 teamcity 作为构建服务器。我们有 2 个构建配置来创建项目 A nuget 包。一种构建配置创建 nuget 包的预发布版本,另一种构建配置创建 nuget 包的稳定版本。
用于创建预发布 nuget 的构建配置在开发分支上进行侦听。稳定版的构建配置监听 master/release/hotfix 分支
当我们在开发分支中工作时,我们使用 nuget 包的预发布版本。 但是当我们创建一个发布分支时,我们希望使用 nuget 包的稳定版本。
到目前为止,我们尝试过的是: 在项目 B 的 csproj 文件中,我们在 BeforeBuild 目标中添加了一个元素,该元素执行 nuget.exe 以更新 nuget 包的预发布版本。这很好用,因为每次我们构建项目 B 时,我们都会获得 nuget 包的最新预发布版本。
但是当我们在 release/master/hotfix 分支时,我们不想要预发布版本,我们想要稳定版本。
我创建了一个 powershell 脚本,该脚本从 BeforeBuild 目标中的项目 B csproj 文件执行
在 powershell 脚本中我可以找到我们所在的 git 分支,但我还没有找到使用 nuget.exe 将 nuget 包更新到最新稳定版本的方法。如果我可以在 powershell 脚本中使用 nuget cmdlet,我可以运行带有版本标志的更新包,但是在使用 nuget.exe 时不支持这一点
你有没有做过类似的事情,你是怎么解决的?
【问题讨论】:
-
听起来很复杂。你为什么不使用 nuget 服务器呢?构建 nuget 包作为 CI 的一部分不是我会采用的方式。
-
我们使用teamcity内部的nuget服务器来分发包。因此,解决方案 B 从该提要中获取 nuget 包。复杂的部分是根据您当前工作的 git 分支在包的稳定版本和预发布版本之间进行切换
-
你可以有两个 nuget 提要,一个用于稳定分支,另一个用于开发分支,并根据分支名称在这些 nuget 提要之间切换。
-
我现在选择的是编写一个 powershell 脚本,用最新的稳定版本值替换 .csproj 和 package.config 文件中的包版本值,以便 Visual Studio vil 恢复正确的包重建解决方案时
-
@OKB 我们没有完全相同的场景,但是任何 nuget 包的自动更新都是混乱的。我们的构建有一个复杂的 powershell 脚本来确定您要更新到哪个版本(查询源并查看最新版本与某种模式匹配,因为我们可能想要最新的 2.7.* 但 3.0 可用)然后它会做一些事情类似于在 proj 文件中查找和替换,因此它可以进行 nuget 恢复。
标签: c# powershell msbuild teamcity nuget-package