-
Notifications
You must be signed in to change notification settings - Fork 0
MS_NuGetPrivateRepository
- 戻る(NuGet)
- NuGet を使用したパッケージ管理
-
NuGetパッケージの開発と公開
- NuGetプライベート・リポジトリ
- NuGetパッケージのデバッグ
- NuGetパッケージのプレリリース版
ファイル共有と HTTP(NuGet.Server)の、
NuGet プライベート・リポジトリが比較的容易に建てられるもよう。
補足(なぜプライベート・リポジトリが要るか): 社内で作った
ライブラリを共有したいが、nuget.org に公開はできない、
という要求に応えるための仕組みである。【プライベート・リポジトリが無い場合】 共有 DLL をファイル サーバに置き、各自がコピーして参照設定 → 版が分からない/古い DLL が残る/依存関係が管理されない 【プライベート・リポジトリがある場合】 dotnet add package MyCompany.Common --version 2.1.0 → 版と依存関係が [NuGet](MS_NuGet) の仕組みで管理される加えて、上流(nuget.org)のミラー/キャッシュとしての用途もある
(オフライン環境、ビルドの安定化、サプライ チェーン対策)。
ファイル共有による方法と、HTTP(NuGet.Server)による方法がある。
-
.NET開発の新標準「NuGet」入門(後編) - @IT
http://www.atmarkit.co.jp/fdotnet/chushin/nuget_02/nuget_02_02.html -
社内の開発環境の改善&効率化のためにNuGetを活用しよう - Build Insider
https://www.buildinsider.net/enterprise/nugetprivate/01
補足(最も手軽な方法): フォルダを 1 つ用意して、
.nupkgを置くだけでリポジトリとして機能する。<!-- nuget.config --> <configuration> <packageSources> <add key="local" value="\\fileserver\nuget-packages" /> </packageSources> </configuration>dotnet nuget push MyLib.1.0.0.nupkg -s \\fileserver\nuget-packages dotnet add package MyLib --source local
長所 短所 ファイル共有 サーバ不要。すぐ始められる 認証が SMB 頼み。検索が遅い(全走査) HTTP 認証・検索・API が使える サーバの構築と運用が要る 数十パッケージ程度まではファイル共有で十分である。
数が増えると復元のたびに全ファイルを走査するため遅くなる。
-
NuGet.Server を利用してプライベートリポジトリを構築する - しばやん雑記
https://blog.shibayan.jp/entry/20111017/1318860985
補足(現在の選択肢/最新化): 原文が挙げる NuGet.Server は
.NET Framework + IIS 向けのパッケージで、
現在はほとんど使われていない(更新も停止している)。現在の主な選択肢は次の通り。
種別 名称 特徴 SaaS Azure Artifacts Azure DevOps に同梱。上流ミラーが強力 SaaS GitHub Packages GitHub の権限モデルをそのまま使える SaaS MyGet 古参の NuGet ホスティング 自前(OSS) BaGet .NET 製・軽量。Docker で 1 コンテナ 自前(OSS) Sleet 静的サイトとして生成(S3 / Azure Blob に置ける) 自前(商用) Artifactory / Nexus 多言語のリポジトリを一元管理 # BaGet を Docker で立てる例 docker run -d -p 5555:80 \ -e ApiKey=SECRET \ -v /var/baget:/var/baget \ loicsharma/baget:latest dotnet nuget push MyLib.1.0.0.nupkg -s http://localhost:5555/v3/index.json -k SECRET判断の目安:
- 既に Azure DevOps / GitHub を使っている → Azure Artifacts / GitHub Packages
(認証が既存のアカウントで済むのが最大の利点)- 閉域網・オンプレのみ → BaGet(軽量)/ Artifactory(本格運用)
- 静的ホスティングだけで済ませたい → Sleet
補足(実運用での要点): プライベート・リポジトリを立てる際、
設定を誤るとセキュリティ事故につながる点に注意する。① 依存関係かく乱(Dependency Confusion)への対策
複数のソースを登録していると、NuGet は
すべてのソースに問い合わせ、より新しい版を選ぶ。
このため、社内パッケージ MyCompany.Common 1.0.0(社内リポジトリ) ↓ 攻撃者が nuget.org に MyCompany.Common 99.0.0 を公開 ↓ ビルドが nuget.org 側を取得してしまう ← 任意コード実行という攻撃が成立し得る。対策は
packageSourceMapping(NuGet 6.0+)。<packageSourceMapping> <packageSource key="nuget.org"> <package pattern="*" /> </packageSource> <packageSource key="private"> <package pattern="MyCompany.*" /> <!-- 社内前置は社内からのみ --> </packageSource> </packageSourceMapping>②
nuget.configに API キーを平文で書かない# 暗号化して保存(Windows) dotnet nuget add source https://... -n private -u USER -p PAT # CI では環境変数・シークレット ストアから渡す③ 上流ミラーで nuget.org への直接依存を断つ
Azure Artifacts や Artifactory の上流ソース機能を使うと、
一度取得したパッケージがリポジトリ側に保持されるため、
- nuget.org 障害時もビルドできる
- 公開側で削除されたパッケージが消えない(再現性)
- 取り込むパッケージを審査・監査できる
という利点が得られる。
- ローカル フィードでのパッケージのホスト
https://learn.microsoft.com/ja-jp/nuget/hosting-packages/local-feeds - パッケージ ソース マッピング
https://learn.microsoft.com/ja-jp/nuget/consume-packages/package-source-mapping - Azure Artifacts での NuGet パッケージ
https://learn.microsoft.com/ja-jp/azure/devops/artifacts/get-started-nuget
Tags: 移行, .NET開発, デプロイ, NuGet
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。