Azure Pipelines を使用してコンテナー イメージをビルドし、レジストリにプッシュする
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
この記事では、Azure Pipelines のセットアップと構成について説明し、Docker イメージをビルドして Azure Container Registry と Docker Hub にプッシュします。 さらに、パイプライン内でのセキュリティで保護された認証に System.AccessToken
を使用する方法について詳しく説明します。
この記事では、Azure Pipelines を使用して Docker イメージをビルドして Docker Hub にプッシュするためのセットアップと構成について説明します。 さらに、パイプライン内でのセキュリティで保護された認証に System.AccessToken
を使用する方法について詳しく説明します。
Docker@2 タスクを使用して、Docker イメージをビルドしてコンテナー レジストリにプッシュするための YAML パイプラインを作成する方法を学びます。
前提条件
製品 | 要件 |
---|---|
Azure DevOps | - Azure DevOps プロジェクト。 - アクセス許可: - プロジェクト内のすべてのパイプラインへのアクセスを許可するには、プロジェクト管理者グループのメンバーである必要があります。 - サービス接続を作成するには、サービス接続の 管理者 または Creator ロールが必要です。 - セルフホステッド エージェントを使用している場合は、Docker がインストールされ、Docker エンジンが昇格された特権で実行されていることを確認します。 Microsoft がホストするエージェントには、Docker がプレインストールされています。 |
GitHub | - GitHub アカウント。 - Dockerfile を含む GitHub リポジトリ。 独自のプロジェクトがない場合は、サンプル リポジトリ を使用します。 - Azure Pipelines を承認するための GitHub サービス接続。 |
Azure | - Azure サブスクリプション。 - Azure Container Registry。 |
Docker Hub | - Docker Hub アカウント。 - Docker Hub イメージ リポジトリ。 |
- プロジェクト要件: Azure DevOps プロジェクト。
- アクセス許可:
- プロジェクト管理者 グループのメンバーになります。
- Azure DevOps プロジェクトにおけるサービス接続 のための
管理者 ロール。
- サブスクリプション:
- GitHub アカウント。 お持ちでない場合は、GitHubで無料で作成できます。
- Docker Hub アカウント: Docker Hub アカウントが必要です。 お持ちでない場合は、Docker Hubで無料で作成できます。
- リポジトリ: Dockerfile が含まれた GitHub リポジトリ。 お持ちでない場合は、サンプル リポジトリ を使用できます
- サービス接続: GitHub Enterprise Server サービス接続。 お持ちでない場合は、Azure DevOps プロジェクトの設定で作成できます。 サービス接続を作成する方法の詳細については、「サービス接続
」を参照してください。 - コンテナレジストリ: A (Docker Hub コンテナレジストリ
- ソフトウェアの要件: Docker をインストールし、セルフホステッド エージェントに対する昇格された特権で Docker エンジンを実行する必要があります。
Docker サービス接続を作成する
コンテナー イメージをレジストリにプッシュする前に、Azure DevOps でサービス接続を作成する必要があります。 このサービス接続には、コンテナー レジストリで安全に認証するために必要な資格情報が格納されます。 Azure DevOps プロジェクトの設定で
[Docker レジストリ サービス接続] で [Docker Hub] オプションを選択し、ユーザー名とパスワードを指定して Docker サービス接続を作成してください。
Docker イメージをビルドしてプッシュする YAML パイプラインを作成する
Docker@2 タスクは、Azure Pipelines 内で Docker イメージを構築、プッシュ、管理するプロセスを効率化するように設計されています。 このタスクは、ビルド、プッシュ、ログイン、ログアウト、開始、停止、実行など、さまざまな Docker コマンドをサポートしています。
Docker@2 タスクを使用してイメージをビルドしてプッシュする YAML パイプラインを作成するには、次の手順を使用します。
Azure DevOps プロジェクトに移動し、左側のメニューから Pipelines を選択します。
新しいパイプラインを選択してください。
ソース リポジトリの場所を選択します。
ソース コード 場所として GitHub を選択し、リポジトリを選択します。
- GitHub にリダイレクトされてサインインする場合は、GitHub の資格情報を入力します。
- Azure Pipelines アプリをインストールするために GitHub にリダイレクトされた場合は、[承認してインストール] を選択します。
Starter パイプライン テンプレートを選択して、基本的なパイプライン構成を作成します。
azure-pipelines.yml の内容を次のコードに置き換えます。
trigger: - main pool: vmImage: 'ubuntu-latest' variables: repositoryName: '<target repository name>' steps: - task: Docker@2 inputs: containerRegistry: '<docker connection>' repository: $(repositoryName) command: 'buildAndPush' Dockerfile: '**/Dockerfile'
パイプライン YAML ファイルを次のように編集します。
Linux と Windows のどちらのアプリをデプロイするかに基づいて、必ず、
vmImage
をそれぞれubuntu-latest
またはwindows-latest
に設定してください。セルフホステッド エージェントを使用している場合は、
vmImage
を、Docker 機能を備えたセルフホステッド エージェントを含むプールの名前に設定します。demands:
プロパティを追加して、Docker がインストールされているエージェントが選択されていることを確認できます。 次に例を示します。pool: name: <your agent pool> demands: docker
<docker connection>
を、先ほど作成した Docker サービス接続の名前に置き換えます。<target repository name>
は、イメージをプッシュするコンテナー レジストリ内のリポジトリの名前に置き換えます。 たとえば、<your-docker-hub-username>/<repository-name>
のようにします。
完了したら、[保存して実行] を選択します。
azure-pipelines.yml ファイルをリポジトリに保存すると、コミット メッセージを追加するように求められます。 メッセージを入力し、[保存して実行] を選択します。
セルフホステッド エージェントを使用する場合は、エージェントのホストに Docker がインストールされていることと、昇格された特権で Docker エンジン/デーモンが実行されていることを確認します。
イメージをビルドするには、エージェントのホストに Docker をインストールし、Docker エンジン/デーモンを管理者特権で実行する必要があります。
YAML パイプライン エディターを使用してパイプラインを作成するには、次の手順に従います。
コレクションに移動し、プロジェクトを作成します。
プロジェクト内で、[パイプライン] を選択します。
[Create Pipeline] を選択します。
ソース コードの場所として [GitHub Enterprise Server] を選択します。
まだであれば、GitHub Enterprise Server アカウントに接続する Azure Pipelines を承認します。
- [GitHub Enterprise Server に接続する] を選択します。
- アカウントの詳細を入力し、[確認して保存] を選択します。
リポジトリを選択します。 Azure Pipelines アプリをインストールするために GitHub にリダイレクトされた場合は、[承認してインストール] を選択します。
パイプラインを構成するには、[Docker イメージのビルド] テンプレートを選択します。
YAML パイプライン エディターで、YAML ファイルの内容を次のコードに置き換えます。
trigger: - main pool: name: default demands: docker variables: repositoryName: '<target repository name>' steps: - task: Docker@2 inputs: containerRegistry: '<docker connection>' repository: $(repositoryName) command: 'buildAndPush' Dockerfile: '**/Dockerfile'
パイプライン YAML ファイルを次のように編集します。
- プール名を、セルフホステッド エージェントを含むプールの名前に Docker 機能を使用して置き換えます。
<target repository name>
は、イメージをプッシュするコンテナー レジストリ内のリポジトリの名前に置き換えます。 たとえば、<your-docker-hub-username>/<repository-name>
のようにします。<docker connection>
を、先ほど作成した Docker サービス接続の名前に置き換えます。
[保存して実行] を選択します。
[保存して実行] ページで、もう一度 [保存して実行] を選択します。
パイプラインの実行を監視し、ログを表示して、Docker イメージがビルドされ、コンテナー レジストリにプッシュされていることを確認できます。
Docker@2 タスクでの認証に System.AccessToken を使用する
Azure DevOps によって提供される System.AccessToken
を使用して、コンテナー レジストリで認証できます。 このトークンを使用すると、機密性の高い資格情報を公開することなく、パイプライン内のリソースに安全にアクセスできます。
次の YAML パイプラインの例では、Docker@2 タスクを使用してコンテナー レジストリにサインインし、Docker イメージをプッシュします。 System.AccessToken
は、Docker コマンドを認証するための環境変数として設定されます。
<docker connection>
を Docker レジストリ サービスの接続名に置き換えます。
<your repository>
を Docker リポジトリの名前に置き換えます。
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
variables:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
steps:
- task: Docker@2
inputs:
command: login
containerRegistry: '<docker connection>'
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
- task: Docker@2
inputs:
command: buildAndPush
repository: '<your repository>'
dockerfile: '**/Dockerfile'
tags: |
$(Build.BuildId)
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)