Cum utilizez acțiuni GitHub pentru a implementa în Azure?
Această unitate prezintă cum să utilizați acțiunile GitHub pentru a implementa o aplicație web bazată pe container în Microsoft Azure Web Apps. Acesta descrie câteva opțiuni pentru declanșarea unui flux de lucru. În continuare, veți afla cum să lucrați cu condiționale în fluxul de lucru. În cele din urmă, aflați cum să creați și să ștergeți resurse Azure utilizând Acțiuni GitHub.
Opțiuni pentru declanșarea unui flux de lucru CD
Există mai multe opțiuni pentru pornirea unui flux de lucru CD. În modulul anterior de pe CI cu acțiuni GitHub, ați învățat cum să declanșați un flux de lucru de la un push către depozitul GitHub. Cu toate acestea, pentru CD, se recomandă să declanșați un flux de lucru de implementare pentru alt eveniment.
O opțiune este să declanșați fluxul de lucru cu ChatOps. ChatOps utilizează clienții de chat, chatbot-urile și instrumentele de comunicare în timp real pentru a rula activități. De exemplu, puteți lăsa un anumit comentariu într-o solicitare de tragere care poate începe un robot. Acest robot poate să comenteze din nou cu unele statistici sau să ruleze un flux de lucru.
O altă opțiune și cea pe care o utilizăm în exemplul nostru este să utilizați etichete în solicitarea dvs. de tragere. Etichete diferite pot porni fluxuri de lucru diferite. De exemplu, adăugați o etichetă etapă pentru a începe un flux de lucru de implementare în mediul dvs. de migrare sau adăugați o etichetă etichetă pentru a rula fluxul de lucru care creează resursele Microsoft Azure în care să implementați. Pentru a utiliza etichete, fluxul de lucru arată astfel:
on:
pull_request:
types: [labeled]
Controlați executarea cu o operațiune condiționată
Adesea, doriți să rulați un flux de lucru doar dacă este adevărată o anumită condiție.
Fluxurile de lucru GitHub furnizează condițional if pentru acest scenariu. Condițional utilizează o expresie care este evaluată la momentul rulării. De exemplu, doriți să rulați acest flux de lucru dacă o etapă etichetă este adăugată la solicitarea de extragere.
if: contains(github.event.pull_request.labels.*.name, 'stage')
Stocarea acreditărilor cu GitHub Secrete
Nu doriți niciodată să expuneți informații sensibile în fișierul flux de lucru. Secretele GitHub sunt un loc sigur pentru a stoca informații sensibile de care are nevoie fluxul dvs. de lucru. Iată un exemplu:
Pentru a implementa într-o resursă Azure, acțiunea GitHub trebuie să aibă permisiunea de a accesa resursa. Nu doriți să stocați acreditările Azure la vedere în fișierul flux de lucru. În schimb, vă puteți stoca acreditările în Secretele GitHub.
Pentru a stoca informații în Secretele GitHub, creați un secret pe portal.
Apoi, utilizați numele secretului pe care l-ați creat în fluxul de lucru oriunde aveți nevoie de aceste informații. De exemplu, utilizați acreditarea Azure care a fost stocată în Secretele GitHub din atributul creds: al unei acțiuni de login Azure.
steps:
- name: "Login via Azure CLI"
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
Implementarea în Microsoft Azure utilizând acțiuni GitHub
GitHub Marketplace are mai multe acțiuni care vă ajută să automatizați activitățile legate de Azure.
De asemenea, puteți căuta și răsfoi acțiuni GitHub direct într-un editor de flux de lucru al unui depozit. Din bara laterală, puteți să căutați o anumită acțiune, să vizualizați Acțiuni recomandate și să navigați prin categoriile recomandate.
Pentru a găsi o acțiune:
- În depozit, navigați la fișierul flux de lucru pe care doriți să-l editați.
- Selectați pictograma Editare din colțul din dreapta sus al vizualizării fișierului.
- Utilizați bara laterală GitHub Marketplace din partea dreaptă a editorului pentru a parcurge Acțiuni.
Să presupunem că doriți să implementați o aplicație web bazată pe container în Azure Web Apps. Dacă căutați în GitHub Marketplace, găsiți aceste acțiuni:
- azure/webapps-deploy@v1
- azure/login@v1 pe care le-am văzut anterior
- azure/docker-login@v1
Dacă adăugați aceste acțiuni la activitatea de Deploy-to-Azure, fluxul dvs. de lucru arată astfel:
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
Observați că această activitate depinde de o activitate anterioară, Build-Docker-Image. Lucrarea anterioară creează artefactul care se implementează.
Acțiunea azure/login@v1 necesită acreditări pentru a vă conecta la contul dvs. Azure, astfel încât să poată accesa resursele Azure la care doriți să implementați. Aici, utilizați acreditările pe care le-am stocat în Secretele GitHub.
Același lucru este valabil și pentru acțiunea de azure/docker-login@v1. Pentru că implementați o imagine de container, trebuie să vă conectați la registry-ul containerului privat.
Acțiunea azure/webapps-deploy@v1 efectuează implementarea. Depinde de cele două acțiuni anterioare.
Crearea și ștergerea resurselor Azure utilizând Acțiuni GitHub
Deoarece CD-ul este un proces automat, ați decis deja să utilizați infrastructura ca cod pentru a crea și a lua în jos mediile pe care le implementați. Acțiunile GitHub pot automatiza aceste activități în Azure și puteți include aceste acțiuni în fluxul de lucru.
Notă
Rețineți că este important să eliminați resursele pe care nu le mai utilizați cât mai curând posibil, pentru a evita taxele inutile.
O opțiune este să creați un nou flux de lucru cu două activități, unul care rotește resurse și unul care le șterge. Apoi utilizați o condiție pentru a rula doar activitatea dorită. În acest exemplu, condiționalul caută o etichetă în solicitarea de extragere și rulează activitatea de set-up-azure-resources dacă eticheta este se rotește în mediu și destroy-azure-resources dacă eticheta este distruge mediul.
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')
...
Lucrările utilizează AZURE CLI pentru a crea și a distruge resursele Azure. Pentru mai multe informații despre Azure CLI, consultați Prezentare generală aAzure CLI .
Iată un exemplu de pași din activitatea de 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}}
Observați că utilizați acțiunile GitHub pentru a extrage depozitul și a vă conecta la Azure. După aceea, creați resursele de care aveți nevoie și implementați containerul utilizând Azure CLI.