'dotnet build'命令未找到nuget软件包(它们存在)

ihe*_*iks 5 c# nuget jenkins docker .net-core

我正在尝试从Jenkins服务器上的命令行构建.NET Core 2.1应用程序。

它在我的本地计算机(Windows 10,VS2017 Enterprise)上构建良好,并且如果我在运行Jenkins的服务器上手动构建它(手动签出git存储库并运行dotnet构建)。只有当我通过Docker容器中的Jenkins进行操作时,它才会失败。

错误: /usr/share/dotnet/sdk/2.1.403/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error NETSDK1064: Package Microsoft.CodeQuality.Analyzers, version 2.6.2 was not found. It might have been deleted since NuGet restore. Otherwise, NuGet restore might have only partially completed, which might have been due to maximum path length restrictions. [/var/lib/jenkins/jobs/pr-builder/jobs/cgi-api/branches/PR-18/workspace/API/API.csproj]

该软件包存在于中~/.nuget/packages/

我知道我的Jenkinsfile目前有点怪异,但这与我试图使所有这些都起作用有关。似乎dotnet restore工作正常,但dotnet build无法找到这些文件。

我试过指定包目录(通过env var和dotnet restore --sources和)dotnet build --sources

目前,我几乎可以想到的任何东西都附有,但是如果我忘记了什么,请告诉。我现在很迷路。

我的Jenkinsfile:

