プライベートなNuGetパッケージはAzure Artifactsで配信しよう。
2020-02-19
azblob://2022/11/11/eyecatch/2020-02-19-getting-started-azure-artifacts-000-e1582095314790.png

こんにちは。バックエンドエンジニアの和田です。最近インフラ周りも触り始めてきたので、今回は仕事で利用しているAzure Artifactsという便利サービスについてご紹介します。

Azure Artifactsって?

プロジェクトにクラウドでホストされた容量無制限のプライベート Git リポジトリを実現します

Azure Artifacts | Microsoft Azure

Azure DevOpsが提供しているサービスの一つで、NuGetやnpmなど著名なパッケージマネージャのフィード(パッケージを配信するサーバー)を簡単に作成し、公開することができます。nuget.orgで配信されているようなサードパーティ製だけではなく、チーム内のみで使う自家製ライブラリもパッケージマネージャで管理したい時に便利です。

フィードを作ってみよう

Azure DevOpsのメニューに並ぶアイコンのうち、ピンクのアイコンをクリックするとArtifactsのページが表示されます。Create Feedをクリックしてください。

するとこんな画面が出てきました。名前を入力後、公開したい範囲とUpstream sourcesを設定するかどうかを選択します。Upstream sourcesというのは、Artifactsのフィード経由でnuget.orgなどのパブリックフィードで配信されているパッケージを取得できる機能です。

Upstream sourcesで取得したパッケージはArtifactsのフィードにキャッシュされ、取得できるバージョンのコントロールもできるようになります。ソリューション全体でパッケージのバージョンを管理しやすくなったり、突然利用しているパッケージがnuget.orgから削除されてしまった時のために設定するのがオススメです。

全ての設定が終わったら、いよいよCreateをクリックしてフィードを作成しちゃいましょう。今回はPulshukaという名前のフィードを作りました。ちなみに、Artifactsでは作成時にパッケージマネージャを選択する必要はありません。対応しているパッケージマネージャならそれぞれの方法でアップロードすることでいい感じに配信してくれます。

NuGetパッケージを作ってみよう

Visual StudioでNuGetパッケージを作成していきます。npmなど他のパッケージマネージャを使う場合はそれぞれの手順に従って作成してください。「新しいプロジェクトの作成」をクリックして、「クラス ライブラリ」を選択しましょう。

パッケージに含めるクラスはこんな感じで作りました。

using System;

namespace Artifacts
{
    public class Artifact
    {
        public Artifact()
        {
            Console.WriteLine("Sparagmos");
        }
    }
}

コンストラクタを呼んだらSparagmosって叫ぶだけのシンプルなコードですね。

クラスができたら次はパッケージの設定をしましょう。プロジェクトのプロパティを開いて、パッケージタブを選択してください。

ここでパッケージの名前やバージョン番号などを設定することができます。NuGetはセマンティックバージョニング 2.0を採用しているので、これに従ってバージョン番号を付けるのが良いと思います。

さて、このままだとコード中に次のようなXMLコメントを記述してもパッケージに含まれないため読むことができません。

/// <summary>
/// これであんなことやこんなことをします。
/// </summary>
public Artifact()
{

XMLコメントをパッケージに含めたい場合には、ビルドタブで「XML ドキュメント ファイル(X)」のチェックを入れてください。

あとはリリース構成でビルドを行えば完了です。

作成したパッケージをArtifactsのフィードで配信しよう

前のステップでビルドした成果物(nupkgファイル)があるディレクトリでPowerShellを開きましょう。Visual Studioのデフォルトだと[Project Dir]/bin/Release/に出力されるはずです。

Azure CLIでログインしていない場合は、ログインします。

az login

Artifactsのページに戻り、Connect to Feedをクリックしてください。ここにフィードへの接続方法がいろいろ書いてあります。今回はdotnetコマンドでアップロードするので、dotnetを開きましょう。

Publish packagesのコマンドをPowerShellにコピペして、<package-path>をビルドした成果物に書き換え、実行します。もし認証がうまくいかないようであれば、--interactiveオプションを付けると上手くいくかもしれません。

成功したら、ArtifactsのフィードでPackage一覧を確認してみましょう。

無事、PulshukaArtifactsが追加されていますね。

配信したパッケージを使ってみよう

まずはパッケージを取得するフィードを設定します。再びConnect to Feedを開いて、Project setupの内容をコピーし、使用するプロジェクトの.csproj.slnファイルと同じ、またはそれより上の階層にnuget.configという名前で配置します。ソース管理に含めちゃうと楽でいいと思います。

Visual Studioを使うのであれば、IDE側で設定してもよいです。

あとは一般的なNuGetパッケージと一緒です。インストールして使うことができます。

using Artifacts;

namespace Bondrewd
{
    class Program
    {
        static void Main(string[] args)
        {
            var light = new Artifact();
        }
    }
}

無事にスパラグモスを受け取ることができました。実に素晴らしいです。

おわりに

もちろんCI/CDパイプラインの中に組み込んで、マージしたらAzure Pipelinesが自動でビルドしてテストしてフィードにPushみたいなことも簡単にできます。自動化についてはまた後日余裕ができたら書きたいですね。

とにかく簡単で便利なAzure Artifactsは、2GBまで無料なのでぜひ使ってみてください。

参考リンク

Azure Artifacts | Microsoft Azure