Distribuera en anpassad container till App Service med GitHub Actions
GitHub Actions ger dig flexibiliteten att skapa ett automatiserat arbetsflöde för programutveckling. Med åtgärden Azure Web Deploykan du automatisera arbetsflödet för att distribuera anpassade containrar till App Service med GitHub Actions.
Ett arbetsflöde definieras av en YAML-fil (.yml) i /.github/workflows/ sökvägen på lagringsplatsen. Den här definitionen innehåller de olika stegen och parametrarna som finns i arbetsflödet.
För ett Azure App Service containerarbetsflöde har filen tre avsnitt:
| Avsnitt | Uppgifter |
|---|---|
| Autentisering | 1. Hämta ett huvudnamn för tjänsten eller publicera profil. 2. Skapa en GitHub-hemlighet. |
| Skapa | 1. Skapa miljön. 2. Skapa containeravbildningen. |
| Distribuera | 1. Distribuera containeravbildningen. |
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto kostnadsfritt
- Ett GitHub-konto. Om du inte har någon kan du registrera dig kostnadsfritt. Du måste ha kod på en GitHub-lagringsplats för att kunna distribuera till Azure App Service.
- Ett fungerande containerregister och en Azure App Service för containrar. I det här exemplet används Azure Container Registry. Se till att slutföra den fullständiga distributionen för Azure App Service för containrar. Till skillnad från vanliga webbappar har webbappar för containrar inte någon standardlandningssida. Publicera containern för att få ett fungerande exempel.
Generera autentiseringsuppgifter för distribution
Det rekommenderade sättet att autentisera med Azure App Services för GitHub Actions är med en publiceringsprofil. Du kan också autentisera med ett huvudnamn för tjänsten, men processen kräver fler steg.
Spara dina autentiseringsuppgifter för publiceringsprofilen eller tjänstens huvudnamn som en GitHub-hemlighet för att autentisera med Azure. Du kommer åt hemligheten i arbetsflödet.
En publiceringsprofil är autentiseringsuppgifter på appnivå. Konfigurera din publiceringsprofil som en GitHub-hemlighet.
Gå till apptjänsten i Azure Portal.
På sidan Översikt väljer du Hämta publiceringsprofil.
Anteckning
Från och med oktober 2020 behöver Linux-webbappar appinställningen inställd
WEBSITE_WEBDEPLOY_USE_SCMpå innan filen laddastruened. Det här kravet kommer att tas bort i framtiden. Se Konfigurera en App Service-app i Azure Portalför att lära dig hur du konfigurerar vanliga webbappinställningar.Spara den hämtade filen. Du använder innehållet i filen för att skapa en GitHub-hemlighet.
Konfigurera GitHub-hemligheten för autentisering
I GitHubbläddrar du till din lagringsplats och väljer Inställningar > Hemligheter > Lägg till en ny hemlighet.
Om du vill använda autentiseringsuppgifter påappnivå klistrar du in innehållet i den nedladdade publiceringsprofilfilen i hemlighetens värdefält. Ge hemligheten namnet AZURE_WEBAPP_PUBLISH_PROFILE .
När du konfigurerar ditt GitHub-arbetsflöde använder du AZURE_WEBAPP_PUBLISH_PROFILE åtgärden för att distribuera Azure Web App. Exempel:
- uses: azure/webapps-deploy@v2
with:
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
Konfigurera GitHub-hemligheter för ditt register
Definiera hemligheter som ska användas med åtgärden Docker-inloggning. Exemplet i det här dokumentet använder Azure Container Registry för containerregistret.
Gå till containern i Azure Portal eller Docker och kopiera användarnamnet och lösenordet. Du hittar det Azure Container Registry användarnamnet och lösenordet i Azure Portal under Inställningar > Åtkomstnycklar för ditt register.
Definiera en ny hemlighet för registrets användarnamn med namnet
REGISTRY_USERNAME.Definiera en ny hemlighet för registerlösenordet med namnet
REGISTRY_PASSWORD.
Skapa containeravbildningen
I följande exempel visas en del av arbetsflödet som skapar en Node.JS Docker-avbildning. Använd Docker-inloggning för att logga in på ett privat containerregister. I det här Azure Container Registry används samma åtgärd för andra register.
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
Du kan också använda Docker-inloggning för att logga in på flera containerregister samtidigt. Det här exemplet innehåller två nya GitHub-hemligheter för autentisering med docker.io. Exemplet förutsätter att det finns en Dockerfile på registrets rotnivå.
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- uses: azure/docker-login@v1
with:
login-server: index.docker.io
username: ${{ secrets.DOCKERIO_USERNAME }}
password: ${{ secrets.DOCKERIO_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
Distribuera till en App Service container
Om du vill distribuera avbildningen till en anpassad container App Service använder du azure/webapps-deploy@v2 åtgärden . Den här åtgärden har sju parametrar:
| Parameter | Förklaring |
|---|---|
| appnamn | (Krävs) Namnet på App Service appen |
| publicera profil | (Valfritt) Gäller för Web Apps(Windows och Linux) och Web App Containers (linux). Scenario med flera containrar stöds inte. Filinnehåll för * publiceringsprofil (.publishsettings) med Web Deploy-hemligheter |
| facknamn | (Valfritt) Ange en befintlig plats förutom produktionsplatsen |
| Paket | (Valfritt) Gäller endast webbapp: Sökväg till paket eller mapp. *.zip, * .war, * .jar eller en mapp som ska distribueras |
| Bilder | (Krävs) Gäller endast webappcontainrar: Ange namnet på den eller de fullständigt kvalificerade containeravbildningarna. Till exempel "myregistry.azurecr.io/nginx:latest" eller "python:3.7.2-alpine/". För en app med flera containrar kan flera containeravbildningsnamn anges (avgränsade med flera linjer) |
| configuration-file | (Valfritt) Gäller endast webappcontainrar: sökvägen till Docker-Compose fil. Bör vara en fullständigt kvalificerad sökväg eller relativ till standardarbetskatalogen. Krävs för appar med flera containrar. |
| startup-command | (Valfritt) Ange startkommandot. Till exempel dotnet run eller dotnet filename.dll |
name: Linux Container Node Workflow
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: mycontainer.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
docker push mycontainer.azurecr.io/myapp:${{ github.sha }}
- uses: azure/webapps-deploy@v2
with:
app-name: 'myapp'
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'
Nästa steg
Du hittar vår uppsättning åtgärder grupperade i olika lagringsplatsen på GitHub, där var och en innehåller dokumentation och exempel som hjälper dig att använda GitHub för CI/CD och distribuera dina appar till Azure.