pipeline {
    agent {
        docker {
            image 'microsoft/dotnet:2.1-sdk'
        }
    }
    environment {
        HOME           = '.'
        NUGET_PACKAGES = './.nuget/packages/'
    }
    stages {
        stage('pre-build') {
            steps {
                // logging tooling versions
                sh 'dotnet --info'
                sh 'find ~/.nuget/packages/microsoft.codequality.analyzers/ -type f'
                sh 'dotnet nuget locals all --list'
                sh 'dotnet restore'
                // sh 'dotnet clean'
            }
        }
        stage('build') {
            steps {
                // sh 'dotnet restore --force --no-cache'
                // sh 'ls ./packages/'
                // sh 'find ./packages/microsoft.codequality.analyzers/ -type f'
                sh 'dotnet build --no-restore'
            }
        }
        stage('test') {
            steps {
                sh 'no test project configured'
                // sh 'dotnet test'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>

  <PropertyGroup>
    <CodeAnalysisRuleSet></CodeAnalysisRuleSet>
    <Features>IOperation</Features>
  </PropertyGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

一些构建细节:

$ docker --version
Docker version 18.06.1-ce, build e68fc7a
Run Code Online (Sandbox Code Playgroud)

在docker容器内部:

$ dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   2.1.403
 Commit:    04e15494b6

Runtime Environment:
 OS Name:     debian
 OS Version:  9
 OS Platform: Linux
 RID:         debian.9-arm
 Base Path:   /usr/share/dotnet/sdk/2.1.403/

Host (useful for support):
  Version: 2.1.5
  Commit:  290303f510

.NET Core SDKs installed:
  2.1.403 [/usr/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.5 [/usr/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.5 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.5 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
Run Code Online (Sandbox Code Playgroud)
$ find ./.nuget/packages/microsoft.codequality.analyzers/ -type f
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/analyzers/dotnet/vb/Microsoft.CodeQuality.VisualBasic.Analyzers.dll
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/analyzers/dotnet/vb/Microsoft.CodeQuality.Analyzers.dll
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/analyzers/dotnet/cs/Microsoft.CodeQuality.Analyzers.dll
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/analyzers/dotnet/cs/Microsoft.CodeQuality.CSharp.Analyzers.dll
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/.signature.p7s
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/ThirdPartyNotices.rtf
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/build/Microsoft.CodeQuality.CSharp.Analyzers.props
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/build/Microsoft.CodeQuality.VisualBasic.Analyzers.props
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/build/Microsoft.CodeQuality.Analyzers.props
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/DesignRulesEnabled.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/DocumentationRulesDefault.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/PerformanceRulesDefault.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/UsageRulesDefault.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/ReliabilityRulesDefault.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/MaintainabilityRulesDefault.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/SecurityRulesDefault.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/PerformanceRulesEnabled.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/MaintainabilityRulesEnabled.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/UsageRulesEnabled.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/DocumentationRulesEnabled.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/ReliabilityRulesEnabled.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/AllRulesEnabled.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/NamingRulesEnabled.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/AllRulesDisabled.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/SecurityRulesEnabled.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/DesignRulesDefault.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/NamingRulesDefault.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/rulesets/AllRulesDefault.ruleset
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/microsoft.codequality.analyzers.2.6.2.nupkg.sha512
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/microsoft.codequality.analyzers.2.6.2.nupkg
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/microsoft.codequality.analyzers.nuspec
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/tools/uninstall.ps1
./.nuget/packages/microsoft.codequality.analyzers/2.6.2/tools/install.ps1
Run Code Online (Sandbox Code Playgroud)
$ dotnet nuget locals all --list
info : http-cache: ./.local/share/NuGet/v3-cache
info : global-packages: ./.nuget/packages/
info : temp: /tmp/NuGetScratch
info : plugins-cache: ./.local/share/NuGet/plugins-cache
Run Code Online (Sandbox Code Playgroud)
$ dotnet restore

  Restoring packages for /var/lib/jenkins/jobs/pr-builder/jobs/cgi-api/branches/PR-18/workspace/API/API.csproj...

  Restore completed in 13.5 sec for /var/lib/jenkins/jobs/pr-builder/jobs/cgi-api/branches/PR-18/workspace/API/API.csproj.
Run Code Online (Sandbox Code Playgroud)
$ dotnet build --no-restore

Microsoft (R) Build Engine version 15.8.169+g1ccb72aefa for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

/usr/share/dotnet/sdk/2.1.403/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error NETSDK1064: Package Microsoft.CodeQuality.Analyzers, version 2.6.2 was not found. It might have been deleted since NuGet restore. Otherwise, NuGet restore might have only partially completed, which might have been due to maximum path length restrictions. [/var/lib/jenkins/jobs/pr-builder/jobs/cgi-api/branches/PR-18/workspace/API/API.csproj]

Build FAILED.

/usr/share/dotnet/sdk/2.1.403/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error NETSDK1064: Package Microsoft.CodeQuality.Analyzers, version 2.6.2 was not found. It might have been deleted since NuGet restore. Otherwise, NuGet restore might have only partially completed, which might have been due to maximum path length restrictions. [/var/lib/jenkins/jobs/pr-builder/jobs/cgi-api/branches/PR-18/workspace/API/API.csproj]
    0 Warning(s)
    1 Error(s)
Run Code Online (Sandbox Code Playgroud)

ihe*_*iks 11

我已经通过指定dotnet build应该在哪里查找 NuGet 包来解决这个问题。它的图像中它不看在正确的位置(虽然我不知道它寻找要么...)

我已经用--packages选项指定了位置。这个选项在dotnet restore文档中列出,但不在文档中dotnet build,即使它也可以在那里使用(并且你在那里特别需要它)。

您可以按如下方式指定它:

dotnet restore --packages <path>
Run Code Online (Sandbox Code Playgroud)

dotnet build --packages <path>
Run Code Online (Sandbox Code Playgroud)

--no-restore如果您需要,它也适用于该选项。


我的最终 Jenkinsfile 如下所示:

pipeline {
    agent {
        docker {
            image 'microsoft/dotnet:2.1-sdk'
        }
    }
    environment {
        HOME = '.'
    }
    stages {
        stage('pre-build') {
            steps {
                // logging tooling versions
                sh 'dotnet --info'
                sh 'dotnet nuget locals all --list'
                sh 'dotnet clean'
            }
        }
        stage('build') {
            steps {
                sh 'dotnet build --packages ./.nuget/packages'
            }
        }
        stage('test') {
            steps {
                sh 'echo no test project configured'
                // sh 'dotnet test'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)