Wdrażanie plików Bicep przy użyciu przepływu pracy

Ukończone

Po utworzeniu podstawowego przepływu pracy możesz skonfigurować przepływ pracy w celu wdrożenia plików Bicep. W tej lekcji dowiesz się, jak wdrożyć kod Bicep z przepływu pracy i jak skonfigurować kroki wdrażania.

Uwaga

Polecenia w tej lekcji są wyświetlane w celu zilustrowania pojęć. Nie uruchamiaj jeszcze poleceń. Będziesz ćwiczyć to, czego nauczysz się tutaj wkrótce.

Wyewidencjonowywanie kodu

Pliki Bicep są przechowywane w repozytorium Git. W funkcji GitHub Actions musisz jawnie poinformować przepływ pracy, aby wyewidencjonować pliki z repozytorium Git. W przeciwnym razie przepływ pracy nie będzie miał dostępu do plików. Ten krok jest zwykle pierwszą rzeczą, jaką wykonuje Twoje zadanie.

Aby wyewidencjonować kod, możesz użyć actions/checkout@v3 akcji:

name: MyWorkflow

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
      with:
        path: repo

Zwróć uwagę, że przepływ pracy zawiera uses słowo kluczowe . Słowo kluczowe wskazuje, że chcesz użyć wstępnie zdefiniowanej akcji o nazwie actions/checkout.

Podobnie jak zasoby Bicep, akcje są zawsze wersjonowane. W takim przypadku przepływ pracy używa wersji 3, dlatego @v3 jest dołączany do nazwy akcji.

Gdy przepływ pracy uwzględni tę akcję, kod repozytorium zostanie wyewidencjonowany w systemie plików modułu uruchamiającego. Należy określić ścieżkę, w której powinny być przechowywane pliki przy użyciu parametru path .

Uwierzytelnianie na platformie Azure

Podczas wdrażania pliku Bicep z własnego komputera należy użyć interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell. Przed wdrożeniem kodu musisz zalogować się na platformie Azure. Zwykle narzędzia proszą o wprowadzenie poświadczeń w przeglądarce. Po zweryfikowaniu poświadczeń twoje uprawnienia do wdrażania zasobów zostaną potwierdzone i możesz użyć narzędzi do wdrożenia pliku Bicep.

Napiwek

W tym module utworzysz tożsamość obciążenia, która będzie używana przez przepływ pracy. Moduł Uwierzytelnij przepływ pracy wdrażania platformy Azure przy użyciu tożsamości obciążeń zawiera bardziej szczegółowe wyjaśnienie tożsamości obciążeń, w tym sposobu ich działania, a także sposobu ich tworzenia, przypisywania ról i zarządzania nimi.

Wdrożenie według przepływu pracy wymaga również uwierzytelniania. Ponieważ przepływy pracy działają bez interwencji człowieka, przepływy pracy uwierzytelniają się na platformie Azure przy użyciu tożsamości obciążenia. Usługi GitHub i Microsoft Entra ID współpracują ze sobą w celu bezpiecznego uwierzytelniania przepływu pracy bez konieczności posiadania poświadczeń.

Gdy przepływ pracy musi komunikować się z platformą Azure, krok przepływu pracy loguje się do platformy Azure przy użyciu tożsamości obciążenia. Następnie kroki zdefiniowane w przepływie pracy używają tożsamości przepływu pracy.

Diagram that shows a workflow that includes an Azure deployment step, which accesses a secret and then deploys to Azure.

Musisz upewnić się, że tożsamość obciążenia ma uprawnienia, które musi wykonać w ramach kroków wdrażania. Na przykład może być konieczne przypisanie tożsamości obciążenia roli Współautor dla grupy zasobów, w której są wdrażane zasoby.

Ostrzeżenie

Może się wydawać, że łatwiej będzie przechowywać poświadczenia użytkownika w pliku YAML, a następnie zalogować się przy użyciu az login polecenia . Nigdy nie należy używać tego podejścia do uwierzytelniania przepływu pracy. Poświadczenia w pliku YAML są przechowywane w postaci zwykłego tekstu. Każdy, kto ma dostęp do repozytorium, może wyświetlać poświadczenia i używać ich. Nawet jeśli ograniczysz dostęp do repozytorium GitHub, za każdym razem, gdy ktoś sklonuje repozytorium, plik YAML, który przechowuje poświadczenia, będzie znajdować się na komputerze tej osoby.

