Hoe gebruik ik GitHub Actions om te implementeren naar Azure?
In deze les wordt beschreven hoe u GitHub-acties gebruikt om een web-app op basis van containers te implementeren in Microsoft Azure Web Apps. Hierin worden enkele opties besproken voor het activeren van een werkstroom. Vervolgens leert u hoe u met voorwaarden in de werkstroom kunt werken. Ten slotte leert u hoe u Azure-resources maakt en verwijdert met behulp van GitHub Actions.
Opties voor het activeren van een CD-werkstroom
Er zijn diverse opties voor het starten van een CD-werkstroom. In de vorige module over CI met GitHub Actions hebt u geleerd hoe u een werkstroom kunt activeren via een push naar de GitHub-opslagplaats. Voor CD wilt u echter mogelijk een implementatiewerkstroom activeren voor een andere gebeurtenis.
U kunt de werkstroom onder andere activeren met ChatOps. ChatOps maakt gebruik van chatclients, chatbots en realtime communicatiehulpprogramma's om taken uit te voeren. U wilt bijvoorbeeld een specifieke opmerking plaatsen in een pull-aanvraag waardoor een bot kan worden geactiveerd. Die bot kan reageren door u statistieken te geven of door een werkstroom uit te voeren.
Een andere optie is het gebruik van labels in uw pull-aanvraag. Dit is de optie die wij in ons voorbeeld zullen gebruiken. Verschillende labels kunnen verschillende werkstromen starten. Voeg bijvoorbeeld een faselabel toe om een implementatiewerkstroom te starten in uw faseringsomgeving. U kunt ook een omgevingslabel toevoegen om de werkstroom uit te voeren waarmee de Microsoft Azure-resources worden gemaakt waarnaar u kunt implementeren. Als u labels wilt gebruiken, ziet uw werkstroom er als volgt uit:
on:
pull_request:
types: [labeled]
Uitvoeringen beheren met een taakvoorwaarde
Vaak wilt u alleen een werkstroom uitvoeren als er aan een bepaalde voorwaarde wordt voldaan.
GitHub-werkstromen bieden de if
voorwaarde voor dit scenario. De voorwaarde maakt gebruik van een expressie die tijdens runtime wordt geëvalueerd. U wilt deze werkstroom bijvoorbeeld uitvoeren als er een faselabel wordt toegevoegd aan de pull-aanvraag.
if: contains(github.event.pull_request.labels.*.name, 'stage')
Referenties opslaan met GitHub Secrets
U wilt nooit gevoelige informatie beschikbaar maken in het werkstroombestand. GitHub Secrets is een veilige plek om gevoelige informatie op te slaan die uw werkstroom nodig heeft. Dit is een voorbeeld.
Als u wilt implementeren naar een Azure-resource, moet de GitHub Action toestemming hebben voor toegang tot de resource. U wilt natuurlijk niet dat uw Azure-referenties voor het oog van iedereen in het werkstroombestand worden opgeslagen. In plaats daarvan kunt u uw referenties opslaan in GitHub Secrets.
Als u informatie wilt opslaan in GitHub Secrets, maakt u een geheim in de portal.
Gebruik vervolgens de naam van het geheim dat u in uw werkstroom hebt gemaakt, waar u die informatie ook nodig hebt. Gebruik bijvoorbeeld de Azure-referentie die is opgeslagen in GitHub Secrets in het creds:
kenmerk van een Azure-actie login
.
steps:
- name: "Login via Azure CLI"
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
Implementeren naar Microsoft Azure met GitHub Actions
In de GitHub Marketplace staan diverse acties waarmee u Azure-taken kunt automatiseren.
U kunt ook rechtstreeks in de werkstroomeditor van een opslagplaats in GitHub Actions zoeken of bladeren. In de zijbalk kunt u zoeken naar een specifieke actie, aanbevolen acties weergeven en door de weergegeven categorieën bladeren.
Naar een actie zoeken:
- Blader in uw opslagplaats naar het werkstroombestand dat u wilt bewerken.
- Selecteer het pictogram Bewerken in de rechterbovenhoek van de bestandsweergave.
- Gebruik de zijbalk van de GitHub Marketplace rechts van de editor om door acties te bladeren.
Stel dat u een op een containers gebaseerde web-app naar Azure Web Apps wilt implementeren. Als u in GitHub Marketplace zoekt, vindt u deze acties:
- azure/webapps-deploy@v1
- azure/login@v1 die we eerder zagen
- azure/docker-login@v1
Als u deze acties aan de Deploy-to-Azure
-taak toevoegt, ziet uw werkstroom er als volgt uit:
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
U ziet dat deze taak afhankelijk is van een vorige taak, Build-Docker-Image
. Bij de vorige taak werd het te implementeren artefact gemaakt.
De actie azure/login@v1 heeft referenties nodig om u aan te melden bij uw Azure-account, zodat deze toegang heeft tot de Azure-resources waarnaar u wilt implementeren. Gebruik hier de referenties die we hebben opgeslagen in GitHub Secrets.
Hetzelfde geldt voor de actie azure/docker-login@v1 . Omdat u een containerinstallatiekopieën implementeert, moet u zich aanmelden bij uw privécontainerregister.
De actie azure/webapps-deploy@v1 voert de implementatie uit. Dit hangt af van de twee voorgaande acties.
Azure-resources maken en verwijderen met behulp van GitHub Actions
Omdat CD een geautomatiseerd proces is, hebt u al besloten om infrastructuur als code te gebruiken om de omgevingen te maken en uit te schakelen waarnaar u implementeert. GitHub Actions kan deze taken in Azure automatiseren en u kunt deze acties opnemen in uw werkstroom.
Notitie
Houd er rekening mee dat het belangrijk is om resources te verwijderen die u niet meer zo snel mogelijk gebruikt om onnodige kosten te voorkomen.
Een van de opties is om een nieuwe werkstroom met twee taken te maken: met de ene taak worden resources gemaakt en met de andere taak worden deze verwijderd. Gebruik vervolgens een voorwaarde om alleen de gewenste taak uit te voeren. In dit voorbeeld zoekt de voorwaarde naar een label in de pull-aanvraag en wordt de set-up-azure-resources
-taak uitgevoerd als het label omgeving maken is, en wordt de destroy-azure-resources
-taak uitgevoerd als het label omgeving vernietigen is.
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')
...
Voor de taken wordt de Azure CLI gebruikt om de Azure-resources te maken en te vernietigen. Zie Overzicht van Azure CLI voor meer informatie over Azure CLI.
Hier ziet u een voorbeeld van de stappen in de set-up-azure-resources
-taak:
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}}
U ziet dat u GitHub Actions gebruikt om de opslagplaats te controleren en u bij Azure aan te melden. Daarna maakt u de resources die u nodig hebt en implementeert u de container met behulp van de Azure CLI.