【问题标题】:Deploy .Net Website from three different branches从三个不同的分支部署 .Net 网站
【发布时间】:2017-05-23 12:45:51
【问题描述】:
我不确定我应该在这里还是在 ServerFault 上问这个问题,但我正在尝试组合一种方法,以便在我们发现问题时更轻松地制作生产补丁。
我们在一个 git depo 中有多个网站,现在我们所做的是使用 TeamCity 服务器为每个网站构建 .nupkg,然后我们将其推送到处理发布到开发、UAT 和生产服务器的 octopus。
我一直在尝试从不同的分支构建 TeamCity,并将构建的包推送到 octopus,但这意味着每个网站需要 3 个项目,每个 TeamCity 和 Octopus 来处理这种架构。
我想知道是否有更好的方法来处理我想要实现的目标。
更新:也许这需要更多解释。对于所有网站,我们都有一个 repo。尽管这很糟糕,但这就是现在的情况,我们现在无法真正改变它。但我想从使用 .Net 和 Dev/UAT/master 分支策略的人那里获得一些见解。
【问题讨论】:
标签:
.net
git
deployment
teamcity
octopus-deploy
【解决方案1】:
总有更好的方法,但您的要求需要一些工作。这是我处理类似情况的方式。在我的例子中,我在一个 Git 存储库下有一个应用程序,但我希望将应用程序部署到基于 Git 分支的不同网站。所以我是这样设置的:
先决条件:
PowerShell
PSake - 用于 .NET 应用程序的 PowerHhell 构建框架
- 我在每个分支中都有一个 Psake 构建文件,它可以从命令行本地运行,但 TeamCity 也使用它来运行构建。该构建文件将分支名称作为参数,通过使用分支名称为 NuGet 包创建包 ID 来构建和打包解决方案。例如,如果我的分支名为“feat-API”,我去掉“feat-”,我的 NuGet 包 ID 变为“api.myapp.com”,当 NuGet 包构建时,它变为“api.myapp.com -2017.05.26.nupkg"
- 构建包后,它会被推送到 OctopusDeploy 服务器上的 NuGet 源,但不会实际触发发布。
- 下一步是 PSake 构建脚本调用 Octopus API 并触发新版本,将包的 ID 作为参数传递。
- 在 Octopus Deploy 端,我有一个项目,带有一个带有参数的自定义步骤模板...您现在应该已经猜到了,包 ID。
- 要真正使这个通用性足以工作,您的包需要包含实际部署。我正在使用 Chocolatey(NuGet 源代码的增强版本),并且由于 NuGet/Chocolatey 只是基于 PowerShell,因此包内的安装脚本处理实际部署。它将运行它的 Octopus 环境作为参数,从配置文件和环境特定文件构造执行部署所需的值,并部署网站等。
如您所见,这是可行的,但并不简单。