演習 - クラウドネイティブ アプリをデプロイする Azure DevOps パイプラインを作成する

完了

マネージャーは、Azure Pipelines を使用するように会社の eShop アプリの CI/CD を変更することを望んでいます。 次に、製品サービスをビルドしてデプロイするための Azure DevOps パイプラインを作成します。

Azure DevOps パイプラインを作成する

Von Bedeutung

開始する前に、Azure DevOps アカウントが必要です。 お持ちでない場合は、 dev.azure.com で無料で作成できます。

  1. dev.azure.com にサインインします。
  2. [+ New project] を選択します。
  3. [プロジェクト名] に「eShop deployment」と入力します。
  4. [表示設定][プライベート] に設定したまま、[作成] を選択します。
  5. 左側で、[パイプライン] を選択し、[ パイプラインの作成] を選択 します
  6. [ 接続] ページの [ コードの場所] でGitHub を選択します。
  7. メッセージが表示されたら、GitHub にサインインし、Azure Pipelines が GitHub アカウントにアクセスすることを承認します。
  8. [ リポジトリの選択] で、フォークしたリポジトリを選択します。
  9. [ 構成 ] ページで、[ Azure Kubernetes Service にデプロイ ] オプションを選択します。
  10. [ Azure Kubernetes Service へのデプロイ ] ウィンドウで、Azure サブスクリプションを選択し、[ 続行] を選択します。
  11. メッセージが表示されたら、Azure サブスクリプションにログインします。
  12. クラスターの場合は、前のユニット aks-eshop で作成した AKS クラスターを選択します。
  13. [名前空間] では、[既存] を選択したままにし、[既定値] を選択します
  14. コンテナー レジストリの場合は、acseshop186748394 など、前のユニットで作成した Azure Container Registry を選択します。
  15. [イメージ名] に「productservice」と入力します。
  16. サービス ポートに「8080」と入力します。
  17. [Validate and configure](検証および構成) を選択します。

パイプライン YAML ファイルを確認する

Azure Pipelines では、YAML ファイルを使用して、アプリをビルドしてデプロイする手順を定義します。 YAML ファイルは GitHub リポジトリに格納され、指定した情報に基づいて自動的に作成されます。

YAML ファイルを確認してみましょう。

trigger:
- main

resources:
- repo: self

variables:

  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: '3bcbb23c-6fca-4ff0-8719-bfbdb64a89b1'
  imageRepository: 'productservice'
  containerRegistry: 'acseshop186748394.azurecr.io'
  dockerfilePath: '**/Dockerfile'
  tag: '$(Build.BuildId)'
  imagePullSecret: 'acseshop18674839414442d34-auth'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'


stages:
- stage: Build
  displayName: Build 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)

    - upload: manifests
      artifact: manifests

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build

  jobs:
  - deployment: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    environment: 'PhilStollerymod9cloudnativeexercisecode-1959.default'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              manifests: |
                $(Pipeline.Workspace)/manifests/deployment.yml
                $(Pipeline.Workspace)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

トリガーリソースのセクションでは、パイプラインを実行するタイミングを定義します。 この場合、変更がリポジトリのメイン ブランチにコミットされると、パイプラインが実行されます。

variables セクションでは、パイプラインで使用される変数を定義します。 変数は、使用する Azure Container Registry と Dockerfile を定義するために使用されます。

その後、YAML は、ubuntu 最新のエージェントを使用するビルド ジョブを定義します。 このジョブでは、Docker タスクを使用してイメージをビルドし、Azure Container Registry にプッシュします。

最後のステージは、更新された製品サービスを AKS に デプロイ することです。 このジョブでは、 KubernetesManifest タスクを使用してイメージを AKS にデプロイします。

パイプラインを実行する

[ パイプライン YAML の確認 ] ページの右上にある [ 保存して実行] を選択します。 [保存して実行] ウィンドウで、次の操作を行います。

  1. [このコミットのブランチを新規作成] を選びます。
  2. その他のオプションはすべて既定値のままにします。
  3. [保存および実行] を選択します。

パイプラインの監視とトラブルシューティング

Azure Pipelines は、Azure DevOps ポータルから監視および管理されます。 作成したパイプラインの実行の出力を見てみましょう。

Azure Pipeline の状態を示すスクリーンショット。

概要ページには、実行中のパイプラインのすべてのステージが表示されます。 ステージを選択すると、手順の詳細を表示できます。 しばらくすると、パイプラインが失敗したことがわかります。 ビルド ステージを選択します。

失敗したパイプライン内のビルド ステージのスクリーンショット。

ビルド ステージでは、ビルドが失敗したことがわかります。 [ビルド] を選択 し、Azure Container Registry ステップにイメージをプッシュ します。 ログ ファイルのエラーは次のとおりです。

##[error]Unhandled: No Dockerfile matching  /home/vsts/work/1/s/**/Dockerfile  was found.

エラーを修正する

DevOps で、パイプラインの概要ページに戻ります。 作成したパイプラインを編集してエラーを修正します。

  1. 右上の [ その他のアクション ] メニューを選択し、[ パイプラインの編集] を選択します。

  2. YAML ファイルの 17 行目では、使用する Dockerfile が定義されています。既定では、パイプラインはリポジトリのルートに Dockerfile という名前のファイルがあることを想定しています。

    eShop は、 DockerfileProducts という名前の製品サービスに別の Docker ファイルを使用します。 次のように行 17 を編集します。

      dockerfilePath: '**/DockerfileProducts.acr'
    
  3. 保存 を選択します。

  4. [保存] ウィンドウで、[保存] を選択します。

  5. [ 実行 ] を選択し、[ パイプラインの実行 ] ウィンドウで [ 実行] を選択します。

    ビルド ステージの完了を確認します。 Deploy ステージは、選択して実行を許可するまで一時停止します。

    完了したパイプラインを示すスクリーンショット。

    パイプラインが正常に完了しました。 [デプロイ] ステージを選択して、手順を表示します。

    デプロイ ステージと正常に完了した手順を示すスクリーンショット。