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

时间:2017-05-23 12:45:52

标签: .net git deployment teamcity octopus-deploy

我不确定我是否应该在这里或在ServerFault上问这个问题,但是当我们发现问题时,我正在尝试将生产补丁变得更容易。 我们在一个git depo中有几个网站,现在我们所做的是使用TeamCity服务器为每个网站构建.nupkg,然后我们将其推送到章鱼,处理发布到开发,UAT和生产服务器。

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

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

更新:也许这需要更多解释。我们为所有网站都有一个回购。这就是坏事,这就是现在的情况,我们现在无法真正改变它。但是我希望人们能够使用.Net和Dev / UAT / master分支策略进行部署。

1 个答案:

答案 0 :(得分:1)

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

<强>先决条件:

PowerShell的

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

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