Ćwiczenie — ochrona głównej gałęzi
Twój zespół pracuje nad szablonem Bicep, który zawiera już witrynę internetową i bazę danych. Składniki zostały wdrożone w środowisku produkcyjnym. Teraz musisz zaktualizować szablon Bicep, aby dodać kolejkę przetwarzania zamówień.
W tym ćwiczeniu utworzysz gałąź funkcji dla zmiany. Będziesz również chronić gałąź główną i zezwalać na scalanie zmian tylko z gałęzią główną po ich przejrzeniu. Przed tym należy jednak upewnić się, że środowisko zostało skonfigurowane w celu ukończenia pozostałej części tego modułu.
Podczas tego procesu wykonasz następujące czynności:
- Skonfiguruj repozytorium GitHub dla tego modułu.
- Sklonuj repozytorium na komputer.
- Dodaj ochronę gałęzi do głównej gałęzi repozytorium.
- Utwórz lokalną gałąź funkcji dla zmiany.
- Spróbuj scalić gałąź funkcji z gałęzią główną.
- Skonfiguruj projekt usługi Azure DevOps dla tego modułu.
- Sklonuj repozytorium projektu na komputer.
- Dodaj zasady gałęzi do głównej gałęzi repozytorium.
- Utwórz lokalną gałąź funkcji dla zmiany.
- Spróbuj scalić gałąź funkcji z gałęzią główną.
Pobieranie repozytorium GitHub
W tym miejscu upewnij się, że repozytorium GitHub zostało skonfigurowane w celu ukończenia pozostałej części tego modułu. Konfigurujesz je, tworząc nowe repozytorium na podstawie repozytorium szablonów. Repozytorium szablonów zawiera pliki potrzebne do rozpoczęcia pracy z tym modułem.
Rozpoczynanie od repozytorium szablonów
Uruchom szablon, który konfiguruje repozytorium GitHub.
W witrynie usługi GitHub wykonaj następujące kroki, aby utworzyć repozytorium na podstawie szablonu:
Wybierz pozycję Użyj tego szablonu>Utwórz nowe repozytorium.
Wprowadź nazwę nowego projektu, na przykład toy-website-review.
Wybierz opcję Publiczna.
Podczas tworzenia własnych repozytoriów warto utworzyć je jako prywatne. W tym module będziesz pracować z funkcjami usługi GitHub, które działają tylko z repozytoriami publicznymi i kontami GitHub Enterprise.
Wybierz pozycję Utwórz repozytorium na podstawie szablonu.
Pobieranie projektu usługi Azure DevOps
W tym miejscu upewnij się, że twoja organizacja usługi Azure DevOps została skonfigurowana w celu ukończenia pozostałej części tego modułu. Konfigurujesz go, uruchamiając szablon, który tworzy projekt w usłudze Azure DevOps.
W witrynie Azure DevOps Demo Generator wykonaj następujące kroki:
Wybierz pozycję Zaloguj się i zaakceptuj warunki użytkowania.
Na stronie Tworzenie nowego projektu wybierz organizację usługi Azure DevOps. Następnie wprowadź nazwę projektu, taką jak toy-website-review.
Wybierz pozycję Utwórz projekt.
Uruchomienie szablonu zajmuje kilka chwil. Automatycznie tworzy potok i plik Bicep, który będzie używany w kolejnych ćwiczeniach.
Wybierz pozycję Przejdź do projektu , aby przejść do projektu w usłudze Azure DevOps.
Klonowanie repozytorium
Masz teraz kopię repozytorium szablonów na własnym koncie. Sklonuj to repozytorium lokalnie, aby rozpocząć pracę w nim.
Wybierz pozycję Kod, a następnie wybierz ikonę Kopiuj .
Otwórz Visual Studio Code.
Otwórz okno terminalu programu Visual Studio Code, wybierając pozycję Terminal>Nowy terminal. Okno jest zwykle otwierane w dolnej części ekranu.
W terminalu przejdź do katalogu, w którym chcesz sklonować repozytorium GitHub na komputerze lokalnym. Aby na przykład sklonować repozytorium do folderu toy-website-review , uruchom następujące polecenie:
cd toy-website-review
Wpisz
git clone
i wklej skopiowany wcześniej adres URL, a następnie uruchom polecenie . Polecenie wygląda następująco:git clone https://github.com/mygithubuser/toy-website-review.git
Otwórz ponownie program Visual Studio Code w folderze repozytorium, uruchamiając następujące polecenie w terminalu programu Visual Studio Code:
code -r toy-website-review
Masz teraz projekt na swoim koncie. Sklonuj to repozytorium lokalnie, aby rozpocząć pracę w nim.
Wybierz pozycję Pliki repozytoriów>.
Wybierz pozycję Klonuj.
Jeśli używasz systemu macOS, potrzebujesz specjalnego hasła, aby sklonować repozytorium Git. Wybierz pozycję Generuj poświadczenia usługi Git i skopiuj wyświetlaną nazwę użytkownika i hasło w bezpiecznym miejscu.
Wybierz pozycję Klonuj w programie VS Code. Jeśli zostanie wyświetlony monit o zezwolenie programowi Visual Studio Code na otwarcie, wybierz pozycję Otwórz.
Utwórz folder do użycia dla repozytorium, a następnie wybierz pozycję Wybierz lokalizację repozytorium.
Używasz tego repozytorium po raz pierwszy, więc zostanie wyświetlony monit o zalogowanie się.
Jeśli używasz systemu Windows, wprowadź te same poświadczenia, które były używane do logowania się do usługi Azure DevOps wcześniej w tym ćwiczeniu.
Jeśli używasz systemu macOS, wprowadź nazwę użytkownika i hasło usługi Git wygenerowane kilka chwil temu.
Program Visual Studio Code monituje o otwarcie repozytorium. Wybierz Otwórz.
Dodawanie ochrony gałęzi
Skonfiguruj repozytorium Git, aby zapobiec bezpośrednim wypchnięciom do gałęzi głównej.
W przeglądarce wybierz pozycję Ustawienia.
Wybierz pozycję Gałęzie.
Wybierz pozycję Dodaj regułę ochrony gałęzi.
W polu tekstowym Wzorzec nazwy gałęzi wprowadź ciąg main.
Wybierz pozycję Wymagaj żądania ściągnięcia przed scaleniem.
Wyczyść pole Wymagaj zatwierdzeń. Zwykle należy wybrać tę opcję. Jednak w tym przykładzie scalisz własne żądanie ściągnięcia, a opcja Wymagaj zatwierdzeń uniemożliwia wykonanie tych czynności.
Wybierz pozycję Nie zezwalaj, pomijając powyższe ustawienia.
To ustawienie jest wybierane jako przykład, aby pokazać
main
, jakgit push
w dalszej części tego ćwiczenia opisano niepowodzenie. W środowisku produkcyjnym możesz nie chcieć ograniczyć bezpośrednich scaleń domain
administratorów lub właścicieli repozytoriów.W dolnej części strony wybierz pozycję Utwórz.
Usługa GitHub może poprosić Cię o ponowne zalogowanie się w celu potwierdzenia tożsamości.
Dodawanie zasad gałęzi
Skonfiguruj repozytorium Git, aby zapobiec bezpośrednim wypchnięciom do gałęzi głównej.
W przeglądarce przejdź do obszaru Gałęzie repozytoriów>.
Umieść kursor na gałęzi głównej i wybierz trzy kropki.
Wybierz pozycję Zasady gałęzi.
W oknie Zasady gałęzi zmień ustawienie Wymagaj minimalnej liczby recenzentów na Włączone.
Zmień minimalną liczbę recenzentów na 1, a następnie wybierz opcję Zezwalaj żądaniom na zatwierdzanie własnych zmian .
Uwaga
W tym miejscu włączysz opcję Zezwalaj żądaniom na zatwierdzanie własnych zmian . W tych ćwiczeniach pracujesz samodzielnie, więc musisz utworzyć i zatwierdzić zmiany. Jednak w rzeczywistym środowisku zespołowym możesz nie chcieć włączyć tej opcji.
Tworzenie lokalnej gałęzi funkcji
W terminalu programu Visual Studio Code uruchom następującą instrukcję:
git checkout -b add-orders-queue
To polecenie tworzy nową gałąź funkcji, z której będziesz pracować.
Otwórz plik main.bicep w folderze deploy.
Poniżej parametrów dodaj nową zmienną dla nazwy kolejki:
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS' var processOrderQueueName = 'processorder'
W ramach zasobu konta magazynu dodaj kolejkę jako zagnieżdżony zasób podrzędny:
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 } } }
W definicji modułu
appService
dodaj nazwy konta magazynu i kolejki jako parametry:module appService 'modules/appService.bicep' = { name: 'appService' params: { location: location appServiceAppName: appServiceAppName storageAccountName: storageAccount.name processOrderQueueName: storageAccount::queueServices::processOrderQueue.name environmentType: environmentType } }
Ten kod umożliwia aplikacji znalezienie kolejki, w której będą wysyłane komunikaty.
Zapisz plik main.bicep.
Otwórz plik appService.bicep w folderze deploy/modules.
W górnej części pliku appService.bicep dodaj nowe parametry dla konta magazynu i nazw kolejek:
@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
Zaktualizuj zasób,
appServiceApp
aby propagować nazwy konta magazynu i kolejki do zmiennych środowiskowych aplikacji: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 } ] } } }
Zatwierdzanie i wypychanie gałęzi funkcji
Zatwierdź zmiany i wypchnij je do repozytorium GitHub, uruchamiając następujące polecenia w terminalu programu Visual Studio Code:
Zatwierdź zmiany i wypchnij je do repozytorium usługi Azure Repos, uruchamiając następujące polecenia w terminalu programu Visual Studio Code:
git add .
git commit -m "Add orders queue and associated configuration"
git push --set-upstream origin add-orders-queue
Gałąź funkcji jest wypychana do nowej gałęzi o nazwie add-orders-queue w repozytorium zdalnym.
Spróbuj scalić gałąź funkcji z gałęzią główną
Wiesz już, dlaczego nie zaleca się wypychania bezpośrednio do gałęzi głównej. W tym miejscu spróbujesz przerwać tę wskazówkę, aby zobaczyć, jak ochrona gałęzi głównej uniemożliwia przypadkowe wypychanie zmian do chronionej gałęzi.
W terminalu programu Visual Studio Code uruchom następujące instrukcje, aby przełączyć się do gałęzi głównej i scalić do niej gałąź add-orders-queue :
git checkout main git merge add-orders-queue
Polecenie działało, ale scaliliśmy gałąź add-orders-queue z gałęzią główną tylko w lokalnym repozytorium Git.
Uruchom następującą instrukcję, aby spróbować wypchnąć zmiany do usługi GitHub:
git push
Zwróć uwagę, że wypychanie kończy się niepowodzeniem z komunikatem o błędzie, który wygląda następująco:
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'
Komunikat o błędzie informuje o tym, że wypychania do gałęzi głównej nie są dozwolone i że należy użyć żądania ściągnięcia w celu zaktualizowania gałęzi.
Cofnij scalanie, uruchamiając następującą instrukcję:
git reset --hard HEAD~1
To polecenie informuje lokalne repozytorium Git o zresetowaniu stanu gałęzi głównej do tego, co było przed scaleniem ostatniego zatwierdzenia, a nie zapisywania zmian. Nie ma to wpływu na gałąź add-orders-queue .
Wiesz już, dlaczego nie zaleca się wypychania bezpośrednio do gałęzi głównej. W tym miejscu spróbujesz przerwać te wytyczne, aby zobaczyć, jak zasady gałęzi uniemożliwiają przypadkowe wypychanie zmian do chronionej gałęzi.
W terminalu programu Visual Studio Code uruchom następujące instrukcje, aby przełączyć się do gałęzi głównej i scalić do niej gałąź add-orders-queue :
git checkout main git merge add-orders-queue
Polecenie działało, ale scaliliśmy gałąź add-orders-queue z gałęzią główną tylko w lokalnym repozytorium Git.
Uruchom następującą instrukcję, aby spróbować wypchnąć zmiany do usługi Azure Repos:
git push
Zwróć uwagę, że wypychanie kończy się niepowodzeniem z komunikatem o błędzie, który wygląda następująco:
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'
Komunikat o błędzie informuje o tym, że wypychania do gałęzi głównej nie są dozwolone i że należy użyć żądania ściągnięcia w celu zaktualizowania gałęzi.
Cofnij scalanie, uruchamiając następującą instrukcję:
git reset --hard HEAD~1
To polecenie informuje lokalne repozytorium Git o zresetowaniu stanu gałęzi głównej do tego, co było przed scaleniem ostatniego zatwierdzenia, a nie zapisywania zmian. Nie ma to wpływu na gałąź add-orders-queue .