在TeamCity中使用.NET CLI打包和发布NuGet包



我正在尝试创建Team City构建模板,该模板需要最少的定制,我希望它能很好地与遗留项目以及使用.NET Core/Standard和.NET CLI开发的项目配合使用。我一直在使用NuGet,因为在工作方式上有一些相当大的变化。

早些时候,我们必须创建nuspec文件来将项目打包为NuGet包。至少在该文件中,我们可以定义各种与包相关的属性。

新的csproj文件格式允许我们在其内部定义所有包属性。这很好,但我们怎么知道哪些项目应该打包,哪些不应该打包?

到目前为止,TeamCity的构建步骤Pack NuGet只包含Specification files:字段的**.nuspecnuspec文件存在这一事实就像一个标志pack & publish this project

但是,对于dotnet pack,我们需要指定项目。没有简单的方法来区分"主要"项目和主要依赖的"辅助"项目。(让我们忽略目前不支持项目到项目的引用。)

我们可以打包指定**.*proj的所有项目(但在这种情况下,我们要知道要发布哪些包),也可以在构建配置中显式指定项目,但我不喜欢这种方法,因为每次向解决方案中添加新项目时,都必须编辑构建配置。

我还考虑了选项Generate package on build,并省略了dot net pack步骤,因为包是在构建时创建的。剩下的就是发布带有指定**/%BuildConfiguration%/*.nupkgdotnet nuget push的包。不幸的是,当在没有启用Generate package on build的项目的情况下开始针对解决方案进行构建时,TC会抱怨失败

未找到模式"**/Release/*.nupkg"的目标文件

因此,我要么需要另一个实现所需结果的配方,要么需要一个如何让TC将空结果视为NOP并将构建标记为成功的建议。

另一种选择是即使对于新的csproj也使用nuspec。。。

由于TeamCity 2017.2将提供将构建配置与多个模板关联的选项。因此,您将能够创建不同的模板来为旧项目和新的.NET CLI项目创建包。

若要指定应该打包的目标.NET项目的路径,可以使用生成配置参数。

要在构建过程中设置这些参数,可以在前面的构建步骤服务消息中发送。此参数的值可以设置为目标项目文件的列表,这些文件可以通过如下脚本选择:https://stackoverflow.com/a/8153857/305875

最新更新