Universal Package
Azure ArtifactsはAzure DevOpsの一部で、ビルドに必要なパッケージや生成物を管理することができます。Azure ArtifactsはMaven、npm、NuGetといったメジャーなパッケージマネージャーに対応していますが、それ以外のファイルを管理するにはどうしたらいいでしょうか。
Universal Packageはどんなファイルでも、1つにまとめて名前とバージョンをつけて保存できるパッケージ管理システムです。
大きなファイルでも効率的に転送できるよう設計されているので、ソースコードだけでなく、テストデータや学習データのようなgitで管理するには不向きなものを置いておく場所に使えそうです。
Universal Packageは現在、パブリックプレビューです。
フィードを作成
Azure DevOpsのプロジェクトページから「Artifacts」→「New feed」で任意の名前を入れてフィードを作成します。
VSTS CLIをインストール
https://docs.microsoft.com/en-us/cli/vsts/install?view=vsts-cli-latest
上のURLの通り、VSTS CLIをインストールします。
Windowsの場合、vsts-cli-0.1.4.msiをダウンロードしてインストールします。
VSTSの認証
Personal access token (PAT)を作成
https://docs.microsoft.com/ja-jp/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azdevops
自分のプロフィール→「Security」→「Personal access tokens」→「New Token」でtokenを作成。tokenをメモしておきます。
CLIでログイン
> vsts login --token xxxxxxxxxx
先ほど取得したtokenを指定します。
Publish
パッケージしたいディレクトリに移動して、コマンドを実行します。
{myorg}
は、自分のOrganizationに置き換えてください。
> vsts package universal publish `
--instance "https://dev.azure.com/{myorg}" `
--feed "testfeed" `
--name "my-package" `
--version "1.0.0" `
--description "My description" `
--path .
フィード名、パッケージ名、バージョンを指定します。オプションで説明をつけることもできます。
Download
パッケージをダウンロードしたいディレクトリに移動して、コマンドを実行します。
vsts package universal download `
--instance "https://dev.azure.com/{myorg}" `
--feed "testfeed" `
--name "my-package" `
--version "1.0.0" `
--path .
更新
publishコマンドをそのままもう一度実行すると、すでにそのバージョンがあると怒られます。フィードから削除したとしても、履歴は残っていて、一度公開したバージョンを変更することはできません。
バージョン番号を変えて、Publishします。
> vsts package universal publish `
--instance "https://dev.azure.com/{myorg}" `
--feed "testfeed" `
--name "my-package" `
--version "1.0.1" `
--description "My description" `
--path .
まとめ
VSTSのUniversal Packageのコマンドはpublish
とdownload
の2つだけです。
例えば、既にローカルにダウンロードしたバージョンが何なのかを調べる方法はありません。
Azure CLIの使用について
Universal Packageの操作には、Azure CLIを使うこともできるはずです。
最初は、こちらの手順に沿って、Azure CLIを使ってやってみていたのですが、
az artifacts uinversal publish
コマンドを実行しても、
Encountered an unexpected error.
Microsoft.VisualStudio.Services.Common.VssServiceException: TF400813: The user '#####################' is not authorized to access this resource.
というエラーが出て失敗しました。認証の問題だと思いますが、よく分からなかったので、今回はVSTS CLIの方を使ってみました。