次の方法で共有


Azure Pipelines を使用してコンテナー イメージをビルドし、レジストリにプッシュする

Azure DevOps Services

この記事では、Azure Container Registry または Docker Hub に Docker イメージをビルドしてプッシュするためのパイプラインの作成について説明します。

前提条件

製品 要件
Azure DevOps - Azure DevOps プロジェクト
- アクセス許可:
    - プロジェクト内のすべてのパイプラインへのアクセスを許可するには、プロジェクト管理者グループのメンバーである必要があります。
    - サービス接続を作成するには、サービス接続に対する管理者または作成者ロールが必要です。
- セルフホステッド エージェントを使用している場合は、Docker がインストールされ、Docker エンジンが昇格された特権で実行されていることを確認します。 Microsoft がホストするエージェントには、Docker がプレインストールされています。
GitHub - GitHub アカウント。
- Dockerfile を含む GitHub リポジトリ。 独自のプロジェクトがない場合は、サンプル リポジトリを使用します。
- Azure Pipelines を承認するための GitHub サービス接続
Azure - Azure サブスクリプション
- Azure Container Registry
製品 要件
Azure DevOps - Azure DevOps プロジェクト
- アクセス許可:
    - プロジェクト内のすべてのパイプラインへのアクセスを許可するには、プロジェクト管理者グループのメンバーである必要があります。
    - サービス接続を作成するには、サービス接続に対する管理者または作成者ロールが必要です。
- セルフホステッド エージェントを使用している場合は、Docker がインストールされ、Docker エンジンが昇格された特権で実行されていることを確認します。 Microsoft がホストするエージェントには、Docker がプレインストールされています。
GitHub - GitHub アカウント。
- Dockerfile を含む GitHub リポジトリ。 独自のプロジェクトがない場合は、サンプル リポジトリを使用します。
- Azure Pipelines を承認するための GitHub サービス接続
Docker Hub - Docker Hub アカウント。
- Docker Hub イメージ リポジトリ。

Docker レジストリ サービス接続を作成する

コンテナー イメージをレジストリにプッシュする前に、Azure DevOps でサービス接続を作成する必要があります。 このサービス接続には、コンテナー レジストリで安全に認証するために必要な資格情報が格納されます。 詳細については、Docker レジストリ サービス接続に関する記事を参照してください。

  1. Azure DevOps プロジェクトで、[サービス接続][プロジェクト設定] 選択します。

    プロジェクト設定の選択のスクリーンショット。

  2. [新しいサービス接続][Docker レジストリ] を選択します。

    Docker レジストリの選択のスクリーンショット。

  3. Docker Hub 選択し、次の情報を入力します。

    フィールド 説明
    Docker ID Docker ID を入力します。
    Docker パスワード Docker パスワードを入力します。
    サービス接続名 サービス接続の名前を入力します。
    すべてのパイプラインにアクセス許可を付与する すべてのパイプラインへのアクセスを許可するには、このオプションを選択します。

    Docker Hub サービス接続ダイアログのスクリーンショット。

  4. を選択し、確認して保存します

Docker イメージをビルドしてプッシュするパイプラインを作成する

Docker@2 タスクは、イメージをビルドしてコンテナー レジストリにプッシュするために使用されます。 Docker@2 タスクは、Azure Pipelines 内で Docker イメージを構築、プッシュ、管理するプロセスを効率化するように設計されています。 このタスクは、ビルド、プッシュ、ログイン、ログアウト、開始、停止、実行など、さまざまな Docker コマンドをサポートしています。

