Dot-Net-Core
gitlab CI 上的 dotnet pack 或 nuget pack
我正在使用 GitLab,我需要創建一個
.gitlab-ci.yml腳本來為生成 nuGet 包的項目執行持續集成管道。我在尋找可靠的文件來回答這個問題時遇到了嚴重的問題:
我應該使用
dotnet packornuget pack嗎?nuget.exe 不能作為命令使用,除非我的 CI 腳本下載它(我正在使用 GitLab,所以我必須添加一些東西
.gitlab-ci.yml才能這樣做)。我的理解是dotnet隱式使用 nuget,因此無需直接使用 nuget。dotnet pack 命令的問題是我無法引用 nuspec 文件,它被簡單地忽略了。
我試過了
dotnet pack 'MyProject.Nuget/MyProject.Nuget.csproj' /p:NuspecFile='MyProject.Nuget/MyProject.NuGet.nuspec' /p:PackageVersion=$VERSION --output nupkgs任何關於最新版本(
dotnet --version2.1.401)的正確方法的可靠文件將不勝感激,因為我無法創建包含多個 dll 的有效 nuGet 包。更新:替代方法是:
nuget pack ./*NuGet/*.nuspec -Version $VERSION -OutputDirectory pepe -Prop Configuration=Release -NoDefaultExcludes -Verbosity detailed
我現在從 GitLab 的 CI/CD 成功為我的 dotnet 核心應用程序建構了 nuGet 包。
需要考慮的事項:
- 路徑很重要:我的 nuspec 具有
\windows 樣式的路徑。我需要將它們更改為 linux-style/。確保您的文件 src 部分引用了指定路徑中存在的 dll 和 pdb,否則在創建 nuget 時會出現異常,因為它找不到任何東西。所以我的 nuspec 現在看起來像這樣:<?xml version="1.0" encoding="utf-8" ?> <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> <metadata> <id>ToolBelt.Application</id> <version>1.0.0</version> <authors>TUI</authors> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Shared Contracts and Model for the Application layer</description> <projectUrl>https://gitlab.tuiwestern.eu/SalesDistribution/_common-packages/ToolBelt.Application</projectUrl> </metadata> <files> <file src="bin/*/netstandard2.0/ToolBelt.Application.Model.dll" target="lib/netstandard2.0" /> <file src="bin/*/netstandard2.0/ToolBelt.Application.Model.pdb" target="lib/netstandard2.0" /> <file src="bin/*/netstandard2.0/ToolBelt.Application.Contracts.dll" target="lib/netstandard2.0" /> <file src="bin/*/netstandard2.0/ToolBelt.Application.Contracts.pdb" target="lib/netstandard2.0" /> </files> </package>
- 該項目必須
.gitlab-ci.yml包含建構、執行生成 nuget 並將其推送到 nuget 儲存庫的所有步驟(以我在 Artifactory 為例)。例子:#Stages stages: - ci - codequality - build - publish #Global variables variables: GIT_STRATEGY: $STRATEGY BUILD_NUMBER: $CI_PIPELINE_ID #Jobs ci: image: ocp-golden-images.artifactory.mycompany.eu/gitlab-runner-nuget-dotnet-core:latest stage: ci script: - export VERSION=$(echo $(date +"%Y.%-m%d").$CI_PIPELINE_ID) - export NUGET_PACKAGE_FOLDER=nupkgs - dotnet build --configuration Release - dotnet vstest ./*Tests/bin/Release/**/*Tests.dll - mkdir $NUGET_PACKAGE_FOLDER - nuget pack ./*NuGet/*.nuspec -Version $VERSION -OutputDirectory $NUGET_PACKAGE_FOLDER -Prop Configuration=Release -NoDefaultExcludes -Verbosity detailed - cd $NUGET_PACKAGE_FOLDER - dotnet nuget push *.$VERSION.nupkg -s https://artifactory.mycompany.eu/artifactory/api/nuget/MyRepo因此,這些是建構具有以下結構的項目所需的所有命令:
myApp -ToolBelt.Application.Nuget --ToolBelt.Application.Nuget.nuspec -ToolBelt.Application.Contracts -ToolBelt.Application.Model -ToolBelt.Application.Model.UnitTests其中包含 nuspec 的項目(例如:)
ToolBelt.Application.Nuget必須對需要包含在包中的每個項目具有依賴關係(例如:ToolBelt.Application.Contracts和ToolBelt.Application.Model)