从三个不同的分支部署 .Net 网站

Deploy .Net Website from three different branches

我不确定我应该在这里还是在 ServerFault 上询问这个问题,但我正在尝试整理一种方法,以便在我们发现问题时更容易地打补丁。 我们在一个 git depo 中有多个网站,现在我们所做的是使用 TeamCity 服务器为每个网站构建 .nupkg,然后我们将其推送到 octopus,后者处理发布到开发、UAT 和生产服务器.

我一直在尝试从不同的分支构建 TeamCity,并将构建的包推送到章鱼,但这意味着我们每个网站需要 3 个项目,每个 TeamCity 和 Octopus 来处理这种架构。

我想知道是否有更好的方法来处理我想要实现的目标。

更新:也许这需要更多解释。我们有一个 repo,适用于所有网站。尽管这很糟糕,但现在就是这样,我们现在无法真正改变它。但我想从使用 .Net 的人那里得到一些见解,并希望他们的部署有 Dev/UAT/master 分支策略。

总是有更好的方法,但您所要求的需要一些工作。这是我处理类似情况的方式。在我的例子中,我有一个应用程序都在一个 Git 存储库下,但我希望将应用程序部署到基于 Git 分支的不同网站。所以这就是我的设置方式:

先决条件:

PowerShell

PSake - 用于 .NET 应用程序的 PowerHhell 构建框架

  1. 我有一个驻留在每个分支中的 Psake 构建文件,它可以从命令行本地 运行,但 TeamCity 也使用它来 运行 构建。该构建文件将分支名称作为参数,通过使用分支名称为 NuGet 包创建包 ID 来构建和打包解决方案。例如,如果我的分支名为 "feat-API",我会去掉 "feat-" 并且我的 NuGet 包 ID 变为 "api.myapp.com",当构建 NuGet 包时,它变为 "api.myapp.com-2017.05.26.nupkg"
  2. 构建包后,它会被推送到 OctopusDeploy 服务器上的 NuGet 源,但不会实际触发发布。
  3. 下一步是 PSake 构建脚本调用 Octopus API 并触发新版本,将包的 ID 作为参数传递。
  4. 在 Octopus Deploy 端,我有一个项目,带有一个带参数的自定义步骤模板......你现在应该已经猜到了,包 ID。
  5. 要真正使这个足够通用,您的程序包需要包含实际部署。我正在使用 Chocolatey(增强版的 NuGet 来源)并且由于 NuGet/Chocolatey 只是基于 PowerShell,所以包内的安装脚本处理实际部署。它以 运行 所在的 Octopus 环境作为参数,从配置文件和环境特定文件构建部署所需的值,并部署网站等。

如你所见,这是可行的,但并不简单。