Docker@2 タスクを使用してイメージをビルドおよびプッシュする YAML パイプラインを作成するには、次の手順を実行します。

  1. Azure DevOps プロジェクトで、Pipelines を選択し、新しいパイプラインを作成します。

  2. ソース コードの場所として GitHub を選択し、リポジトリを選択します。

    • サインインするために GitHub にリダイレクトされた場合は、GitHub の資格情報を入力します。
    • Azure Pipelines アプリをインストールするために GitHub にリダイレクトされた場合は、[承認してインストール] を選択します。
  3. リポジトリを選択します。

  4. Starter パイプライン テンプレートを選択して、基本的なパイプライン構成を作成します。

  5. azure-pipelines.yml の内容を次のコードに置き換えます。

    
    trigger:
    - main
    
    pool:
      vmImage: 'ubuntu-latest' 
    
    variables:
      repositoryName: '<target repository name>' 
    
    steps:
    - task: Docker@2
      inputs:
        containerRegistry: '<docker registry service connection>'
        repository: $(repositoryName)
        command: 'buildAndPush'
        Dockerfile: '**/Dockerfile'
    
    
  6. パイプライン YAML ファイルを次のように編集します。

    • <target repository name>は、イメージをプッシュするコンテナー レジストリ内のリポジトリの名前に置き換えます。
    • <docker registry service connection> を、先ほど作成した Docker レジストリ サービス接続の名前に置き換えます。
  7. 完了したら、[保存して実行]>[保存して実行] を選択します。

  8. ジョブ を選択してログを表示し、パイプラインが正常に実行されたことを確認します。

  1. Azure DevOps プロジェクトに移動し、左側のメニューから [パイプライン] を選択します。

  2. 新しいパイプラインを選択してください。

  3. ソース コードの場所として GitHub を選択し、リポジトリを選択します。

    • サインインするために GitHub にリダイレクトされた場合は、GitHub の資格情報を入力します。
    • Azure Pipelines アプリをインストールするために GitHub にリダイレクトされた場合は、[承認してインストール] を選択します。
  4. Docker - Build を選択し、Azure Container Registry テンプレートにイメージをプッシュします。

  5. Azure サブスクリプションを選択し、[続行] を選択します。

  6. コンテナー レジストリを選択し、次に 検証と構成を選択します。

    YAML パイプラインの例:

    # Docker
    # Build and push an image to Azure Container Registry
    # https://docs.microsoft.com/azure/devops/pipelines/languages/docker
    
    trigger:
    - main
    
    resources:
    - repo: self
    
    variables:
      # Container registry service connection established during pipeline creation
      dockerRegistryServiceConnection: '7f9dc28e-5551-43ee-891f-33bf61a995de'
      imageRepository: 'usernamepipelinesjavascriptdocker'
      containerRegistry: 'repoistoryname.azurecr.io'
      dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile'
      tag: '$(Build.BuildId)'
    
      # Agent VM image name
      vmImageName: 'ubuntu-latest'
    
    stages:
    - stage: Build
      displayName: Build and push stage
      jobs:
      - job: Build
        displayName: Build
        pool:
          vmImage: $(vmImageName)
        steps:
        - task: Docker@2
          displayName: Build and push an image to container registry
          inputs:
            command: buildAndPush
            repository: $(imageRepository)
            dockerfile: $(dockerfilePath)
            containerRegistry: $(dockerRegistryServiceConnection)
            tags: |
              $(tag)
    
    
  7. を選択して「保存して実行」をし、 を実行し、再度 を選択して「保存して実行」し、 をもう一度実行します。

  8. ジョブ を選択してログを表示し、パイプラインが正常に実行されたことを確認します。

Docker テンプレートは、Azure Container Registry へのサービス接続を作成し、Docker@2 タスクを使用して Docker イメージをビルドし、レジストリにプッシュします。

Docker@2 タスクは、Azure Pipelines 内で Docker イメージを構築、プッシュ、管理するプロセスを効率化するように設計されています。 このタスクは、ビルド、プッシュ、ログイン、ログアウト、開始、停止、実行など、さまざまな Docker コマンドをサポートしています。

セルフホステッド エージェントを使用する場合は、エージェントのホストに Docker がインストールされていることと、昇格された特権で Docker エンジン/デーモンが実行されていることを確認します。