演習 - アプリケーション イメージをビルドする

完了

このユニットでは、アプリケーション イメージをビルドして Azure Container Registry にプッシュすることによって、GitHub Actions のステージング パイプラインを作成します。

次の図は、設計した CI/CD パイプラインを示しています。

Diagram that shows the procession from triggers, through three build steps, to the deploy steps in a pipeline.

この演習では、次のステップを実行してステージング パイプラインを作成します。

  • GitHub Actions ワークフローを作成します。
  • on push トリガーを作成します。
  • アプリケーション イメージをビルドしてプッシュします。
  • シークレットを設定します。
  • このジョブを実行します。

GitHub Actions ワークフローを作成する

GitHub ワークフローはジョブに分割され、ジョブはステップに分割されます。 各ステップには複数のコマンドを含めることができます。また、実行する複数のアクションを使用できます。

パイプラインの構築を始めるには、GitHub Web サイトでサンプル リポジトリのフォークに移動します。

  1. [Actions](アクション) タブを選択します。

  2. ワークフローを自分でセットアップするためのリンクを選択します。

    Screenshot that shows the Get started with GitHub Actions page on the GitHub website.

    この時点では、パイプラインはリポジトリ内の .github/workflows ディレクトリにある空のファイルにすぎません。 GitHub によって、ほとんどのパイプラインを構築するために必要なビルド済みのコンポーネントが提供されます。 作業を開始するには、次のコードをコピーして、[新しいファイルの編集] ウィンドウに貼り付けます。

    # This is a basic workflow to help you get started with Actions
    
    name: CI
    
    # Controls when the action will run. Triggers the workflow on push or pull request
    # events but only for the main branch
    on:
      push:
        branches: [ main ]
      pull_request:
        branches: [ main ]
    
    # A workflow run is made up of one or more jobs that can run sequentially or in parallel
    jobs:
      # This workflow contains a single job called "build"
      build:
        # The type of runner that the job will run on
        runs-on: ubuntu-latest
    
        # Steps represent a sequence of tasks that will be executed as part of the job
        steps:
          # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it
          - uses: actions/checkout@v2
    
          # Runs a single command using the runners shell
          - name: Run a one-line script
            run: echo Hello, world!
    
          # Runs a set of commands using the runners shell
          - name: Run a multi-line script
            run: |
              echo Add other actions to build,
              echo test, and deploy your project.
    
  3. [Edit new file]\(新しいファイルの編集\) ペインで、ファイルの名前を main.yml から build-staging.yml に変更します。

    Screenshot that shows an example file being edited in the Edit new file pane on the GitHub website.

  4. name キーを CI から Build and push the latest build to staging に変更します。

    # This is a basic workflow to help you get started with Actions
    
    name: Build and push the latest build to staging
    

'オン' トリガーを変更する

基本的なワークフロー テンプレートには、次の 2 つのトリガーが付属しています。

  • メイン ブランチへのすべてのプッシュ。
  • メイン ブランチでのすべての pull request。

プル要求でパイプラインを実行する必要はないため、on キーのトリガーを変更して、プッシュ トリガーのみを保持するように変更します。 2 番目のトリガーを削除し、push タグだけにします。

name: Build and push the latest build to staging

on:
  push:
    branches: [ main ]

チェックアウト ステップを構成する

次に、ジョブ ステップの作業を開始します。 このプロセスでは、ビルド タスクとデプロイ タスクの両方をパイプライン設計ダイアグラムに実装します。

  1. jobs で、build キーの名前を build_push_image に変更します。

  2. このワークフローを Ubuntu 20.04 で実行する場合は、runs-on キーを ubuntu-latest から ubuntu-20.04 に変更します。

  3. steps キーで、最後の 2 つのコマンドを削除します。これらは、テンプレートの例にすぎません。

    コメントを除いたファイルは、次の例のようになります。

    name: Build and push the latest build to staging
    
    on:
      push:
        branches: [ main ]
    
    jobs:
      build_push_image:
        runs-on: ubuntu-20.04
    
        steps:
          - uses: actions/checkout@v2
    

これで、checkout アクションを使用するステップが準備できました。 このアクションにより、リポジトリがジョブ環境にクローンされます。 このステップは、パイプライン設計ダイアグラムの最初のアクションである「リポジトリをクローンする」に相当します。

Docker ステップを追加する

