使用矩阵配置将特定项目部署到 NuGet
Deploy a specific project to NuGet with a matrix configuration
我的 appveyor.yml 如下所示:
environment:
matrix:
- solution_name: Src/App1.sln
- solution_name: Src/App2.sln
before_build:
- cmd: dotnet restore %solution_name%
build:
project: '%solution_name%'
publish_nuget: true
after_build:
- dotnet pack Src\App1.csproj
deploy:
- provider: NuGet
api_key:
secure: [my api key]
on:
branch: master
artifact: /.*(\.|\.s)nupkg/
artifacts:
- path: Out\
name: App1
- path: '**\*.nupkg'
它工作得很好,但有一个问题:它似乎在构建过程中部署了两次。以下是 AppVeyor 日志的一部分:
Collecting artifacts...
Found artifact 'Out' matching 'Out' path
Found artifact 'Out\App1\Release\App1.6.0.3.nupkg' matching '**\*.nupkg' path
Uploading artifacts...
[1/2] App1.6.0.3.nupkg (164,127 bytes)...100%
[2/2] Out\App1\Release\App1.6.0.3.nupkg (164,127 bytes)...100%
Deploying using NuGet provider
Publishing App1.6.0.3.nupkg to https://www.nuget.org/api/v2/package...OK
Publishing App1.6.0.3.nupkg to https://www.nuget.org/api/v2/package...Skipped (A package with ID 'App1' and version '6.0.3' already exists and cannot be modified.)
No packages were pushed.
所以我登录 NuGet.org,我可以看到 App1.6.0.3
已成功发布。然而,在上面的日志中,同一个包被发布了两次,因此第二次发布被跳过,并以消息“我们没有推送包”结束。但是居然推送了一个包
可能是因为我在 environment
部分下有一个 matrix
配置,所以 AppVeyor 运行了 deploy
两次?如果是这样,如何告诉 AppVeyor 只部署一次?
经过一些实验,我找到了一个修复方法,即删除 build
部分下的 publish_nuget: true
。此行将导致 AppVeyor 创建一个 nuget 包,并且 after_build
部分下的 dotnet pack Src\App1.csproj
命令也将创建一个 nuget 包。所以会在不同的位置生成两个相同的.nupkg文件,AppVeyor会找到这两个文件并将它们推送到nuget服务器。
结果:
build:
project: '%solution_name%'
after_build:
- dotnet pack Src\App1.csproj
我的 appveyor.yml 如下所示:
environment:
matrix:
- solution_name: Src/App1.sln
- solution_name: Src/App2.sln
before_build:
- cmd: dotnet restore %solution_name%
build:
project: '%solution_name%'
publish_nuget: true
after_build:
- dotnet pack Src\App1.csproj
deploy:
- provider: NuGet
api_key:
secure: [my api key]
on:
branch: master
artifact: /.*(\.|\.s)nupkg/
artifacts:
- path: Out\
name: App1
- path: '**\*.nupkg'
它工作得很好,但有一个问题:它似乎在构建过程中部署了两次。以下是 AppVeyor 日志的一部分:
Collecting artifacts...
Found artifact 'Out' matching 'Out' path
Found artifact 'Out\App1\Release\App1.6.0.3.nupkg' matching '**\*.nupkg' path
Uploading artifacts...
[1/2] App1.6.0.3.nupkg (164,127 bytes)...100%
[2/2] Out\App1\Release\App1.6.0.3.nupkg (164,127 bytes)...100%
Deploying using NuGet provider
Publishing App1.6.0.3.nupkg to https://www.nuget.org/api/v2/package...OK
Publishing App1.6.0.3.nupkg to https://www.nuget.org/api/v2/package...Skipped (A package with ID 'App1' and version '6.0.3' already exists and cannot be modified.)
No packages were pushed.
所以我登录 NuGet.org,我可以看到 App1.6.0.3
已成功发布。然而,在上面的日志中,同一个包被发布了两次,因此第二次发布被跳过,并以消息“我们没有推送包”结束。但是居然推送了一个包
可能是因为我在 environment
部分下有一个 matrix
配置,所以 AppVeyor 运行了 deploy
两次?如果是这样,如何告诉 AppVeyor 只部署一次?
经过一些实验,我找到了一个修复方法,即删除 build
部分下的 publish_nuget: true
。此行将导致 AppVeyor 创建一个 nuget 包,并且 after_build
部分下的 dotnet pack Src\App1.csproj
命令也将创建一个 nuget 包。所以会在不同的位置生成两个相同的.nupkg文件,AppVeyor会找到这两个文件并将它们推送到nuget服务器。
结果:
build:
project: '%solution_name%'
after_build:
- dotnet pack Src\App1.csproj