我刚刚设置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。
答案 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项目来说很好)。