次に、Docker イメージをビルドするためのアクションを追加します。 これらのアクションの使用方法を調整できます。 この例では、使用可能ないくつかのパラメータのみを使用します。 詳細については、GitHub の build-push-action に関するドキュメントを参照してください。

  1. 右側のパネルの [Marketplace] タブで、[docker ログイン] を検索し、docker によって発行された最初の結果を選択します。

    Screenshot showing the search results listing Docker Login.

    Note

    バージョン 2 より前の Docker アクションにはログイン フローが組み込まれていますが、バージョン 2 以降では、これらのアクションは分離されているため、ワークフローを正しく設定するために 2 つのアクションが必要になります。

  2. [インストール] で、コピー アイコンを選択して、使用方法に関する YAML をコピーします。

    Screenshot showing the copy function and selecting the Docker Login task.

  3. コピーした YAML を actions/checkout@v2 アクションの下に貼り付けます。

    重要

    YAML を使用するときは、インデントに注意してください。 name キーは前の uses キーと揃える必要があります。

  4. 次の値を registryusernamepassword の各キーに追加します。

    • registry: ${{ secrets.ACR_NAME }}
    • username: ${{ secrets.ACR_LOGIN }}
    • password: ${{ secrets.ACR_PASSWORD }}
  5. 他のキーは、この演習では使用しないので削除します。

  6. [Marketplace] の下の右側のパネルで、[build and push docker images] (docker イメージをビルドしてプッシュする) を検索し、docker によって発行された最初の結果を選択します。

    Screenshot that shows the search results that list Build and push Docker images.

  7. [インストール] で、コピー アイコンを選択して、使用方法に関する YAML をコピーします。

  8. コピーした YAML を、前にコピーした docker-login アクションの最後のキーの下に貼り付けます。

  9. name キーの名前を Build and push Docker images から Build and push staging images に変更します。

  10. 次の値を contextpushtags の各キーに追加します。

    • context: .
    • push: true
    • tags: ${{secrets.ACR_NAME}}/contoso-website:latest
  11. 他のキーは、この演習では使用しないので削除します。

  12. Docker が使用するビルド エンジンを設定するために、チェックアウト アクションとログイン アクションの間に docker/setup-buildx-action という名前の別のアクションを追加します。 次のスニペットをコピーし、checkoutlogin のアクションの間に貼り付けます。

    - name: Set up Buildx
      uses: docker/setup-buildx-action@v3.0.0
    

    コメントを除いた最終的なファイルは、次の例のようになります。

    name: Build and push the latest build to staging
    
    on:
      push:
        branches: [ main ]
    
    jobs:
      build_push_image:
        runs-on: ubuntu-20.04
    
        steps:
          - uses: actions/checkout@v2
    
          - name: Set up Buildx
            uses: docker/setup-buildx-action@v3.0.0
    
          - name: Docker Login
            uses: docker/login-action@v3.0.0
            with:
              registry: ${{ secrets.ACR_NAME }}
              username: ${{ secrets.ACR_LOGIN }}
              password: ${{ secrets.ACR_PASSWORD }}
    
          - name: Build and push staging images
            uses: docker/build-push-action@v5.0.0
            with:
              context: .
              push: true
              tags: ${{secrets.ACR_NAME}}/contoso-website:latest
    

変更をコミットする

変更をコミットするには、右上にある [変更をコミットする] ボタンを選択します。 [変更をコミットする] 画面で、コミットの説明を入力してから、[変更をコミットする] を選択します。

Screenshot that shows the Commit changes button in the Commit changes pane.

[変更をコミットする] を選択すると新しいビルドがトリガーされますが、シークレットをまだ設定していないため、このビルドは失敗します。

シークレットを設定する

シークレットを設定するには、GitHub リポジトリ ページで、[設定] タブを選択してから、左側のメニューで [Secrets and variables] (シークレットと変数)>[アクション] を選択します。 ワークフローで使用する以下のシークレットを定義します。

  • ACR_NAME:セットアップ スクリプトによって返される ACR_Name
  • ACR_LOGIN:セットアップ スクリプトによって返される ACR Login Username
  • ACR_PASSWORD:セットアップ スクリプトによって返される ACR Login Password
  • RESOURCE_GROUP:セットアップ スクリプトによって返される Resource Group Name
  • CLUSTER_NAME: contoso-video

各シークレットを定義するには:

  1. [New repository secret](新しいリポジトリ シークレット) を選択します。
  2. [名前] で、上記の一覧にあるシークレット名を入力します。
  3. [シークレット] で、セットアップ スクリプトから保存した値を入力するか、Cloud Shell クエリを実行して値を取得します。
  4. [Add secret](シークレットの追加) を選択します。

オプションのクエリを実行してシークレットの値を取得する

セットアップ スクリプトから返された値がない場合は、Azure Cloud Shell で次のコマンドを実行して、情報を取得できます。

  • ACR_NAME:

    az acr list --query "[?contains(resourceGroup, 'mslearn-gh-pipelines')].loginServer" -o table
    
  • ACR_LOGIN:

    az acr credential show --name <ACR_NAME> --query "username" -o table
    
  • ACR_PASSWORD:

    az acr credential show --name <ACR_NAME> --query "passwords[0].value" -o table
    
  • RESOURCE_GROUP:

    az aks list -o tsv --query "[?name=='contoso-video'].resourceGroup"
    

ジョブの実行

  1. [Actions](アクション) タブを選択します。

  2. 一覧内の唯一の実行である、失敗した build-staging.yml ジョブを選択します。

  3. 右上で、[Re-run jobs] (ジョブを再実行する)>[Re-run all jobs] (すべてのジョブを再実行する) を選択し、[Re-run all jobs] (すべてのジョブを再実行する) 画面で [Re-run jobs] (ジョブを再実行する) を選択します。

    Screenshot that shows the Re-run jobs and Re-run all jobs buttons.

  4. ビルドが完了したら、Cloud Shellaz acr repository list --name <ACR_NAME> -o table を実行し、contoso-website Container Registry リポジトリが結果に表示されることを確認します。

次のユニットに進み、運用ワークフローを構築します。