发布NuGet包 - TeamCity

时间:2014-10-25 08:48:08

标签: teamcity nuget octopus-deploy proget

我刚刚设置TeamCity来自动化我们的构建,我们当前的解决方案同时具有开发和主分支。我想要实现的是让开发分支在我们的ProGet安装上构建并发布到开发NuGet feed,然后让主分支发布到ProGet服务器上的Main NuGet feed。

我们正在使用章鱼部署来部署软件包,在TeamCity中我们安装了章鱼部署插件,如果我勾选框来运行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一起使用?我们正在构建五个项目,前四个项目运行正常,一个是控制台应用程序,一个是mvc网站,两个是类库。不起作用的是Windows服务。

此处的最终目标是将这些包发布到ProGet上的私有Feed。我不介意使用OctoPack,但在我脑海中想要从TeamCity中删除该依赖,但我可以忍受它。但是,当我尝试使用NuGet Publish运行器时,如何选择发布已创建的任何NuGet工件?

我一直在谷歌搜索疯狂,我找不到任何有用的链接来描述你应该输入什么,我真的很感激任何有用的评论/答案。

我们正在使用TeamCity版本8.15。

1 个答案:

答案 0 :(得分:10)

希望以下内容至少可以解决您的部分问题;主要是关于如何发布打包工件的位。

NuSpec方法

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

接下来,指定NuGet Publish构建步骤,填写Package Source / API密钥等,并指定要上传的包

%system.PackageDeployOutput%\*.nupkg

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

OctoPack支持

如果您在 OctoPack 中使用 MsBuild 构建步骤,则可以通过声明名为

的系统参数来使用类似的方法

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

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