Logowanie się do platformy Azure

Zanim przepływ pracy będzie mógł wykonywać polecenia w środowisku platformy Azure, najpierw musi się zalogować. Istnieje akcja o nazwie azure/login , która obsługuje proces logowania. Musisz również przyznać przepływowi pracy uprawnienia do pracy z tokenami uwierzytelniania.

name: MyWorkflow

on: [workflow_dispatch]

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
      with:
        path: repo
    - uses: azure/login@v1
      with:
        client-id: ${{ secrets.AZURE_CLIENT_ID }}
        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

Akcja azure/login wymaga podania trzech informacji w celu użycia tożsamości obciążenia: identyfikatora aplikacji Microsoft Entra, identyfikatora dzierżawy (katalogu) firmy Microsoft oraz identyfikatora subskrypcji platformy Azure, z którym chcesz pracować.

Po wykonaniu tej akcji moduł uruchamiający zostanie uwierzytelniony i będzie mógł uruchamiać instrukcje względem środowiska platformy Azure.

Wdrażanie pliku Bicep

Po zalogowaniu przepływu pracy na platformie Azure można użyć tożsamości obciążenia do uruchomienia wdrożenia Bicep. W funkcji GitHub Actions użyjesz azure/arm-deploy akcji w celu zainicjowania wdrożenia Bicep.

Uwaga

Istnieją inne sposoby wdrażania plików Bicep z funkcji GitHub Actions. Możesz na przykład użyć azure/CLI akcji, a następnie udostępnić polecenia interfejsu wiersza polecenia platformy Azure do uruchamiania wdrożeń. Jednak ze względu na to azure/arm-deploy , że zadanie jest specjalnie zaprojektowane na potrzeby wdrożeń, użyjesz go w tym module.

Oto przykład konfigurowania kroku w celu użycia azure/arm-deploy akcji:

name: MyWorkflow

on: [workflow_dispatch]

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
      with:
        path: repo
    - uses: azure/login@v1
      with:
        client-id: ${{ secrets.AZURE_CLIENT_ID }}
        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    - uses: azure/arm-deploy@v1
      with:
        resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
        template: ./deploy/main.bicep
        parameters: environmentType=Test

Akcja azure/arm-deploy akceptuje kilka parametrów, w tym:

  • resourceGroupName: nazwa grupy zasobów, w której chcesz wdrożyć zasoby zdefiniowane w pliku Bicep.
  • template: ścieżka do pliku Bicep w repozytorium. Ścieżka jest względna względem katalogu głównego repozytorium.
  • parameters: wskazuje wszystkie wartości parametrów, które podajesz w czasie wdrażania. W tym przykładzie udostępniamy wartość parametru environmentType .

Ponieważ poprzednia azure/login akcja już podpisała przepływ pracy na platformie Azure, azure/arm-deploy krok jest wykonywany na uwierzytelnianym module uruchamiającym.

Zmienne

Często przepływy pracy zawierają wartości, które mają być ponownie używane w wielu miejscach w pliku przepływu pracy. Możesz również przechowywać te wartości w górnej części pliku przepływu pracy w celu łatwego odwoływanie się i łatwego zmieniania wartości. W przepływie pracy zdefiniowane zmienne będą udostępniane jako zmienne środowiskowe. Aby zdefiniować wartości wielokrotnego użytku, użyj zmiennych.

Tworzenie zmiennej

Zmienne można tworzyć na różnych poziomach w pliku przepływu pracy. Jeśli jednak chcesz, aby były dostępne dla całego pliku przepływu pracy, zdefiniujesz je w górnej części pliku, tuż poniżej on instrukcji . Aby zdefiniować zmienne, użyj parametru env :

env:
    AZURE_RESOURCEGROUP_NAME: gh-actions
    AZURE_WEBAPP_NAME: webapp-gh-actions

W poprzednim przykładzie określamy dwie zmienne środowiskowe.

Używanie zmiennej w przepływie pracy

