Esercizio - Proteggere il ramo principale
Il team sta lavorando a un modello Bicep che contiene già un sito Web e un database. Sono stati distribuiti i componenti nell'ambiente di produzione. È ora necessario aggiornare il modello Bicep per aggiungere la coda di elaborazione degli ordini.
In questo esercizio si creerà un ramo di funzionalità per la modifica. È anche possibile proteggere il ramo principale e consentire l'unione delle modifiche al ramo principale solo dopo che sono state esaminate. Prima è però necessario assicurarsi che l'ambiente sia configurato per completare il resto di questo modulo.
Durante il processo, si eseguiranno queste operazioni:
- Configurare un repository GitHub per questo modulo.
- Clonare il repository nel computer.
- Aggiungere la protezione del ramo al ramo principale del repository.
- Creare un ramo di funzionalità locale per la modifica.
- Provare a unire il ramo di funzionalità in quello principale.
- Configurare un progetto Azure DevOps per questo modulo.
- Clonare il repository del progetto nel computer.
- Aggiungere i criteri del ramo al ramo principale del repository.
- Creare un ramo di funzionalità locale per la modifica.
- Provare a unire il ramo di funzionalità in quello principale.
Ottenere il repository GitHub
In questa sezione ci si assicurerà che il repository GitHub sia configurato per completare il resto del modulo. Per configurarlo, creare un nuovo repository basato su un repository di modelli. Il repository di modelli contiene i file necessari per iniziare con questo modulo.
Iniziare dal repository dei modelli
Eseguire un modello che configura il repository GitHub.
Nel sito GitHub seguire questa procedura per creare un repository dal modello:
Selezionare Usa questo modello>Crea un nuovo repository.
Immettere un nome per il nuovo progetto, ad esempio toy-website-review.
Selezionare l'opzione Public (Pubblico).
Quando si creano repository personalizzati, è possibile renderli privati. In questo modulo si useranno funzionalità di GitHub che funzionano solo con repository pubblici e con account GitHub Enterprise.
Selezionare Create repository from template (Crea repository da modello).
Ottenere il progetto Azure DevOps
In questa sezione, ci si assicura che l'organizzazione Azure DevOps sia pronta per completare il resto del modulo. Per la configurazione, eseguire un modello per la creazione di un progetto in Azure DevOps.
Nel sito Demo Generator di Azure DevOps seguire questa procedura:
Selezionare Accedi e accettare le condizioni d’uso.
Nella pagina Crea nuovo progetto selezionare l'organizzazione Azure DevOps. Immettere quindi un nome del progetto, ad esempio toy-website-review.
Selezionare Crea progetto.
L'esecuzione del modello richiede qualche secondo. Così facendo si crea automaticamente una pipeline e un file Bicep che verranno usati negli esercizi successivi.
Selezionare Passa al progetto per passare al progetto in Azure DevOps.
Clonare il repository
Ora si dispone di una copia del repository di modelli nel proprio account. Clonare questo repository in locale in modo da poter iniziare a usarlo.
Selezionare Codice, quindi selezionare l'icona di copia.
Aprire Visual Studio Code.
Aprire una finestra del terminale di Visual Studio Code selezionando Terminale>Nuovo terminale. La finestra si apre in genere nella parte inferiore della schermata.
Nel terminale passare alla directory nel computer locale, in cui si vuole clonare il repository GitHub. Ad esempio, per clonare il repository nella cartella toy-website-review, eseguire il comando seguente:
cd toy-website-review
Digitare
git clone
e incollare l'URL copiato in precedenza e quindi eseguire il comando. Il comando è simile al seguente:git clone https://github.com/mygithubuser/toy-website-review.git
Riaprire Visual Studio Code nella cartella del repository eseguendo il comando seguente nel terminale di Visual Studio Code:
code -r toy-website-review
Ora nell'account è presente un progetto. Clonare questo repository in locale in modo da poter iniziare a usarlo.
Selezionare Repos>File.
Selezionare Clona.
Se si usa macOS, è necessaria una password speciale per clonare il repository Git. Selezionare Genera credenziali Git e copiare il nome utente e la password visualizzati in una posizione sicura.
Selezionare Clona in VS Code. Se viene richiesto di consentire l'apertura di Visual Studio Code, selezionare Apri.
Creare una cartella da usare per il repository e quindi scegliere Seleziona il Percorso del Repository.
Poiché si usa questo repository per la prima volta, viene chiesto di accedere.
Se si usa Windows, immettere le stesse credenziali usate per accedere ad Azure DevOps in questo esercizio.
Se si usa macOS, immettere il nome utente e la password Git generati qualche istante fa.
Visual Studio Code richiede di aprire il repository. Selezionare Apri.
Aggiungere protezioni dei rami
Configurare il repository Git per impedire push diretti al ramo principale.
Nel browser selezionare Impostazioni.
Selezionare Rami.
Selezionare Aggiungi regola di protezione ramo.
Nella casella di testo Modello nome ramo immettere main.
Selezionare Require a pull request before merging (Richiedi una richiesta pull prima del merge).
Deselezionare Require approvals (Richiedi approvazioni). In genere, è consigliabile selezionare questa opzione. In questo esempio, tuttavia, si esegue il merge della richiesta pull personalizzata e l'opzione Require approvals impedisce di farlo.
Seleziona Non consentire il bypass delle impostazioni precedenti.
Questa impostazione viene selezionata come esempio per mostrare come
git push
non riescemain
più avanti in questo esercizio. In un ambiente di produzione potrebbe non essere necessario limitare i merge diretti amain
per gli amministratori o i proprietari di repository.Nella parte inferiore della pagina selezionare Crea.
GitHub potrebbe chiedere di eseguire di nuovo l'accesso per confermare l'identità.
Aggiungere criteri ramo
Configurare il repository Git per impedire push diretti al ramo principale.
Nel browser passare a Repos>Rami.
Passare il puntatore del mouse sul ramo principale e selezionare i tre punti.
Selezionare Criteri ramo.
Nella finestra Criteri ramo modificare l'impostazione Richiedi un numero minimo di revisori su Attiva.
Modificare il numero minimo di revisori su 1 e selezionare l'opzione Consenti ai richiedenti di approvare le proprie modifiche.
Nota
In questo caso, si abilita l'opzione Consenti ai richiedenti di approvare le proprie modifiche. In questi esercizi si sta lavorando autonomamente, quindi è necessario creare e approvare le modifiche. Tuttavia, in un ambiente del team reale, potrebbe non essere necessario abilitare questa opzione.
Creare un ramo di funzionalità locale
Nel terminale di Visual Studio Code eseguire il comando seguente:
git checkout -b add-orders-queue
Questo comando crea un nuovo ramo di funzionalità da cui lavorare.
Aprire il file main.bicep nella cartella deploy.
Sotto i parametri aggiungere una nuova variabile per il nome della coda:
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var processOrderQueueName = 'processorder'
All'interno della risorsa dell'account di archiviazione aggiungere la coda come risorsa figlio annidata:
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = { name: storageAccountName location: location sku: { name: storageAccountSkuName } kind: 'StorageV2' properties: { accessTier: 'Hot' } resource queueServices 'queueServices' existing = { name: 'default' resource processOrderQueue 'queues' = { name: processOrderQueueName } } }
Nella definizione del modulo
appService
aggiungere l'account di archiviazione e i nomi delle code come parametri:module appService 'modules/appService.bicep' = { name: 'appService' params: { location: location appServiceAppName: appServiceAppName storageAccountName: storageAccount.name processOrderQueueName: storageAccount::queueServices::processOrderQueue.name environmentType: environmentType } }
Questo codice consente all'applicazione di trovare la coda in cui invierà messaggi.
Salvare il file main.bicep.
Aprire il file appService.bicep nella cartella deploy/modules.
Nella parte superiore del file appService.bicep aggiungere nuovi parametri per l'account di archiviazione e i nomi delle code:
@description('The Azure region into which the resources should be deployed.') param location string @description('The name of the App Service app to deploy. This name must be globally unique.') param appServiceAppName string @description('The name of the storage account to deploy. This name must be globally unique.') param storageAccountName string @description('The name of the queue to deploy for processing orders.') param processOrderQueueName string @description('The type of the environment. This must be nonprod or prod.') @allowed([ 'nonprod' 'prod' ]) param environmentType string
Aggiornare la risorsa
appServiceApp
per propagare i nomi dell'account di archiviazione e delle code alle variabili di ambiente dell'applicazione:resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'StorageAccountName' value: storageAccountName } { name: 'ProcessOrderQueueName' value: processOrderQueueName } ] } } }
Eseguire il commit e il push del ramo di funzionalità
Eseguire il commit e il push delle modifiche nel repository GitHub eseguendo i comandi seguenti nel terminale di Visual Studio Code:
Eseguire il commit e il push delle modifiche nel repository Azure Repos eseguendo i comandi seguenti nel terminale di Visual Studio Code:
git add .
git commit -m "Add orders queue and associated configuration"
git push --set-upstream origin add-orders-queue
Viene eseguito il push del ramo di funzionalità in un nuovo ramo, denominato anche add-orders-queue, nel repository remoto.
Provare a eseguire il merge del ramo di funzionalità con quello principale
Si è appreso perché non è consigliabile eseguire il push direttamente nel ramo principale. In questo caso, si tenta di violare tale linea guida in modo da vedere come la protezione del ramo principale impedisce di eseguire accidentalmente il push delle modifiche in un ramo protetto.
Nel terminale Visual Studio Code eseguire le istruzioni seguenti per passare al ramo principale e unire il ramo add-orders-queue in esso:
git checkout main git merge add-orders-queue
Il comando ha funzionato, ma il merge del ramo add-orders-queue nel ramo principale è stato eseguito solo nel repository Git locale.
Eseguire l'istruzione seguente per provare a eseguire il push delle modifiche in GitHub:
git push
Nota che il push ha esito negativo con un messaggio di errore come questo:
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 remote: error: GH006: Protected branch update failed for refs/heads/main. remote: error: Changes must be made through a pull request. To https://github.com/mygithubuser/toy-website-review.git ! [remote rejected] main -> main (protected branch hook declined) error: failed to push some refs to 'https://github.com/mygithubuser/toy-website-review.git'
Il messaggio di errore indica che i push al ramo principale non sono consentiti e che è necessario usare una richiesta pull per aggiornare il ramo.
Annullare il merge eseguendo l'istruzione seguente:
git reset --hard HEAD~1
Questo comando indica al repository Git locale di reimpostare lo stato del ramo principale a quello che era prima del merge dell'ultimo commit e di non salvare le modifiche. Il ramo add-orders-queue non è interessato.
Si è appreso perché non è consigliabile eseguire il push direttamente nel ramo principale. In questo caso, si tenta di violare tale linea guida in modo da vedere come i criteri del ramo impediscono di eseguire accidentalmente il push delle modifiche in un ramo protetto.
Nel terminale Visual Studio Code eseguire le istruzioni seguenti per passare al ramo principale e unire il ramo add-orders-queue a esso:
git checkout main git merge add-orders-queue
Il comando ha funzionato, ma il merge del ramo add-orders-queue nel ramo principale è stato eseguito solo nel repository Git locale.
Eseguire l'istruzione seguente per provare a eseguire il push delle modifiche in Azure Repos:
git push
Nota che il push ha esito negativo con un messaggio di errore come questo:
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 To https://dev.azure.com/mytoycompany/toy-website-review/_git/toy-website-review ! [remote rejected] main -> main (TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.) error: failed to push some refs to 'https://dev.azure.com/mytoycompany/toy-website-review/_git/toy-website-review'
Il messaggio di errore indica che i push al ramo principale non sono consentiti e che è necessario usare una richiesta pull per aggiornare il ramo.
Annullare il merge eseguendo l'istruzione seguente:
git reset --hard HEAD~1
Questo comando indica al repository Git locale di reimpostare lo stato del ramo principale a quello che era prima del merge dell'ultimo commit e di non salvare le modifiche. Il ramo add-orders-queue non è interessato.