演習 - モジュールをレジストリに発行する
あなたが勤めている玩具会社では、Bicep モジュールをレジストリに発行しています。 発行プロセスは、自分のコンピューターから手動で実行しています。 次に、発行プロセスを処理するパイプラインを作成します。
この演習では、以下のことを行います。
- Bicep モジュール用のコンテナー レジストリを作成します。
- パイプラインに lint ステージを追加します。
- モジュールをレジストリに発行するパイプライン ステージを追加します。
- パイプラインが正常に実行されることを確認します。
- レジストリで発行されたモジュールを確認します。
コンテナー レジストリの作成
モジュールを発行する前に、組織で使用するレジストリを作成する必要があります。 ここでは、Azure portal を使用してレジストリを作成します。
ブラウザーで、 Azure portal 内に新しいコンテナー レジストリを作成します。
[ 基本 ] タブで、ターゲット サブスクリプションと、先ほど作成した ToyReusable リソース グループを選択します。
レジストリの名前と近くの場所を入力します。
重要
レジストリの名前は Azure 内で一意にする必要があり、英数字で 5 ~ 50 文字にする必要があります。 レジストリ名の横のチェック マークは、選択した名前が使用可能であることを示します。
SKU の場合は、[基本] を選択します。
他の構成設定は既定値のままにします。
[ 確認と作成] を選択します。
[ 検証に合格しました ] と表示された設定を確認し、[ 作成] を選択します。
デプロイが完了するまで待ちます。通常は 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 番目のステージを追加して、モジュールをコンテナー レジストリに発行できます。
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 ファイルを解析するスクリプトを実行します。
作成した手順の下に、モジュールをレジストリに発行する手順を追加します。
- 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 で新しいパイプライン実行が開始されます。
パイプラインの監視
ブラウザーで、[ Pipelines>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 を 検索し、 サービスの一覧から選択します。
- [ 管理>App 登録] に移動します。
- [削除済みアプリケーション] で、再利用可能なおもちゃを選択します。
- [ 完全に削除] を選択し、画面の指示に従います。
Azure DevOps プロジェクト
- Azure DevOps プロジェクトで、[プロジェクトの設定] >[Overview] を選択します。
- [ プロジェクトの削除] から [削除] を選択 します。
- プロジェクト名を入力し、削除を確認します。