Hvordan bruker jeg GitHub-handlinger til å distribuere til Azure?
Denne enheten beskriver hvordan du bruker GitHub-handlinger til å distribuere en beholderbasert nettapp til Microsoft Azure Web Apps. Den dekker noen alternativer for å utløse en arbeidsflyt. Deretter lærer du hvordan du arbeider med betingede faktorer i arbeidsflyten. Til slutt lærer du hvordan du oppretter og sletter Azure-ressurser ved hjelp av GitHub-handlinger.
Alternativer for å utløse en CD-arbeidsflyt
Det finnes flere alternativer for å starte en CD-arbeidsflyt. I den forrige modulen på CI med GitHub Actions lærte du hvordan du utløser en arbeidsflyt fra et trykk til GitHub-repositoriet. For CD vil du imidlertid kanskje utløse en distribusjonsarbeidsflyt på en annen hendelse.
Ett alternativ er å utløse arbeidsflyten med ChatOps-. ChatOps bruker chatklienter, chatboter og kommunikasjonsverktøy i sanntid til å kjøre oppgaver. Du kan for eksempel legge igjen en bestemt kommentar i en pull-forespørsel som kan starte en robot. Denne roboten kan kommentere med noen statistikker eller kjøre en arbeidsflyt.
Et annet alternativ, og det vi bruker i vårt eksempel, er å bruke etiketter i pull-forespørselen. Ulike etiketter kan starte forskjellige arbeidsflyter. Legg for eksempel til en fase etikett for å starte en distribusjonsarbeidsflyt i oppsamlingsmiljøet, eller legg til en oppringingsmiljø etikett for å kjøre arbeidsflyten som oppretter Microsoft Azure-ressursene som du kan distribuere til. Hvis du vil bruke etiketter, ser arbeidsflyten slik ut:
on:
pull_request:
types: [labeled]
Kontrollere kjøring med en betinget jobb
Ofte vil du bare kjøre en arbeidsflyt hvis en bestemt betingelse er sann.
GitHub-arbeidsflyter gir if betinget for dette scenarioet. Det betingede bruker et uttrykk som evalueres ved kjøring. Du vil for eksempel kjøre denne arbeidsflyten hvis en fase etikett legges til pull-forespørselen.
if: contains(github.event.pull_request.labels.*.name, 'stage')
Lagre legitimasjon med GitHub Secrets
Du vil aldri vise sensitiv informasjon i arbeidsflytfilen. GitHub Secrets er et sikkert sted å lagre sensitiv informasjon som arbeidsflyten trenger. Her er et eksempel:
Hvis du vil distribuere til en Azure-ressurs, må GitHub-handlingen ha tillatelse til å få tilgang til ressursen. Du vil ikke lagre Azure-legitimasjonen i vanlig syn i arbeidsflytfilen. I stedet kan du lagre legitimasjonen din i GitHub Secrets.
Hvis du vil lagre informasjon i GitHub Secrets, oppretter du en hemmelighet i portalen.
Bruk deretter navnet på hemmeligheten du opprettet i arbeidsflyten, uansett hvor du trenger denne informasjonen. Bruk for eksempel Azure-legitimasjonen som ble lagret i GitHub Secrets i creds: attributtet til en Azure login-handling.
steps:
- name: "Login via Azure CLI"
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
Distribuer til Microsoft Azure ved hjelp av GitHub-handlinger
GitHub Marketplace- har flere handlinger som hjelper deg med å automatisere Azure-relaterte oppgaver.
Du kan også søke og bla gjennom GitHub-handlinger direkte i et repositoriums redigeringsprogram for arbeidsflyt. Fra sidepanelet kan du søke etter en bestemt handling, vise utvalgte handlinger og bla gjennom utvalgte kategorier.
Slik finner du en handling:
- Bla til arbeidsflytfilen du vil redigere, i repositoriet.
- Velg ikonet Rediger øverst til høyre i filvisningen.
- Bruk GitHub Marketplace-sidepanelet til høyre for redigeringsprogrammet for å bla gjennom handlinger.
La oss si at du vil distribuere en beholderbasert nettapp til Azure Web Apps. Hvis du søker i GitHub Marketplace, finner du disse handlingene:
- azure/webapps-deploy@v1
- azure/login@v1 som vi så tidligere
- azure/docker-login@v1
Hvis du legger til disse handlingene i Deploy-to-Azure jobb, ser arbeidsflyten slik ut:
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
Legg merke til at denne jobben avhenger av en tidligere jobb, Build-Docker-Image. Den forrige jobben oppretter artefakten som distribueres.
Handlingen azure/login@v1 trenger legitimasjon for å logge på Azure-kontoen, slik at den får tilgang til Azure-ressursene du vil distribuere til. Her kan du bruke legitimasjonen vi lagret i GitHub Secrets.
Det samme gjelder for handlingen azure/docker-login@v1. Siden du distribuerer et beholderbilde, må du logge på det private beholderregisteret.
Handlingen azure/webapps-deploy@v1 utfører distribusjonen. Det avhenger av de to foregående handlingene.
Opprette og slette Azure-ressurser ved hjelp av GitHub-handlinger
Siden CD er en automatisert prosess, har du allerede bestemt deg for å bruke infrastruktur som kode for å opprette og ta ned miljøene du distribuerer til. GitHub-handlinger kan automatisere disse oppgavene på Azure, og du kan inkludere disse handlingene i arbeidsflyten.
Notat
Husk at det er viktig å rive ned ressurser som du ikke lenger bruker så snart som mulig for å unngå unødvendige kostnader.
Ett alternativ er å opprette en ny arbeidsflyt med to jobber, en som spinner opp ressurser og ett som sletter dem. Bruk deretter en betinget for å kjøre bare jobben du vil bruke. I dette eksemplet ser det betingede ut etter en etikett i pull-forespørselen og kjører set-up-azure-resources jobb hvis etiketten sette opp miljøet og destroy-azure-resources jobben hvis etiketten ødelegge miljøet.
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')
...
Jobbene bruker Azure CLI til å opprette og ødelegge Azure-ressursene. Hvis du vil ha mer informasjon om Azure CLI, kan du se Oversikt over Azure CLI.
Her er et eksempel på trinnene i set-up-azure-resources jobb:
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}}
Legg merke til at du bruker GitHub-handlinger til å sjekke ut repositoriet og logge på Azure. Deretter oppretter du ressursene du trenger, og distribuerer beholderen ved hjelp av Azure CLI.