Po utworzeniu zmiennej należy użyć specjalnej składni, aby odwoływać się do niej w pliku YAML przepływu pracy, w następujący sposób:

${{ env.AZURE_RESOURCEGROUP_NAME }}

Domyślne zmienne środowiskowe

Funkcja GitHub Actions używa również domyślnych zmiennych środowiskowych. Domyślne zmienne środowiskowe zawierają wstępnie zdefiniowane informacje, które mogą być używane w przepływie pracy. Poniżej przedstawiono niektóre domyślne zmienne środowiskowe, których można użyć w przepływie pracy:

  • github.sha: identyfikator zatwierdzenia usługi Git, który wyzwolił przepływ pracy do wykonania.
  • github.run_number: unikatowa liczba dla każdego przebiegu określonego przepływu pracy w repozytorium. Ta liczba rozpoczyna się od 1 dla pierwszego uruchomienia przepływu pracy i zwiększa się wraz z każdym nowym uruchomieniem. Możesz użyć tej zmiennej, aby nazwać wdrożenie platformy Azure, aby śledzić wdrożenie z powrotem do określonego przebiegu przepływu pracy, które go wyzwoliło.

    Uwaga

    W funkcji GitHub Actions można ponownie wykonać przebieg przepływu pracy. W takim przypadku numer przebiegu nie zmienia się, więc nie należy używać zmiennej github.run_number do zliczania liczby wykonanych przepływów pracy.

Wpisy tajne

Czasami należy przechowywać informacje tajne dla przepływu pracy, takie jak hasło bazy danych lub klucz interfejsu API. Wpisy tajne usługi GitHub służą do bezpiecznego przechowywania informacji zawierających poświadczenia lub informacje poufne. Przepływ pracy może uzyskać dostęp do wartości wpisu tajnego.

Wpisy tajne są tworzone w ustawieniach repozytorium GitHub. Wpis tajny jest dostępny dla wszystkich przepływów pracy w repozytorium. W późniejszym module poznasz środowiska, które umożliwiają ograniczenie używania wpisów tajnych do wdrożeń w określonym środowisku.

Ostrzeżenie

Domyślnie funkcja GitHub Actions zaciemnia wartości zmiennych wpisów tajnych w dziennikach przepływu pracy, ale należy również postępować zgodnie z dobrymi rozwiązaniami. Kroki przepływu pracy mają dostęp do wartości wpisów tajnych. Jeśli przepływ pracy zawiera krok, który nie obsługuje wpisu tajnego bezpiecznie, istnieje prawdopodobieństwo, że wartość wpisu tajnego może zostać wyświetlona w dziennikach przepływu pracy. Zawsze należy dokładnie przejrzeć wszelkie zmiany w pliku definicji przepływu pracy, aby sprawdzić, czy wpisy tajne nie zostaną nieprawidłowo potraktowane.

Wpisy tajne można tworzyć przy użyciu interfejsu internetowego usługi GitHub. Aby odwołać się do wartości wpisu tajnego w przepływie pracy, użyj następującej składni:

${{ secrets.NAME_OF_THE_SECRET }}

Po uruchomieniu przepływu pracy moduł uruchamiający kroki wdrażania ma dostęp do odszyfrowanej wartości wpisu tajnego usługi GitHub. Funkcja GitHub Actions została zaprojektowana tak, aby nie ujawniała wartości wpisów tajnych w dziennikach przepływu pracy.

Napiwek

Podobnie jak w przypadku parametrów Bicep, nie trzeba tworzyć zmiennych dla wszystkich elementów. Dobrym pomysłem jest utworzenie zmiennych dla wszystkich elementów, które mogą ulec zmianie między środowiskami, a wpisami tajnymi usługi GitHub dla wszystkich wpisów tajnych. Ponieważ przepływ pracy będzie zawsze używać tego samego pliku Bicep, nie musisz tworzyć zmiennej dla ścieżki.

W tym module użyjesz wpisów tajnych usługi GitHub do przechowywania informacji azure/login , które należy wykonać, aby zalogować się do platformy Azure: identyfikator subskrypcji i dzierżawy firmy Microsoft oraz identyfikator rejestracji aplikacji tożsamości obciążenia.