App Centerでprivateなnugetサーバーを参照させる設定
App Centerのビルドでどうしてもprivateなnugetパッケージを参照させたくて調べた結果、なんとかできるようになったので忘れないように記事にしました。
リポジトリ
リポジトリ全体はほぼ関係ありませんが、Nuget.configの置き場所と内容の参考になれば…
手順
- 何かしらの手段でprivateなnugetパッケージを置くサーバーを用意する
- ソリューション直下にNuget.configファイルを置く
- AppCenterで環境変数を設定する
1 nuget サーバー
読み飛ばしてOKです。
最初はMyGetでいけるだろうと思って張り切って登録したのですが、private feedは有料で断念。
その後
こちらの方法で作ろうと思ったのですが、ASP.NET coreじゃないのでmacじゃどうにもならないしホスティング先に困りそうなので諦めました。
で "nuget linux"なんかで検索するとヒットした
GitHub - Daniel15/simple-nuget-server: A very simple PHP NuGet server
これのdocker-imageである
こっちを利用することにしました。
が、なんだかんだでそのままではうまくいかずforkして試行錯誤した結果が以下になります。
docker hubに登録したので利用はできるようになってますが、dockerど素人のため、いろいろやばいと思いますので参考程度にしてください。
https://hub.docker.com/r/kamu/docker-simple-nuget-server/
https://github.com/muak/simple-nuget-server
https://github.com/muak/docker-simple-nuget-server
2 Nuget.config
ソリューション直下にNuget.configファイルを作成し、以下のように記述します。
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="nuget" value="https://www.nuget.org/api/v2" /> <add key="MyNuget" value="https://mynuget.com" /> </packageSources> <activePackageSource> <add key="All" value="(Aggregate source)" /> </activePackageSource> <packageSourceCredentials> <MyNuget> <add key="Username" value="%private_nuget_user%" /> <add key="ClearTextPassword" value="%private_nuget_pass%" /> </MyNuget> </packageSourceCredentials> </configuration>
How to restore a private NuGet feed? | App Center Help Center
こちらを参考にしたんですが、標準のfeedのアドレスがそのままでは何故かうまくいかなかったのでvs for macに最初から設定されていたurlに変更しています。
packageSourcesにprivateなkey-value(名前/URL)を追加し (サンプルではMyNuget/https://mynuget.com)、 pakageSourceCredentialsに追加したpackageSourcesのkeyと同じエントリを追加して、その中にUser名とPasswordの項目を追加します。 %で囲まれた部分はAppCenterで設定する環境変数です。もちろんここに直接記述してもOKです。
3 App Centerでの設定
環境変数をNuget.configに合わせて登録するだけです。
これでビルドするとうまく言った場合は割とすぐに
こういうログが出力されていきますが、なんらかの設定が間違えていると
「Unable to laod the service index for source…」
「Package 'hoge' is not found on source…」
こういうログが出て、やたらビルドに時間がかかります。 これが出た場合はどうせ失敗するのでさっさとキャンセルしましょう。
おわりに
private nugetサーバーを立てるのに苦労したので、正直差し支えなければnuget本家に公開してしまった方が楽だと思いました(笑)
AppCenterはまだサンプルしかビルドしていないので、これからストアにアップロードできるまで活用していきたいと思います。