如何为ASP.NET 5项目设置TeamCity构建

14

我正在尝试为我开发的网站设置一个CI服务器,但是我找不到任何关于如何在新的ASP.NET 5中实现它的信息。


1
http://blog.coderinserepeat.com/2015/01/25/building-asp-net-5-projects-in-teamcity/ - Shrike
我开始跟着那篇文章,但最终使用了Victor的答案中建议的build.cmd。我认为这样更容易跟随,尽管据我所知,没有关于如何使用这些工具的文档。 - edua_glz
5个回答

10
我明白了兄弟,这让我花了几天时间才弄明白。这个配置是在TeamCity v10上进行的,用于一个ASP.NET Core 1.0 RC2/preview2项目。作为额外奖励,我还包括了推送到Octopus Deploy的步骤。你需要安装dotnet teamcity插件和最新的具有推送功能的Octopus Deploy插件。以下是构建步骤概述:

Build Steps Overview

首先,不要尝试使用dotnet restore来恢复软件包。如果您有未编译为.Net Core的内部nuget包,则无法正常工作。这花费了很长时间才弄清楚。在人们将所有内容转换为.Net Core或Microsoft修复dotnet.exe变得更加灵活之前,我建议忽略尝试使用dotnet restore

Build Step 1/3

一些我阅读的资料说要使用最新的NuGet beta版本3.5。当我尝试这样做时,会出现以下错误。
[14:30:09][restore] 从D:\buildAgent\tools\NuGet.CommandLine.3.5.0-rc1\tools\NuGet.exe启动NuGet.exe 3.5.0.1737
[14:30:10][restore] 无法从程序集'NuGet, Version=3.5.0.1737, Culture=neutral, PublicKeyToken=31bf3856ad364e35'中加载类型'NuGet.CommandAttribute'。
我不知道这是什么意思,也不在意。现在先使用3.4.4版本。根据需要填写其余内容。

Build Step 2/3

dotnet publish 步骤非常简单。确保提供输出目录,因为您希望在最后一步中使用它。此外,请务必使用 %teamcity.build.workingDir% 变量指定绝对路径,因为存在this bug。否则,它将无法找到您的 web.config 文件并且无法完成整个网站的发布。您将会缺少像 web.config 和 wwwroot 这样的东西! Build Step 3/3

最后我们推送到 Octopus。这对我来说非常棘手。请注意部分内容,其中包括%teamcity.build.workingDir%/published-app/**/* => OrderReviewBoard.1.0.0.zip

如果其中任何部分无效,你的步骤将会失败而没有任何解释!!! 无效是指你可能在压缩包名称中放置了TeamCity环境变量(例如所有示例中显示的%build.number%),但它们没有正确解析。或者你指定了一个不存在的路径。或者其他任何问题,你将看到一个错误,上面写着“[Octopus Deploy]请指定要推送的软件包”。这意味着该语句失败,因此未生成任何软件包。我知道你想在那里有一个自动递增的构建编号。我会让你自己想办法实现。
请不要被这里运行的内容所困扰。章鱼在他们的网站上试图解释它, 但它被隐藏在这里。有octo packocto push。基于您放入“套餐路径”框中的任何语句,新版本的octo pack正在不为人知的地方运行。不要分心去创建nuspec包或尝试使用dotnet pack。对于我们的目的来说,这些都是死胡同。创建一个.zip文件并继续您的生活。最后,请注意我添加的附加命令行参数。它们可以帮助你一点点,但不是必需的。祝好运。

我无法让这个解决方案正常工作。第一次构建步骤失败,并显示以下错误信息:“在第13行第23列读取'F:\TeamCity\Files\buildAgent\work\src\solutionname\project.json'时出错:TODO: 未知关键字平台”。我已确保安装了最新的CLI,但仍然失败。如果你遇到过这个问题,你是如何解决的? - dont_trust_me
@Carl91 在你的解决方案中打开 project.json 文件。在第13行,显然有一行无效的注释:“TODO:something something。”删除该行并推送到 TeamCity。 - redwards510
我在第13行唯一的内容是"netcoreapp1.0": {。该框架似乎不受最新稳定版本的nuget(3.4.4)支持。更新到3.5.0-beta2后,它可以正常工作。 - dont_trust_me
@redwards510 尝试了你的解决方案(除了我在使用 TC9,因此手动使用命令行步骤 dotnet publish %fullpathtomywui% ),但是我遇到了一个错误: Lock file Microsoft.DotNet.ProjectModel.Graph.LockFile 包含 msbuild 项目,但没有导出文件 在第二步。 - Alex Zhukovskiy
是的 @redwards510,在 project.fragment.lock.json 文件出现之前,我也遇到了同样的错误。我的当前解决方法是在 xproj 文件上调用 MSBuild,该操作生成此文件,然后使用 dotnet publish 运行无误。但是,你的帖子非常有帮助:例如,我尝试使用 3.5 RC1 进行工作,但出现了 CommandAttribute 错误,所以我使用了可行的 3.4.4 版本。 - Alex Zhukovskiy
显示剩余4条评论

9
我们(ASP.NET团队)使用TeamCity作为构建服务器。每个仓库都有一个类似于这个build.cmd文件。TeamCity只需调用该文件。
对于Mac/Linux构建,则有build.sh文件。

1
维克托,有关 Sake\KoreBuild 工具的信息在哪里可以找到?为什么你选择了 Sake? - Shrike
这是你在2016年应该使用的方式吗?我正在研究build.cmd,它试图从nuget packages中使用KoreBuild。但是该软件包今天已不存在。有任何建议如何构建此项目吗? - Erlis Vidal
KoreBuild(或KoreBuild-dotnet)不是创建构建自动化的官方方式。它们只是微软内部的包,我们恰好公开推出。虽然没有官方支持,但您可以自由使用它们。该软件包仅在myget feeds上提供,而不在nuget上提供。 - Victor Hurdugaci
@PWKad 我们仍然使用一年前的相同构建系统。我们仍然使用TeamCity并调用build.cmd/build.sh文件。dev分支中的构建文件是针对RC2的dotnet。对于RC1,您必须使用来自RC1标记的文件。在您的情况下有什么特别的问题吗? - Victor Hurdugaci
@VictorHurdugaci 你为什么使用TeamCity? - Edward Olamisan

4

1

1

1
嗯,这些博客文章的链接都是一年前的了。除了说"请检查博客文章的日期,并在花费5个小时依赖它之前尽量找到最新的信息"之外,我还能说什么呢?特别是如果你打算在生产中使用它的话。 - detay
问题在于我找不到新的信息。很抱歉前几天有点沮丧。我会暂时删除我的评论和反对,但还需要更好的解决方式。 - PW Kad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接