演習 - モジュールをレジストリに発行する

完了

あなたが勤めている玩具会社では、Bicep モジュールをレジストリに発行しています。 発行プロセスは、自分のコンピューターから手動で実行しています。 次に、発行プロセスを処理するパイプラインを作成します。

この演習では、以下のことを行います。

  • Bicep モジュール用のコンテナー レジストリを作成します。
  • パイプラインに lint ステージを追加します。
  • モジュールをレジストリに発行するパイプライン ステージを追加します。
  • パイプラインが正常に実行されることを確認します。
  • レジストリで発行されたモジュールを確認します。

コンテナー レジストリの作成

モジュールを発行する前に、組織で使用するレジストリを作成する必要があります。 ここでは、Azure portal を使用してレジストリを作成します。

  1. ブラウザーで、 Azure portal 内に新しいコンテナー レジストリを作成します

  2. [ 基本 ] タブで、ターゲット サブスクリプションと、先ほど作成した ToyReusable リソース グループを選択します。

  3. レジストリの名前と近くの場所を入力します。

    重要

    レジストリの名前は Azure 内で一意にする必要があり、英数字で 5 ~ 50 文字にする必要があります。 レジストリ名の横のチェック マークは、選択した名前が使用可能であることを示します。

  4. SKU の場合は、[基本] を選択します。

    他の構成設定は既定値のままにします。

  5. [ 確認と作成] を選択します。

    コンテナー レジストリの作成ページを示す Azure portal のスクリーンショット。

  6. [ 検証に合格しました ] と表示された設定を確認し、[ 作成] を選択します。

    デプロイが完了するまで待ちます。通常は 1 - 2 分かかります。

  7. [デプロイに成功しました] メッセージが表示されたら、[リソースに移動] を選択してコンテナー レジストリを開きます。

    コンテナー レジストリのデプロイを示す Azure portal のスクリーンショット。リソースに移動するためのボタンが強調表示されています。

  8. コンテナー レジストリの [概要 ] 領域で、[ ログイン サーバー ] 設定の値をメモします。 yourregistryname.azurecr.io のようなものになります。

    ログイン サーバーが強調表示されているコンテナー レジストリの詳細を示す Azure portal のスクリーンショット。

    この値は、このあとすぐに必要になります。

モジュールのメタデータ ファイルを追加する

前のユニットでは、モジュールのバージョン管理戦略を持つことの重要性について学習しました。 また、モジュール メタデータ ファイルを使用して、パイプライン内のモジュールのメジャー バージョン番号とマイナー バージョン番号を指定する方法についても学習しました。 ここでは、ストレージ アカウント モジュールのメタデータ ファイルを追加します。

  1. Visual Studio Code で、リポジトリのルートにある modules/storage-account フォルダーを展開します。

  2. metadata.jsonという名前の新しいファイル を作成します

    メタデータドット JSON ファイルの場所を示す Visual Studio Code のスクリーンショット。

  3. 次の内容をファイルに追加します。

    {
      "version": {
        "major": 1,
        "minor": 2
      }
    }
    

    メタデータ ファイルでは、メジャー バージョン番号とマイナー バージョン番号を個別に定義していることに注意してください。 パイプラインでは、パイプラインが実行されるたびに、これらの数値とパイプラインのビルド番号が完全なバージョン番号に結合されます。

  4. ファイルに加えた変更を保存します。

パイプライン定義を更新し、lint ステージを追加する

リポジトリには、開始点として使用できるパイプラインのドラフトが含まれています。

  1. modules/storage-account フォルダー内のpipeline.yml ファイルを開きます。

  2. 環境変数 ModuleRegistryServer の値をコンテナー レジストリのサーバー名に更新します。 その名前は、この演習の前のほうでコピーしました。

    たとえば、レジストリのログイン サーバーが yourregistryname.azurecr.io されている場合、次のようになります。

    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    
  3. ファイルの下部にある # To be added コメントには、次の lint ステージ定義が含まれています。

    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file $(ModuleFilePath)
            name: LintBicepCode
            displayName: Run Bicep linter
    

パイプラインに発行ステージを追加する

