演習 - モジュールをレジストリに発行する
あなたが勤めている玩具会社では、Bicep モジュールをレジストリに発行しています。 発行プロセスは、自分のコンピューターから手動で実行しています。 現在は発行プロセスを処理するパイプラインを作成したいと考えています。
この演習では、以下のことを行います。
- Bicep モジュール用のコンテナー レジストリを作成します。
- パイプラインに lint ステージを追加します。
- モジュールをレジストリに発行するパイプライン ステージを追加します。
- パイプラインが正常に実行されることを確認します。
- 発行されたモジュールをレジストリで確認します。
コンテナー レジストリを作成する
モジュールを発行する前に、組織で使用するレジストリを作成する必要があります。 ここでは、Azure portal を使用してレジストリを作成します。
[基本] タブで、対象のサブスクリプションと前に作成した ToyReusable リソース グループを選択します。
レジストリの名前と近くの場所を入力します。
重要
レジストリの名前は Azure 内で一意にする必要があり、英数字で 5 ~ 50 文字にする必要があります。 レジストリ名の横のチェック マークは、選択した名前が使用可能であることを示します。
[SKU] で、 [Basic] を選択します。
他の構成設定は既定値のままにします。
[Review + create](レビュー + 作成) を選択します。
"検証に成功しました" という設定の表示を確認し、[作成] を選択します。
デプロイが完了するまで待ちます。通常は 1 - 2 分かかります。
[デプロイメントに成功しました] というメッセージが表示されたら、[リソースに移動] を選択してコンテナー レジストリを開きます。
コンテナー レジストリの [概要] 領域で、[ログイン サーバー] 設定の値をメモします。 これは yourregistryname.azurecr.io のような形になります。
この値は、このあとすぐに必要になります。
モジュールのメタデータ ファイルを追加する
前のユニットでは、モジュールのバージョン管理戦略を持つことの重要性について学習しました。 また、モジュールのメタデータ ファイルを使用して、パイプライン内のモジュールのメジャー バージョン番号とマイナー バージョン番号を指定する方法についても学習しました。 ここでは、ストレージ アカウント モジュールのメタデータ ファイルを追加します。
Visual Studio Code で、リポジトリのルートにある modules/storage-account フォルダーを展開します。
metadata.json という名前の新しいファイルを作成します。
次の内容をファイルに追加します。
{ "version": { "major": 1, "minor": 2 } }
メタデータ ファイルでは、メジャー バージョン番号とマイナー バージョン番号を個別に定義していることに注意してください。 パイプラインでは、パイプラインを実行するたびに、これらの数値とパイプラインのビルド番号が組み合わされて、完全なバージョン番号が生成されます。
ファイルに加えた変更を保存します。
パイプライン定義を更新して lint ステージを追加する
リポジトリには、出発点として使用できるパイプラインのドラフトが含まれています。
modules/storage-account フォルダー内の pipeline.yml ファイルを開きます。
環境変数
ModuleRegistryServer
の値をコンテナー レジストリのサーバー名に更新します。 その名前は、この演習の前のほうでコピーしました。たとえば、レジストリのログイン サーバーが yourregistryname.azurecr.io の場合、このようになります。
- name: ModuleRegistryServer value: yourregistryname.azurecr.io
ファイルの下部にある "
# 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 番目のステージを追加できます。
spipeline.yml ファイルの下部で、Publish ステージを定義し、モジュールの 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 ファイルを解析するスクリプトを実行します。
作成したステップの下に、モジュールをレジストリに発行するステップを追加します。
- 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
引数の値が動的に生成されます。 レジストリ サーバーの値、モジュール名、バージョン番号が組み合わされます。ファイルに加えた変更を保存します。
パイプライン定義を確認してコミットする
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)
そうでない場合は、この例に一致するように更新してから保存してください。
Visual Studio Code ターミナルで次のコマンドを実行し、変更をコミットして Git リポジトリにプッシュします。
git add . git commit -m "Add lint and publish stages to storage account module pipeline" git push
プッシュした直後に、Azure Pipelines で新しいパイプライン実行が開始されます。
パイプラインの監視
ブラウザーで、[パイプライン]>[パイプライン] を選択します。
アクティブなパイプラインの実行を選択します。
パイプラインの実行が表示されます。
パイプラインの実行が終了するまで待ちます。 Bicep モジュールがコンテナー レジストリに発行されます。
パイプラインのビルド番号に注目してください。ビルド番号には、今日の日付と一意のリビジョン番号が含まれています。
レジストリ内のモジュールを確認する
発行されたモジュールは、Azure portal で表示することもできます。
ブラウザーで、Azure portal に移動します。
ToyReusable リソース グループに移動します。
前に作成したコンテナー レジストリを選択します。
メニューから [リポジトリ] ペインを選択します。 次に、パイプラインで発行されたモジュールを表す modules\storage-account リポジトリを選択します。
パイプラインで発行されたモジュールのバージョン番号と一致する "タグ"が 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 プロジェクトを削除することもできます。
サービス接続
- Azure DevOps プロジェクトから、[プロジェクト設定]>[サービス接続] の順に選択します。
- [ToyReusable] を選択します。
- 右上隅にある [その他のアクション] の 3 つのドットを選択します。
- [削除] を選択し、削除を確認します。
Azure アプリの登録
- ポータルのホーム ページから Microsoft Entra ID を検索し、サービスの一覧からそれを選択します。
- [管理]>[アプリの登録] に移動します。
- [削除されたアプリケーション] で [toy-reusable] を選択します。
- [完全に削除] を選択し、プロンプトに従います。
Azure DevOps プロジェクト
- Azure DevOps プロジェクトから、[プロジェクトの設定]>[概要] の順に選択します。
- [プロジェクトの削除] から [削除] を選択します。
- プロジェクト名を入力し、削除を確認します。