こんにちは。バックエンドエンジニアの和田です。最近インフラ周りも触り始めてきたので、今回は仕事で利用している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一覧を確認してみましょう。
無事、Pulshuka
にArtifacts
が追加されていますね。
配信したパッケージを使ってみよう
まずはパッケージを取得するフィードを設定します。再び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まで無料なのでぜひ使ってみてください。