Ćwiczenie — ochrona głównej gałęzi

Ukończone

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:

  1. Wybierz pozycję Użyj tego szablonu>Utwórz nowe repozytorium.

    Zrzut ekranu przedstawiający interfejs usługi GitHub przedstawiający repozytorium szablonu z przyciskiem umożliwiającym użycie bieżącego szablonu.

  2. Wprowadź nazwę nowego projektu, na przykład toy-website-review.

  3. 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.

  4. Wybierz pozycję Utwórz repozytorium na podstawie szablonu.

    Zrzut ekranu przedstawiający interfejs usługi GitHub przedstawiający stronę tworzenia repozytorium.

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:

  1. Wybierz pozycję Zaloguj się i zaakceptuj warunki użytkowania.

  2. Na stronie Tworzenie nowego projektu wybierz organizację usługi Azure DevOps. Następnie wprowadź nazwę projektu, taką jak toy-website-review.

    Zrzut ekranu przedstawiający tworzenie projektu za pomocą generatora demonstracyjnego usługi Azure DevOps.

  3. 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.

  4. 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.

  1. Wybierz pozycję Kod, a następnie wybierz ikonę Kopiuj .

    Zrzut ekranu przedstawiający interfejs usługi GitHub przedstawiający nowe repozytorium z wyróżnionym przyciskiem kopiowania repozytorium U R L.

  2. Otwórz Visual Studio Code.

  3. Otwórz okno terminalu programu Visual Studio Code, wybierając pozycję Terminal>Nowy terminal. Okno jest zwykle otwierane w dolnej części ekranu.

  4. 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
    
  5. 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
    
  6. 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.

  1. Wybierz pozycję Pliki repozytoriów>.

    Zrzut ekranu usługi Azure DevOps przedstawiający menu Repozytoria z wyróżnioną pozycją Pliki.

  2. Wybierz pozycję Klonuj.

    Zrzut ekranu usługi Azure DevOps przedstawiający repozytorium z wyróżnionym przyciskiem Klonuj.

  3. 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.

  4. 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.

    Zrzut ekranu usługi Azure DevOps przedstawiający ustawienia repozytorium z wyróżnionym przyciskiem klonowania w programie Visual Studio Code.

  5. Utwórz folder do użycia dla repozytorium, a następnie wybierz pozycję Wybierz lokalizację repozytorium.

  6. 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.

  7. Program Visual Studio Code monituje o otwarcie repozytorium. Wybierz Otwórz.

    Zrzut ekranu programu Visual Studio Code przedstawiający monit o otwarcie sklonowanego repozytorium z wyróżnionym przyciskiem Otwórz.

Dodawanie ochrony gałęzi

Skonfiguruj repozytorium Git, aby zapobiec bezpośrednim wypchnięciom do gałęzi głównej.

  1. W przeglądarce wybierz pozycję Ustawienia.

  2. Wybierz pozycję Gałęzie.

  3. Wybierz pozycję Dodaj regułę ochrony gałęzi.

    Zrzut ekranu usługi GitHub przedstawiający stronę dodawania reguł ochrony gałęzi z wyróżnionym przyciskiem dodawania reguły.

  4. W polu tekstowym Wzorzec nazwy gałęzi wprowadź ciąg main.

  5. 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.

  6. Wybierz pozycję Nie zezwalaj, pomijając powyższe ustawienia.

    To ustawienie jest wybierane jako przykład, aby pokazaćmain, jak git push w dalszej części tego ćwiczenia opisano niepowodzenie. W środowisku produkcyjnym możesz nie chcieć ograniczyć bezpośrednich scaleń do main administratorów lub właścicieli repozytoriów.

  7. W dolnej części strony wybierz pozycję Utwórz.

    Zrzut ekranu usługi GitHub przedstawiający przycisk 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.

  1. W przeglądarce przejdź do obszaru Gałęzie repozytoriów>.

  2. Umieść kursor na gałęzi głównej i wybierz trzy kropki.

  3. Wybierz pozycję Zasady gałęzi.

    Zrzut ekranu usługi Azure DevOps przedstawiający listę gałęzi z wyświetlonym menu kontekstowym i wyróżnionym elementem menu zasad gałęzi.

  4. W oknie Zasady gałęzi zmień ustawienie Wymagaj minimalnej liczby recenzentów na Włączone.

  5. Zmień minimalną liczbę recenzentów na 1, a następnie wybierz opcję Zezwalaj żądaniom na zatwierdzanie własnych zmian .

    Zrzut ekranu usługi Azure DevOps przedstawiający stronę zasad gałęzi dla głównej gałęzi.

    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

  1. 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ć.

  2. Otwórz plik main.bicep w folderze deploy.

    Zrzut ekranu programu Visual Studio Code przedstawiający główny plik kropkowy w folderze deploy.

  3. Poniżej parametrów dodaj nową zmienną dla nazwy kolejki:

    var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
    var processOrderQueueName = 'processorder'
    
  4. 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
        }
      }
    }
    
  5. 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.

  6. Zapisz plik main.bicep.

  7. Otwórz plik appService.bicep w folderze deploy/modules.

  8. 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
    
  9. 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.

  1. 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.

  2. 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.

  3. 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.

  1. 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.

  2. 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.

  3. 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 .