Wdrażanie plików Bicep przy użyciu przepływu pracy
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ć etapy wdrażania.
Notatka
Polecenia w tej jednostce są przedstawione, aby zilustrować pojęcia. Nie uruchamiaj jeszcze poleceń. Będziesz ćwiczyć to, czego nauczysz się tutaj wkrótce.
Sprawdź swój kod
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 proces roboczy nie będzie miał dostępu do plików. Ten krok jest zwykle pierwszą rzeczą, jaką wykonuje Twoje zadanie.
Aby sprawdzić swój kod, możesz użyć akcji actions/checkout@v3
.
name: MyWorkflow
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
path: repo
Zwróć uwagę, że przepływ pracy zawiera słowo kluczowe uses
. Słowo kluczowe wskazuje, że chcesz użyć wstępnie zdefiniowanej akcji o nazwie actions/checkout
.
Podobnie jak zasoby Bicep, działania są zawsze wersjonowane. W takim przypadku przepływ pracy używa wersji 3, więc @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ń zostaną potwierdzone twoje uprawnienia do wdrażania zasobów, a następnie możesz użyć narzędzi, aby wdrożyć plik Bicep.
Wskazówka
W tym module utworzysz tożsamość obciążenia, która będzie używana przez przepływ pracy. Moduł Uwierzytelnianie przepływu 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 wykorzystują tożsamość przepływu pracy .
Musisz upewnić się, że tożsamość zadania ma potrzebne uprawnienia do wykonania 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 polecenia az login
. 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.
Zaloguj się na platformie Azure
Zanim twój przepływ pracy będzie mógł wykonywać polecenia w środowisku 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 zasobów: identyfikatora aplikacji Microsoft Entra, identyfikatora dzierżawy (tenant) Microsoft Entra oraz identyfikatora subskrypcji Azure, z którym chcesz pracować.
Po wykonaniu tej akcji agent zostanie uwierzytelniony i będzie mógł uruchamiać polecenia w środowisku Azure.
Wdróż plik Bicep
Po zalogowaniu się przepływu pracy do platformy Azure, można użyć tożsamości roboczej do uruchomienia wdrożenia Bicep. W funkcji GitHub Actions użyjesz akcji azure/arm-deploy
, aby zainicjować wdrożenie Bicep.
Notatka
Istnieją inne sposoby wdrażania plików Bicep z funkcji GitHub Actions. Możesz na przykład użyć akcji azure/CLI
, a następnie użyć poleceń Azure CLI do uruchamiania wdrożeń. Jednak ze względu na to, że zadanie azure/arm-deploy
zostało specjalnie zaprojektowane na potrzeby wdrożeń, użyjesz go w tym module.
Oto przykład konfigurowania kroku w celu użycia akcji azure/arm-deploy
:
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 akcja azure/login
już zalogowała proces roboczy na platformie Azure, krok azure/arm-deploy
jest wykonywany na uwierzytelnionym agencie wykonawczym.
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 instrukcji on
. 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
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 Git, który zainicjował wykonanie przepływu pracy. -
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 do nadania nazwy wdrożeniu platformy Azure, co pozwoli śledzić je z powrotem do określonego przebiegu przepływu pracy, który je wyzwolił.Notatka
W funkcji GitHub Actions można ponownie wykonać przebieg przepływu pracy. W takim przypadku liczba przebiegów nie zmienia się, więc nie należy używać zmiennej
github.run_number
do zliczania, ile razy wykonano przepływ pracy.
Tajemnice
Czasami należy przechowywać informacje tajne dla przepływu pracy, takie jak hasło bazy danych lub klucz interfejsu API. Aby bezpiecznie przechowywać dane zawierające poświadczenia lub poufne informacje, należy używać sekretów GitHub . Przepływ pracy może uzyskać dostęp do wartości tajemnicy.
Wpisy tajne są tworzone w ustawieniach repozytorium GitHub. Sekret jest dostępny dla wszystkich przepływów pracy w repozytorium. W późniejszym module dowiesz się więcej o środowiskach , które umożliwiają ograniczenie używania wpisów tajnych do wdrożeń w określonym środowisku.
Ostrzeżenie
Domyślnie GitHub Actions zaciemnia wartości tajnych zmiennych w dziennikach przepływu pracy, ale należy również postępować zgodnie z dobrymi praktykami. Etapy przepływu pracy mają dostęp do wartości tajemnic. 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.
Tajne dane można tworzyć za pomocą interfejsu webowego GitHub. Aby odwołać się do tajnej wartości w przepływie pracy, użyj następującej składni:
${{ secrets.NAME_OF_THE_SECRET }}
Po uruchomieniu przepływu pracy agent obsługujący procesy wdrażania ma dostęp do odszyfrowanej wartości tajnego klucza 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 wszystkiego, co może ulec zmianie między środowiskami, oraz sekretów GitHub dla wszystkiego, co jest tajne. Ponieważ przepływ pracy zawsze będzie używał tego samego pliku Bicep, nie musisz tworzyć zmiennej dla ścieżki.
W tym module użyjesz tajemnic GitHub do przechowywania informacji, których zadanie azure/login
potrzebuje do zalogowania się do platformy Azure: identyfikator subskrypcji i dzierżawy Microsoft Entra oraz identyfikator rejestracji aplikacji tożsamości obciążenia.