演習 - アプリケーション イメージをビルドする
このユニットでは、アプリケーション イメージをビルドして Azure Container Registry にプッシュすることによって、GitHub Actions のステージング パイプラインを作成します。
次の図は、設計した CI/CD パイプラインを示しています。
この演習では、次のステップを実行してステージング パイプラインを作成します。
- GitHub Actions ワークフローを作成します。
on push
トリガーを作成します。- アプリケーション イメージをビルドしてプッシュします。
- シークレットを設定します。
- このジョブを実行します。
GitHub Actions ワークフローを作成する
GitHub ワークフローはジョブに分割され、ジョブはステップに分割されます。 各ステップには複数のコマンドを含めることができます。また、実行する複数のアクションを使用できます。
パイプラインの構築を始めるには、GitHub Web サイトでサンプル リポジトリのフォークに移動します。
[Actions](アクション) タブを選択します。
ワークフローを自分でセットアップするためのリンクを選択します。
この時点では、パイプラインはリポジトリ内の .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.
[Edit new file]\(新しいファイルの編集\) ペインで、ファイルの名前を main.yml から build-staging.yml に変更します。
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 ]
チェックアウト ステップを構成する
次に、ジョブ ステップの作業を開始します。 このプロセスでは、ビルド タスクとデプロイ タスクの両方をパイプライン設計ダイアグラムに実装します。
jobs
で、build
キーの名前をbuild_push_image
に変更します。このワークフローを Ubuntu 20.04 で実行する場合は、
runs-on
キーをubuntu-latest
からubuntu-20.04
に変更します。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 に関するドキュメントを参照してください。
右側のパネルの [Marketplace] タブで、[docker ログイン] を検索し、docker によって発行された最初の結果を選択します。
Note
バージョン 2 より前の Docker アクションにはログイン フローが組み込まれていますが、バージョン 2 以降では、これらのアクションは分離されているため、ワークフローを正しく設定するために 2 つのアクションが必要になります。
[インストール] で、コピー アイコンを選択して、使用方法に関する YAML をコピーします。
コピーした YAML を
actions/checkout@v2
アクションの下に貼り付けます。重要
YAML を使用するときは、インデントに注意してください。
name
キーは前のuses
キーと揃える必要があります。次の値を
registry
、username
、password
の各キーに追加します。registry
:${{ secrets.ACR_NAME }}
username
:${{ secrets.ACR_LOGIN }}
password
:${{ secrets.ACR_PASSWORD }}
他のキーは、この演習では使用しないので削除します。
[Marketplace] の下の右側のパネルで、[build and push docker images] (docker イメージをビルドしてプッシュする) を検索し、docker によって発行された最初の結果を選択します。
[インストール] で、コピー アイコンを選択して、使用方法に関する YAML をコピーします。
コピーした YAML を、前にコピーした
docker-login
アクションの最後のキーの下に貼り付けます。name
キーの名前をBuild and push Docker images
からBuild and push staging images
に変更します。次の値を
context
、push
、tags
の各キーに追加します。context
:.
push
:true
tags
:${{secrets.ACR_NAME}}/contoso-website:latest
他のキーは、この演習では使用しないので削除します。
Docker が使用するビルド エンジンを設定するために、チェックアウト アクションとログイン アクションの間に
docker/setup-buildx-action
という名前の別のアクションを追加します。 次のスニペットをコピーし、checkout
とlogin
のアクションの間に貼り付けます。- 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
変更をコミットする
変更をコミットするには、右上にある [変更をコミットする] ボタンを選択します。 [変更をコミットする] 画面で、コミットの説明を入力してから、[変更をコミットする] を選択します。
[変更をコミットする] を選択すると新しいビルドがトリガーされますが、シークレットをまだ設定していないため、このビルドは失敗します。
シークレットを設定する
シークレットを設定するには、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
各シークレットを定義するには:
- [New repository secret](新しいリポジトリ シークレット) を選択します。
- [名前] で、上記の一覧にあるシークレット名を入力します。
- [シークレット] で、セットアップ スクリプトから保存した値を入力するか、Cloud Shell クエリを実行して値を取得します。
- [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"
ジョブの実行
[Actions](アクション) タブを選択します。
一覧内の唯一の実行である、失敗した build-staging.yml ジョブを選択します。
右上で、[Re-run jobs] (ジョブを再実行する)>[Re-run all jobs] (すべてのジョブを再実行する) を選択し、[Re-run all jobs] (すべてのジョブを再実行する) 画面で [Re-run jobs] (ジョブを再実行する) を選択します。
ビルドが完了したら、Cloud Shell で
az acr repository list --name <ACR_NAME> -o table
を実行し、contoso-website
Container Registry リポジトリが結果に表示されることを確認します。
次のユニットに進み、運用ワークフローを構築します。