Jak przeprowadzać wdrożenia na platformie Azure za pomocą funkcji GitHub Actions?
W tej lekcji omówiono sposób wdrażania aplikacji internetowej opartej na kontenerze w usłudze Microsoft Azure Web Apps za pomocą funkcji GitHub Actions. Obejmuje ona niektóre opcje wyzwalania przepływu pracy. Następnie dowiedz się, jak pracować z warunkowymi w przepływie pracy. Na koniec dowiedz się, jak tworzyć i usuwać zasoby platformy Azure przy użyciu funkcji GitHub Actions.
Opcje wyzwalania przepływu pracy ciągłego dostarczania
Istnieje kilka opcji uruchamiania przepływu pracy ciągłego dostarczania. W poprzednim module dotyczącym ciągłej integracji za pomocą funkcji GitHub Actions pokazano, jak wyzwalać przepływ pracy z operacji wypychania do repozytorium GitHub. Jednak w przypadku ciągłego wdrażania możesz chcieć wyzwolić przepływ pracy wdrażania w innym zdarzeniu.
Jedną z opcji jest wyzwalanie przepływu pracy przy użyciu metodologii ChatOps. ChatOps używa klientów czatu, czatbotów i narzędzi komunikacyjnych w czasie rzeczywistym do uruchamiania zadań. Na przykład można pozostawić określony komentarz w żądaniu ściągnięcia, który może uruchamiać bota. Taki bot może dodawać komentarze zwrotne z danymi statystycznymi lub uruchamiać przepływ pracy.
Kolejną opcją (stosowaną w naszym przykładzie) jest użycie etykiet w żądaniu ściągnięcia. Różne etykiety mogą uruchamiać różne przepływy pracy. Na przykład dodaj etykietę etapu, aby rozpocząć przepływ pracy wdrażania do środowiska przejściowego. Możesz też dodać etykietę uruchamiania środowiska , aby uruchomić przepływ pracy, w którym zostaną utworzone zasoby platformy Microsoft Azure do wdrożenia. Aby użyć etykiet, przepływ pracy wygląda następująco:
on:
pull_request:
types: [labeled]
Sterowanie wykonywaniem za pomocą warunku zadania
Często należy uruchamiać przepływ pracy tylko po spełnieniu pewnego warunku.
Przepływy pracy usługi GitHub udostępniają warunkowe if
dla tego scenariusza. Warunkowe używa wyrażenia , które jest oceniane w czasie wykonywania. Na przykład chcesz uruchomić ten przepływ pracy, jeśli do żądania ściągnięcia zostanie dodana etykieta etapu .
if: contains(github.event.pull_request.labels.*.name, 'stage')
Przechowywanie poświadczeń za pomocą wpisów tajnych usługi GitHub
Nigdy nie chcesz ujawniać poufnych informacji w pliku przepływu pracy. Wpisy tajne usługi GitHub to bezpieczne miejsce do przechowywania poufnych informacji potrzebnych w przepływie pracy. Oto przykład.
Aby przeprowadzić wdrożenie w zasobie platformy Azure, akcja usługi GitHub musi mieć uprawnienia dostępu do tego zasobu. Nie należy przechowywać poświadczeń platformy Azure w postaci zwykłego tekstu w pliku przepływu pracy. Zamiast tego możesz przechowywać poświadczenia w wpisach tajnych usługi GitHub.
Aby przechowywać informacje w wpisach tajnych usługi GitHub, utwórz wpis tajny w portalu.
Następnie użyj nazwy wpisu tajnego utworzonego w przepływie pracy wszędzie tam, gdzie są potrzebne te informacje. Na przykład użyj poświadczeń platformy Azure przechowywanych w wpisach tajnych usługi GitHub w atrybucie creds:
akcji platformy Azure login
.
steps:
- name: "Login via Azure CLI"
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
Wdrażanie na platformie Microsoft Azure za pomocą funkcji GitHub Actions
Witryna GitHub Marketplace oferuje kilka akcji ułatwiających automatyzację zadań związanych z platformą Azure.
Możesz również wyszukiwać i przeglądać funkcje GitHub Actions bezpośrednio w edytorze przepływu pracy repozytorium. Na pasku bocznym można wyszukiwać określone funkcje Actions, wyświetlać polecane funkcje Actions i przeglądać polecane kategorie.
Aby znaleźć funkcję Actions:
- W repozytorium przejdź do pliku przepływu pracy, który chcesz edytować.
- Wybierz ikonę Edytuj w prawym górnym rogu widoku pliku.
- Aby przeglądać funkcje Actions, użyj paska bocznego witryny GitHub Marketplace z prawej strony edytora.
Załóżmy, że chcesz wdrożyć aplikację internetową opartą na kontenerach w usłudze Azure Web Apps. Jeśli przeszukasz witrynę GitHub Marketplace, znajdziesz następujące akcje:
- azure/webapps-deploy@v1
- azure/login@v1 , które widzieliśmy wcześniej
- azure/docker-login@v1
Po dodaniu tych akcji do zadania Deploy-to-Azure
przepływ pracy będzie wyglądać następująco:
Deploy-to-Azure:
runs-on: ubuntu-latest
needs: Build-Docker-Image
name: Deploy app container to Azure
steps:
- name: "Login via Azure CLI"
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- uses: azure/docker-login@v1
with:
login-server: ${{env.IMAGE_REGISTRY_URL}}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy web app container
uses: azure/webapps-deploy@v1
with:
app-name: ${{env.AZURE_WEBAPP_NAME}}
images: ${{env.IMAGE_REGISTRY_URL}}/${{ github.repository }}/${{env.DOCKER_IMAGE_NAME}}:${{ github.sha }}
- name: Azure logout
run: |
az logout
Zwróć uwagę, że to zadanie jest zależne od poprzedniego zadania (Build-Docker-Image
). Poprzednie zadanie tworzy artefakt, który jest wdrażany.
Akcja azure/login@v1 wymaga poświadczeń, aby zalogować się do konta platformy Azure, aby uzyskać dostęp do zasobów platformy Azure, do których chcesz wdrożyć. W tym miejscu użyj poświadczeń przechowywanych w wpisach tajnych usługi GitHub.
To samo dotyczy akcji azure/docker-login@v1 . Ponieważ wdrażasz obraz kontenera, musisz zalogować się do prywatnego rejestru kontenerów.
Akcja azure/webapps-deploy@v1 wykonuje wdrożenie. Zależy to od dwóch poprzednich akcji.
Tworzenie i usuwanie zasobów platformy Azure za pomocą funkcji GitHub Actions
Ponieważ ciągłe wdrażanie jest procesem zautomatyzowanym, podjęto już decyzję o użyciu infrastruktury jako kodu w celu utworzenia i zdjąć wdrożone środowiska. Funkcja GitHub Actions może zautomatyzować te zadania na platformie Azure i uwzględnić te akcje w przepływie pracy.
Uwaga
Pamiętaj, że ważne jest, aby usunąć zasoby, których nie używasz już tak szybko, jak to możliwe, aby uniknąć niepotrzebnych opłat.
Jedną z opcji jest utworzenie nowego przepływu pracy z dwoma zadaniami (zadanie uruchamiające zasoby i zadanie usuwające je). Następnie użyj warunku, aby uruchamiać tylko odpowiednie zadanie. W tym przykładzie warunek wyszukuje etykietę w żądaniu ściągnięcia i uruchamia zadanie set-up-azure-resources
w przypadku etykiety spin up environment (uruchomienie środowiska) lub zadanie destroy-azure-resources
w przypadku etykiety destroy environment (zniszczenie środowiska).
jobs:
set-up-azure-resources:
runs-on: ubuntu-latest
if: contains(github.event.pull_request.labels.*.name, 'spin up environment')
...
destroy-azure-resources:
runs-on: ubuntu-latest
if: contains(github.event.pull_request.labels.*.name, 'destroy environment')
...
Te zadania używają interfejsu wiersza polecenia platformy Azure do tworzenia i niszczenia zasobów platformy Azure. Aby uzyskać więcej informacji na temat interfejsu wiersza polecenia platformy Azure, zobacz Omówienie interfejsu wiersza polecenia platformy Azure.
Oto przykładowe kroki w zadaniu set-up-azure-resources
:
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Azure login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Create Azure resource group
if: success()
run: |
az group create --location ${{env.AZURE_LOCATION}} --name ${{env.AZURE_RESOURCE_GROUP}} --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
- name: Create Azure app service plan
if: success()
run: |
az appservice plan create --resource-group ${{env.AZURE_RESOURCE_GROUP}} --name ${{env.AZURE_APP_PLAN}} --is-linux --sku F1 --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
- name: Create webapp resource
if: success()
run: |
az webapp create --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --plan ${{ env.AZURE_APP_PLAN }} --name ${{ env.AZURE_WEBAPP_NAME }} --deployment-container-image-name nginx --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
- name: Configure webapp to use GitHub Packages
if: success()
run: |
az webapp config container set --docker-custom-image-name nginx --docker-registry-server-password ${{secrets.GITHUB_TOKEN}} --docker-registry-server-url https://docker.pkg.github.com --docker-registry-server-user ${{github.actor}} --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
Zwróć uwagę, że funkcja GitHub Actions jest używana w celu wyewidencjonowania repozytorium i zalogowania się do platformy Azure. Następnie są tworzone potrzebne zasoby i jest wdrażany kontener przy użyciu interfejsu wiersza polecenia platformy Azure.