これで、2 番目のステージを追加して、モジュールをコンテナー レジストリに発行できます。

  1. pipeline.yml ファイルの下部で発行ステージを定義し、モジュールの metadata.json ファイルからバージョン番号を読み取り、パイプライン変数として設定する手順を追加します。

    - stage: Publish
      jobs:
      - job: Publish
        steps:
          - script: |
              majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r )
              versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)"
              echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber"
            name: GetModuleVersionNumber
            displayName: Get module version number
    

    この手順では、jq コマンド ライン アプリケーションを使用して JSON ファイルを解析するスクリプトを実行します。

  2. 作成した手順の下に、モジュールをレジストリに発行する手順を追加します。

    - task: AzureCLI@2
      name: Publish
      displayName: Publish module
      inputs:
        azureSubscription: $(ServiceConnectionName)
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az bicep publish \
            --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \
            --file $(ModuleFilePath)
    

    この手順では、 --target 引数の値が動的に構築されていることに注意してください。 レジストリ サーバーの値、モジュール名、バージョン番号が組み合わされます。

  3. ファイルに加えた変更を保存します。

パイプライン定義を確認してコミットする

  1. storage_account_module.yml ファイルが次の例のようになっていることを確認します。

    trigger:
      batch: true
      branches:
        include:
        - main
      paths:
        include:
        - 'modules/storage-account/**'
    
    variables: 
    - name: ServiceConnectionName
      value: ToyReusable
    - name: ModuleName
      value: storage-account
    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    - name: ModuleFilePath
      value: modules/storage-account/main.bicep
    - name: ModuleMetadataFilePath
      value: modules/storage-account/metadata.json
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file $(ModuleFilePath)
            name: LintBicepCode
            displayName: Run Bicep linter
    
    - stage: Publish
      jobs:
      - job: Publish
        steps:
          - script: |
              majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r )
              versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)"
              echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber"
            name: GetModuleVersionNumber
            displayName: Get module version number
          - task: AzureCLI@2
            name: Publish
            displayName: Publish module
            inputs:
              azureSubscription: $(ServiceConnectionName)
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az bicep publish \
                  --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \
                  --file $(ModuleFilePath)
    

    そうでない場合は、この例に一致するように更新してから保存してください。

  2. Visual Studio Code ターミナルで次のコマンドを実行し、変更をコミットして Git リポジトリにプッシュします。

    git add .
    git commit -m "Add lint and publish stages to storage account module pipeline"
    git push
    

    プッシュした直後に、Azure Pipelines で新しいパイプライン実行が開始されます。

パイプラインの監視

  1. ブラウザーで、[ Pipelines>Pipelines] を選択します。

  2. アクティブなパイプライン実行を選択します。

  3. パイプラインの実行が表示されます。

    パイプラインの実行が終了するまで待ちます。 Bicep モジュールがコンテナー レジストリに発行されます。

  4. パイプラインのビルド番号に注意してください。これには、今日の日付と一意のリビジョン番号が含まれます。

レジストリ内のモジュールを確認する

発行されたモジュールは、Azure portal で表示することもできます。

  1. ブラウザーで、 Azure portal に移動します。

  2. ToyReusable リソース グループに移動します。

  3. 前に作成したコンテナー レジストリを選択します。

  4. メニューから [ リポジトリ ] ウィンドウを選択します。 次に、パイプラインが発行したモジュールを表す modules\storage-account リポジトリを選択します。

    コンテナー レジストリの Bicep モジュールを示す Azure portal のスクリーンショット。

    パイプラインが発行したモジュールのバージョン番号と一致する 1 つの タグがあることに注意してください。 メジャー バージョン (1) とマイナー バージョン (2) は、 metadata.json ファイルで定義したバージョン番号と一致します。 リビジョン番号 (20230407.3) は、パイプラインのビルド番号と一致します。

リソースのクリーンアップ

これで演習が完了したので、課金されないようにリソースを削除しましょう。

Visual Studio Code ターミナルで、次のコマンドを実行します。

az group delete --resource-group ToyReusable --yes --no-wait

バックグラウンドでリソース グループが削除されます。

Remove-AzResourceGroup -Name ToyReusable -Force

サービス接続と Azure DevOps プロジェクトを削除することもできます。

  • サービス接続

    1. Azure DevOps プロジェクトで、[プロジェクトの設定] >[サービス接続] を選択します。
    2. [ToyReusable] を選択します。
    3. 右上隅で、[ その他] アクションの 3 つのドットを選択します。
    4. [ 削除] を選択し、削除を確認します。
  • Azure アプリの登録

    1. ポータルのホーム ページから Microsoft Entra ID を 検索し、 サービスの一覧から選択します。
    2. [ 管理>App 登録] に移動します。
    3. [削除済みアプリケーション] で、再利用可能なおもちゃを選択します。
    4. [ 完全に削除] を選択し、画面の指示に従います。
  • Azure DevOps プロジェクト

    1. Azure DevOps プロジェクトで、[プロジェクトの設定] >[Overview] を選択します。
    2. [ プロジェクトの削除] から [削除] を選択 します
    3. プロジェクト名を入力し、削除を確認します。