6

我刚刚设置了 TeamCity 来自动化我们的构建,我们当前的解决方案有一个 dev 和 main 分支。我想要实现的是在我们的 ProGet 安装上构建开发分支并将其发布到开发 NuGet 提要,然后让主分支发布到 ProGet 服务器上的主 NuGet 提要。

我们正在使用 octopus deploy 来部署包,在 TeamCity 中,我们安装了 octopus deploy 插件,如果我勾选该框以运行 OctoPack,它会构建包,并在构建完成时显示为工件。如果我尝试在 TeamCity 中使用 NuGet Pack 构建步骤,我会在我们的一个项目中收到以下错误:

[08:33:49] :         [pack] Attempting to build package from 'xxx.csproj'.
[08:33:50]W:         [pack] Unable to find 'xxx.exe'. Make sure the project has been built.

该项目已经构建并且可以与 OctoPack 一起使用,那么为什么它不能与 NuGet Pack 一起使用呢?Wwe 正在构建五个项目,前四个运行良好,一个是控制台应用程序,一个是 mvc 网站,两个是类库。一个不起作用的是 Windows 服务。

这里的最终目标是将这些包发布到 ProGet 上的私人订阅源。我不介意使用 OctoPack,但我想从 TeamCity 中删除这种依赖,但我可以忍受它。但是,当我尝试使用 NuGet Publish 运行器类型时,如何选择发布已创建的任何 NuGet 工件?

我一直在疯狂地搜索,我找不到任何有用的链接来描述你应该输入的内容,我非常感谢任何有用的评论/答案。

我们使用的是 TeamCity 8.15 版。

4

1 回答 1

11

希望以下内容至少对您的部分问题有所帮助;主要是关于如何发布打包的工件。

NuSpec 方法

使用NuGet Pack构建步骤时,您可以指定Output Directory,这将确定包的输出位置。您可以将其指定为结帐目录的相对路径,最好将其定义为构建参数,例如%system.PackageDeployOutput%您将在下一步中使用它...:

接下来,指定NuGet Publish构建步骤,填写 Package Source / API key 等,并将要上传的 Packages 指定为

%system.PackageDeployOutput%\*.nupkg

这将获取上一步中的包输出。我已经非常有效地使用了它,并且参数化方法鼓励在所有构建中进行约定。

OctoPack 支持

如果您将MsBuild构建步骤与OctoPack一起使用,则可以通过声明一个名为的系统参数来使用类似的方法

system.OctoPackPublishPackageToFileShare = %teamcity.build.checkoutDir%\%system.PackageDeployOutput% (注意与上面相同的参数)

您可以将这些声明为根项目参数,这样您就可以两全其美。我目前首选的打包方法是将 nuspec 文件用于可部署的端点。当涉及到更复杂的部署时,我发现 OctoPack 有点开销(对于基本的 MsBuild 项目来说很好)。

于 2014-11-20T04:17:19.950 回答