nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Development Technologies。

VSTSからAzure Container RegistoryにコンテナイメージをCI/CDする

本エントリーでは

  1. VSTSのGitリポジトリにDockerfileを保存し
  2. VSTSで自動ビルドしたものを
  3. Azure Container Registryへプッシュする

方法を説明します。

前提条件

  • Azure Container Registryが作成済みであること
  • VSTSのログインユーザーがAzure Container Registryへのアクセス権を所持していること*1

Azure Container Registryの作成や利用方法は、以下もご覧ください。

www.nuits.jp

VSTSへDockerfileを保存する

VSTSにプロジェクトを作成し、「Dockerfile」という名称のファイルを次のような内容で作成してください。

FROM alpine
CMD echo Hello, World!

コンテナをビルドして実行すると「Hello, World!」と表示するコンテナになります。

ビルド定義を作成する

VSTSのプロジェクトをブラウザで開き、「Build and release」から「New definition」を選択します。

f:id:nuitsjp:20180713201118p:plain

つづいて①「VSTS Git」を選び、②「Team Project」と③「Repository」を選択し、④ビルド対象のGitのブランチを選択した上で⑤「Continue」を押下します。

f:id:nuitsjp:20180713201557p:plain

ビルドテンプレートから「Docker container」を選択します。

f:id:nuitsjp:20180713201730p:plain

「Build an image」を選択し、今回はAzureのリポジトリに公開するので、「Container Registry Type」で「Azure Container Registry」を選択し、対象のAzureのSubscriptionを選択した上で、「Authorize」を押下します。なぜビルドでContainer Registryの情報を入力するかというと、すでにリリースされているイメージのタグ(バージョン)を取得するためだと思います。

f:id:nuitsjp:20180713202405p:plain

その上で、アップロードするコンテナを選びます。

f:id:nuitsjp:20180713203429p:plain

つづいて、「Push an image」タスクでも同じように、「Container Registry Type」「Azure Subscription」「Azure Container Registry」を選択します。

f:id:nuitsjp:20180713203909p:plain

これで「Tasks」の設定は完了です。つづいて「Triggers」を設定します。

ここではmasterブランチが更新されたらCI/CDするように設定します。

「Triggers」を選択し「Enable continuous integration」をチェックします。これでGitリポジトリが更新された場合の自動ビルドが有効になります。その上で、自動ビルドするブランチをフィルタリングします。今回はmasterブランチが更新された場合に自動ビルドするように設定する為、デフォルトの設定のままとします。

f:id:nuitsjp:20180713204554p:plain

「Save」すればCI/CDの設定は完了です。

f:id:nuitsjp:20180713204812p:plain

CI/CDを実行する

では実際に動かしてみましょう。

Dockerfileを更新してリモートのGitリポジトリにプッシュします。Dockerfileをつぎのように変更してプッシュましょう。

FROM alpine
CMD echo Hello, CI/CD!

VSTSのサイトを見てみましょう。つぎのように確かにビルドとContainer Registryへの配布が実行されているのが見て取れるでしょう。

f:id:nuitsjp:20180713205152p:plain

Azureポータルも確認してみましょう。確かに「hello」コンテナが登録されています。

f:id:nuitsjp:20180713205237p:plain

コンテナを取得して動かしてみる

では最後にAzure Container Registryから実際にコンテナイメージを取得して実行してみます。

コンテナからイメージをプルする方法はこちらを参考にしてください。

つぎのようにメッセージが表示され、確かにCI/CDが正しく動作していることが確認できるでしょう。

>docker run --rm hoge.azurecr.io/hello:1
Hello, CI/CD!

以上です。

*1:同一アカウントで行うか、適切に権限を付与する必要があります