Esercizio - Pubblicare un modulo in un registro
Nell'azienda di giocattoli i moduli di Bicep sono stati pubblicati in un registro. Si è eseguito manualmente il processo di pubblicazione dal proprio computer. A questo punto, si vuole creare una pipeline per gestire il processo di pubblicazione.
In questo esercizio si vedrà come:
- Creare un registro contenitori per i moduli di Bicep.
- Aggiungere una fase lint alla pipeline.
- Aggiungere una fase della pipeline per pubblicare il modulo nel registro.
- Verificare che la pipeline venga eseguita correttamente.
- Controllare il modulo pubblicato nel registro.
Creare un registro contenitori
Prima di poter pubblicare moduli, è necessario creare un registro per l'uso dell'organizzazione. In questo caso si usa il portale di Azure per creare un registro.
Nel browser creare un nuovo registro contenitori nel portale di Azure.
Nella scheda Nozioni di base selezionare la sottoscrizione di destinazione e il gruppo di risorse ToyReusable creato in precedenza.
Immettere un nome per il registro e una posizione vicina.
Importante
Il nome del registro deve essere univoco in Azure e contenere da 5 a 50 caratteri alfanumerici. Un segno di spunta accanto al nome del registro indica che il nome scelto è disponibile.
In SKU selezionare Basic.
Lasciare i valori predefiniti per le altre impostazioni di configurazione.
Selezionare Rivedi e crea.
Esaminare le impostazioni in Convalida superata e quindi selezionare Crea.
Attendere il completamento della distribuzione, che in genere richiede 1-2 minuti.
Quando viene visualizzato il messaggio Distribuzione riuscita, selezionare Vai alla risorsa per aprire il registro contenitori.
Nell'area Panoramica del registro contenitori si noti il valore dell'impostazione Server di accesso. Sarà simile a yourregistryname.azurecr.io.
Questo valore sarà necessario a breve.
Aggiungere un file di metadati del modulo
Nell'unità precedente si è appresa l'importanza di avere una strategia di controllo delle versioni per i moduli. Si è anche appreso come usare i file di metadati del modulo per specificare il numero di versione principale e secondaria del modulo all'interno di una pipeline. Si aggiunge a questo punto un file di metadati per il modulo dell'account di archiviazione.
In Visual Studio Code espandere la cartella modules/storage-account nella radice del repository.
Creare un nuovo file denominato metadata.json.
Aggiungere il seguente contenuto nel file:
{ "version": { "major": 1, "minor": 2 } }
Si noti che nel file di metadati si definiscono separatamente i numeri di versione principale e secondaria. La pipeline combina questi numeri, insieme al numero di build della pipeline, in un numero di versione completo ogni volta che viene eseguita la pipeline.
Salvare le modifiche apportate al file .
Aggiornare la definizione della pipeline e aggiungere una fase lint
Il repository contiene una bozza di una pipeline che è possibile usare come punto di partenza.
Aprire il file pipeline.yml nella cartella modules/storage-account.
Aggiornare il valore della variabile di ambiente
ModuleRegistryServer
specificando il nome del server del registro contenitori. Tale nome è stato copiato in precedenza in questo esercizio.Ad esempio se il server di accesso del registro è yourregistryname.azurecr.io, avrà un aspetto simile al seguente:
- name: ModuleRegistryServer value: yourregistryname.azurecr.io
Nella parte inferiore del file, con la definizione della fase lint seguente per il commento
# To be added
:stages: - stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file $(ModuleFilePath) name: LintBicepCode displayName: Run Bicep linter
Aggiungere una fase di pubblicazione alla pipeline
È ora possibile aggiungere una seconda fase per pubblicare il modulo nel registro contenitori.
Nella parte inferiore del file pipeline.yml definire la fase Publish e aggiungere un passaggio per leggere il numero di versione dal file metadata.json del modulo e impostarlo come variabile della pipeline.
- 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
Il passaggio esegue uno script che usa l'applicazione della riga di comando jq per analizzare il file JSON.
Sotto il passaggio creato, aggiungere un passaggio per pubblicare il modulo nel registro.
- 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)
Si noti che questo passaggio costruisce il valore dell'argomento
--target
in modo dinamico. Combina il valore del server del registro, il nome del modulo e il numero di versione.Salvare le modifiche apportate al file .
Verificare ed eseguire il commit della definizione della pipeline
Verificare che il file storage_account_module.yml sia simile all'esempio seguente:
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)
In caso contrario, aggiornarlo in modo che corrisponda a questo esempio e salvarlo.
Eseguire il commit e il push delle modifiche nel repository Git eseguendo i comandi seguenti nel terminale di Visual Studio Code:
git add . git commit -m "Add lint and publish stages to storage account module pipeline" git push
Subito dopo il push, Azure Pipelines avvia una nuova esecuzione della pipeline.
Monitorare la pipeline
Nel browser selezionare Pipelines>Pipelines.
Selezionare l'esecuzione della pipeline attiva.
Verrà visualizzata l'esecuzione della pipeline.
Attendere il completamento dell'esecuzione della pipeline. Il modulo di Bicep viene pubblicato nel registro contenitori.
Si noti il numero di compilazione della pipeline, che include la data odierna e un numero di revisione univoco.
Esaminare il modulo nel registro
È anche possibile visualizzare il modulo pubblicato nel portale di Azure.
Nel browser passare al portale di Azure.
Passare al gruppo di risorse ToyReusable.
Selezionare il registro contenitori creato in precedenza.
Seleziona il riquadro Repository dal menu. Selezionare quindi il repository modules\storage-account, che rappresenta il modulo pubblicato dalla pipeline.
Si noti che è presente un singolo tag, che corrisponde al numero di versione del modulo pubblicato dalla pipeline. La versione principale (1) e la versione secondaria (2) corrispondono ai numeri di versione definiti nel file metadata.json. Il numero di revisione (20230407.3) corrisponde al numero di build della pipeline.
Pulire le risorse
Ora che l'esercizio è stato completato, è possibile rimuovere le risorse per evitare che vengano fatturate.
Nel terminale di Visual Studio Code eseguire il comando seguente:
az group delete --resource-group ToyReusable --yes --no-wait
Il gruppo di risorse viene eliminato in background.
Remove-AzResourceGroup -Name ToyReusable -Force
È anche possibile rimuovere la connessione al servizio e il progetto Azure DevOps.
Connessione al servizio
- Dal progetto Azure DevOps, selezionare Impostazioni progetto>Connessioni al servizio.
- Selezionare ToyReusable.
- Nell'angolo superiore destro selezionare i tre puntini per Altre azioni.
- Selezionare Elimina e confermare l'eliminazione.
Registrazione dell’app Azure
- Nella home page del portale cercare Microsoft Entra ID e selezionarlo dall'elenco dei servizi.
- Passare a Gestisci>Registrazioni app.
- In Applicazioni eliminate selezionare toy-reusable.
- Selezionare Elimina in modo permanente e seguire le istruzioni.
Progetto DevOps di Azure
- Dal progetto Azure DevOps, selezionare Impostazioni progetto>Panoramica.
- In Elimina progetto selezionare Elimina.
- Immettere il nome del progetto e confermare l'eliminazione.