kamulog

xamarin.formsのネタなど

App Centerでprivateなnugetサーバーを参照させる設定

App Centerのビルドでどうしてもprivateなnugetパッケージを参照させたくて調べた結果、なんとかできるようになったので忘れないように記事にしました。

リポジトリ

github.com

リポジトリ全体はほぼ関係ありませんが、Nuget.configの置き場所と内容の参考になれば…

手順

  1. 何かしらの手段でprivateなnugetパッケージを置くサーバーを用意する
    • MyGetの有料ライセンスを買う
    • VSTSのprivate feedを使う(試したけど失敗、詳しい人なら多分大丈夫)
    • VPSクラウドサービス等で自前でnuget serverを立てる
  2. ソリューション直下にNuget.configファイルを置く
  3. AppCenterで環境変数を設定する

1 nuget サーバー

読み飛ばしてOKです。

最初はMyGetでいけるだろうと思って張り切って登録したのですが、private feedは有料で断念。

その後

blog.shibayan.jp

こちらの方法で作ろうと思ったのですが、ASP.NET coreじゃないのでmacじゃどうにもならないしホスティング先に困りそうなので諦めました。

で "nuget linux"なんかで検索するとヒットした

GitHub - Daniel15/simple-nuget-server: A very simple PHP NuGet server

これのdocker-imageである

GitHub - rolfwessels/docker-simple-nuget-server: Docker file and auto building of simple-nuget-server

こっちを利用することにしました。

が、なんだかんだでそのままではうまくいかず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に合わせて登録するだけです。

f:id:kamusoft:20180205215835p:plain

これでビルドするとうまく言った場合は割とすぐに

f:id:kamusoft:20180205215859p:plain

こういうログが出力されていきますが、なんらかの設定が間違えていると

「Unable to laod the service index for source…」
「Package 'hoge' is not found on source…」

こういうログが出て、やたらビルドに時間がかかります。 これが出た場合はどうせ失敗するのでさっさとキャンセルしましょう。

おわりに

private nugetサーバーを立てるのに苦労したので、正直差し支えなければnuget本家に公開してしまった方が楽だと思いました(笑)

AppCenterはまだサンプルしかビルドしていないので、これからストアにアップロードできるまで活用していきたいと思います。