銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

nuget.org に公開するライブラリのビルドとpushをVSTSでやってみた

以前はAppVeyor でやっていたのですが、仕様変更で動かなくなってから何となく手動でやってしまっていたのをVSTSに移行してみました。対象はChatwork.Api です。

github.com

AppVeyorと違ってビルド結果だけをPublicに見せるという設定ができないっぽい*1ので見劣りはするんですが、せっかくなので紹介します。

まずはPrivate Nugetをホスティングするときにも入れた、Package Manager拡張をインストールしておきます。

tech.tanaka733.net

次にNugetにPushするときのApiKeyを格納するために、Servicesにエンドポイントを追加しておきます。UserNameは任意の値で構わないので、PasswordのところにApiKeyを入力して保存しておきます。

f:id:tanaka733:20151215200247j:plain

ビルドフローはこんな感じになります。

f:id:tanaka733:20151215200751j:plain

f:id:tanaka733:20151215200730j:plain

f:id:tanaka733:20151215200740j:plain

f:id:tanaka733:20151215200800j:plain

Nuget InstallerとMSBuildはslnをまとめてビルドするなら、Visual Studio Buildにまとめることができます。バージョン番号とかは上げた状態のものをコミットしておいて、手動でビルドジョブを実行するようにしています*2。Nuget packagerはnuspecを階層的に検索してパッケージングしています。このとき既定ではプロジェクトのルートディレクトリに作成されます。Nuget Publisherではルートディレクトリ直下のパッケージのみを指定しています。これは、Nugetで依存ライブラリを参照しているので、packagesフォルダの中にDLされるnupkgファイルを対象外にするためです*3

ビルドステータスを表示するバッジですが、Optionsページにオプションがあります。Show Urlを押すとURLが表示されるので、適当なところに貼っておきましょう。

f:id:tanaka733:20151215201324j:plain

まだまだAppVeyorの方が高機能な感じですが、VSTSでもできるようになりました、という紹介でした。

*1:たぶん

*2:PRつくってからmasterにマージするのを徹底すれば、自動ビルドでもいいかな

*3:対象にするとApiKeyが違うので怒られてビルドエラーになってしまう