web-dev-qa-db-ja.com

JenkinsにカスタムNuGetパッケージソースを認識させる

JenkinsとNuGetパッケージの復元に関して少し問題があります。

私がやろうとしていることは、ジェンキンスでソリューションを構築することです(これは完全にうまく機能します)。 NuGet.exe、NuGet.Config、NuGet.targetsを含む.nuget-folderを生成するソリューションのパッケージリストアを有効にしました。

Jenkinsでは、一部のプロジェクトをサーバー上のプライベートパッケージソースのNuGetパッケージとして作成しています。私はそれらのパッケージを他のプロジェクトで使用していますが、それらはjenkins自体で構築する必要があります。

VSはプライベートパッケージソースを認識しており、グローバルなNuGet.Configファイル(AppDataの下にあるファイル)で構成されており、無効にされていません(デフォルト)。

ここで、プライベートパッケージソースからのパッケージを必要とするソリューションをビルドしようとすると、jenkinsがそれを認識していないため、ビルドが失敗し、したがって、パッケージを復元するときに空の_-source_パラメーターをコミットしますjenkinsはカスタムソースを認識していないため、置き換えられません。

これまでに試したこと

  1. ソリューションNuGet.Config-またはNuGet.Targets-fileの_Package-Source_にプライベートソースを追加することで問題が解決することはすでに知っていますが、つまり、使用するすべてのソリューションに対して、ジェンキンス。

  2. また、AppDataとProgramDataのconfig-filesでファイルのpackage-sourceタグにソースを追加し、それをアクティブソースにすることで少し遊んでもいましたが、どちらも役に立ちませんでした

  3. もちろん、パッケージのコミットは回避策になりますが、scmのパッケージを無視したいので、それは望ましい結果ではありません。

基本的に、Jenkinsにプライベートパッケージソースを常に認識させる方法があるかどうか、または開発者のマシン上のNuGetインストールを操作して、含まれる_NuGet.targets_-ファイルを生成する方法があるかどうかを知りたいプライベートパッケージソース。他に考えられる修正は、msbuildのパラメーターです。

どんな助けでも大歓迎です!

20
nozzleman

私のコメントを要約する(そして拡張する)には:

現在のバージョンのNuget(2.7以降)では、msbuildを介したNugetパッケージの復元は非推奨です

私たちはジェンキンスでバッチステップを使用しています

nuget.exe restore SOLUTIONTOBUILD.sln -source http://nugetserver...

jenkinsサービスが別のアカウントで実行され、別の場所で.configを検索するという問題を回避します。

開発者のマシンでは、パッケージはNuget-VS-Addinによって(msbuildではなく)復元されるため、古いNuget-VS-Addinがプロジェクトファイルに適用した可能性がある変更を元に戻すことを忘れないでください。

詳細は Nuget-Docs にあります

22
frank koch

この問題の別の解決策は、カスタムNuGet.configと実行可能ファイルをJenkinsサーバー上のディレクトリに追加し、ビルドステップを追加してnugetを実行することですカスタム構成。

C:\nuget\nuget.exe update "%WORKSPACE%\Project.sln" -ConfigFile C:\nuget\NuGet.config

カスタムパッケージソースを追加するNuGet.configは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="My Custom Package Source" value="http://localhost/guestAuth/app/nuget/v1/FeedService.svc/" />
  </packageSources>
  <activePackageSource>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </activePackageSource>
</configuration>

スタンドアロンのnuget.exeはダウンロードできます ここ

この方法では、同じ設定ファイルを変更することで、すべてのjenkinsジョブにカスタムフィードを簡単に追加できます。

10

[Windows] Jenkinsサービスアカウントに、nugetパッケージの場所を表示する権限があることを確認してください。私の場合、NuGetフォルダーのネットワーク上の場所をナビゲートするために必要なドメイン権限を持たないローカル管理者アカウントを使用していました。また、パッケージのネストが深すぎないことを確認してください。

0
daviesdoesit