Ć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 do środowiska produkcyjnego. Teraz musisz zaktualizować szablon Bicep, aby dodać kolejkę przetwarzania zamówień.
W tym ćwiczeniu utworzysz gałąź funkcjonalności dla zmiany. Będziesz również chronić gałąź główną i zezwalać na scalanie zmian do gałęzi głównej dopiero 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 zabezpieczenia dla 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 polityki gałęzi do głównej gałęzi repozytorium.
- Utwórz lokalną gałąź funkcjonalności dla swoich zmian.
- Spróbuj połączyć gałąź funkcjonalności z gałęzią główną.
Pobierz 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ę Public.
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.
Uruchamianie szablonu
W witrynie Azure DevOps Demo Generator wykonaj następujące kroki:
Wybierz zaloguj się i zaakceptuj warunki użytkowania.
Na stronie Utwórz nowy projekt wybierz organizację usługi Azure DevOps. Następnie wprowadź nazwę projektu, na przykład toy-website-review.
Wybierz pozycję Utwórz projekt.
Uruchomienie szablonu zajmuje kilka chwil. Automatycznie tworzy proces i plik Bicep, które będą używane w kolejnych ćwiczeniach.
Wybierz pozycję , 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 opcję Code, a następnie wybierz ikonę Copy.
Otwórz program Visual Studio Code.
Otwórz okno terminalu programu Visual Studio Code, wybierając pozycję Terminal>New 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ę Repozytoria plików>.
Wybierz Klonuj.
Jeśli używasz systemu macOS, potrzebujesz specjalnego hasła, aby sklonować repozytorium Git. Wybierz pozycję Wygeneruj poświadczenia usługi Git i skopiuj wyświetloną nazwę użytkownika i hasło w bezpiecznym miejscu.
Wybierz pozycję Clone (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 pushom do gałęzi głównej.
W przeglądarce wybierz Ustawienia.
Wybierz pozycję Gałęzie.
Wybierz pozycję Dodaj regułę ochrony gałęzi.
W polu tekstowym Wzorzec nazwy gałęzi wprowadź main.
Wybierz pozycję Wymagaj żądania ściągnięcia przed scaleniem.
Wyczyść Wymagaj zatwierdzeń. Zwykle należy wybrać tę opcję. Jednak w tym przykładzie scalisz własny pull request, a opcja Wymagaj zatwierdzeń uniemożliwia ci to.
Wybierz pozycję Nie zezwalaj na pomijanie powyższych ustawień.
To ustawienie wybierasz jako przykład, aby pokazać, jak przejście z
git push
domain
kończy się niepowodzeniem w dalszej części tego ćwiczenia. W środowisku produkcyjnym możesz nie chcieć ograniczać bezpośredniego scalania tylko domain
dla administratorów lub właścicieli repozytoriów.W dolnej części strony wybierz Utwórz.
Usługa GitHub może poprosić Cię o ponowne zalogowanie się w celu potwierdzenia tożsamości.
Dodaj zasady gałęzi
Skonfiguruj repozytorium Git, aby zapobiec bezpośrednim przesyłom do gałęzi głównej.
W przeglądarce wejdź do Repozytoria>gałęzie.
Najedź kursorem na główną gałąź i wybierz trzy kropki.
Wybierz Zasady gałęzi.
W oknie Zasady gałęzi zmień ustawienie Wymagaj minimalnej liczby recenzentów ustawić wartość W.
Zmień minimalną liczbę recenzentów na 1, a następnie wybierz opcję Zezwalaj żądaniom na zatwierdzanie własnych zmian.
Notatka
Tutaj włączasz opcję Zezwalaj wnioskodawcom na zatwierdzanie własnych zmian. W tych ćwiczeniach pracujesz samodzielnie, więc musisz utworzyć i zatwierdzić swoje 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łąź funkcjonalności, 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 magazynowego dodaj kolejkę jako zagnieżdżony zasób podrzędny.
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-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 przechowywania 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 przekazać nazwy konta przechowywania i kolejki do zmiennych środowiskowych aplikacji.resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'StorageAccountName' value: storageAccountName } { name: 'ProcessOrderQueueName' value: processOrderQueueName } ] } } }
Zatwierdź i wypchnij gałąź 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łąź funkcjonalna jest wypychana do nowej gałęzi, również nazwanej add-orders-queue, w twoim repozytorium zdalnym.
Spróbuj scalić gałąź funkcji z gałęzią główną
Już wiesz, dlaczego nie zaleca się przesyłania bezpośrednio do gałęzi głównej. W tym miejscu spróbujesz złamać tę zasadę, aby zobaczyć, jak zabezpieczenia głównej 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ć gałąź add-orders-queue z gałęzią.
git checkout main git merge add-orders-queue
Polecenie działało, ale scaliliśmy gałęzi add-orders-queue z gałęzią główną tylko w lokalnym repozytorium Git lokalnym.
Uruchom następującą instrukcję, aby spróbować wypchnąć zmiany do usługi GitHub:
git push
Zwróć uwagę, że próba wypchnięcia 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. Gałąź add-orders-queue nie jest dotknięta.
Już wiesz, dlaczego nie zaleca się przekazywania bezpośrednio do gałęzi głównej. W tym miejscu spróbujesz złamać te wytyczne, aby zobaczyć, jak zasady gałęzi uniemożliwiają przypadkowe przesyłanie zmian do chronionej gałęzi.
W terminalu programu Visual Studio Code uruchom następujące instrukcje, aby przełączyć się na gałąź główną i scalić z nią gałąź add-orders-queue .
git checkout main git merge add-orders-queue
Polecenie działało, ale scaliliśmy gałęzi 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
Zauważ, że Twój push kończy się niepowodzeniem z komunikatem o błędzie, który wygląda podobnie do tego:
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 nakazuje lokalnemu repozytorium Git zresetowanie stanu gałęzi głównej do tego, co było przed scaleniem ostatniego zatwierdzenia, i nie zapisuje twoich zmian. Gałąź add-orders-queue nie jest dotknięta.