Dela via


Konfigurera en GitHub-åtgärd för att skapa en containerinstans

GitHub Actions är en uppsättning funktioner i GitHub för att automatisera dina arbetsflöden för programvaruutveckling på samma plats som du lagrar kod och samarbetar med pull-begäranden och problem.

Använd GitHub Actions för att distribuera till Azure Container Instances för att automatisera distributionen av en enda container till Azure Container Instances. Med åtgärden kan du ange egenskaper för en containerinstans som liknar dem i kommandot az container create .

Den här artikeln visar hur du konfigurerar ett arbetsflöde på en GitHub-lagringsplats som utför följande åtgärder:

  • Skapa en avbildning från en Dockerfile
  • Skicka avbildningen till ett Azure-containerregister
  • Distribuera containeravbildningen till en Azure-containerinstans

Den här artikeln visar två sätt att konfigurera arbetsflödet:

Viktigt!

GitHub Actions för Azure Container Instances är för närvarande i förhandsversion. Förhandsversioner är tillgängliga för dig under förutsättning att du godkänner de kompletterande användningsvillkoren. Vissa aspekter av funktionen kan ändras innan den är allmänt tillgänglig (GA).

Förutsättningar

  • GitHub-konto – Skapa ett konto på https://github.com om du inte redan har ett.
  • Azure CLI – Du kan använda Azure Cloud Shell eller en lokal installation av Azure CLI för att slutföra Azure CLI-stegen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Azure-containerregister – Om du inte har något skapar du ett Azure-containerregister på Basic-nivån med hjälp av Azure CLI, Azure-portalen eller andra metoder. Anteckna resursgruppen som används för distributionen, som används för GitHub-arbetsflödet.

Konfigurera lagringsplats

  • För exemplen i den här artikeln använder du GitHub för att förgrena följande lagringsplats: https://github.com/Azure-Samples/acr-build-helloworld-node

    Den här lagringsplatsen innehåller en Dockerfile och källfiler för att skapa en containeravbildning av en liten webbapp.

    Skärmbild av knappen Förgrening (markerad) i GitHub

  • Se till att Åtgärder är aktiverade för lagringsplatsen. Gå till din förgrenade lagringsplats och välj Inställningar>åtgärder. I Behörigheter för åtgärder kontrollerar du att Tillåt alla åtgärder har valts.

Konfigurera GitHub-arbetsflöde

Skapa autentiseringsuppgifter för Azure-autentisering

I GitHub-arbetsflödet måste du ange Azure-autentiseringsuppgifter för att autentisera till Azure CLI. I följande exempel skapas ett huvudnamn för tjänsten med rollen Deltagare begränsad till resursgruppen för containerregistret.

Hämta först resurs-ID:t för resursgruppen. Ersätt namnet på din grupp i följande az group show-kommando :

groupId=$(az group show \
  --name <resource-group-name> \
  --query id --output tsv)

Använd az ad sp create-for-rbac för att skapa tjänstens huvudnamn:

az ad sp create-for-rbac \
  --scope $groupId \
  --role Contributor \
  --sdk-auth

Utdata liknar följande:

{
  "clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
  "clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
  "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

Spara JSON-utdata eftersom det används i ett senare steg. Anteckna även , clientIdsom du behöver uppdatera tjänstens huvudnamn i nästa avsnitt.

Uppdatering för registerautentisering

Uppdatera autentiseringsuppgifterna för Azure-tjänstens huvudnamn för att tillåta push- och pull-åtkomst till containerregistret. Det här steget gör att GitHub-arbetsflödet kan använda tjänstens huvudnamn för att autentisera med containerregistret och push-överföra och hämta en Docker-avbildning.

Hämta resurs-ID:t för containerregistret. Ersätt namnet på registret i följande az acr show-kommando :

registryId=$(az acr show \
  --name <registry-name> \
  --resource-group <resource-group-name> \
  --query id --output tsv)

Använd az role assignment create för att tilldela AcrPush-rollen, vilket ger push- och pull-åtkomst till registret. Ersätt klient-ID:t för tjänstens huvudnamn:

az role assignment create \
  --assignee <ClientId> \
  --scope $registryId \
  --role AcrPush

Spara autentiseringsuppgifter på GitHub-lagringsplatsen

  1. I GitHub-användargränssnittet navigerar du till din förgrenade lagringsplats och väljer Säkerhetshemligheter > > och variabler Åtgärder.

  2. Välj Ny lagringsplatshemlighet för att lägga till följande hemligheter:

Hemlig Värde
AZURE_CREDENTIALS Hela JSON-utdata från steget för att skapa tjänstens huvudnamn
REGISTRY_LOGIN_SERVER Inloggningsservernamnet för ditt register (alla gemener). Exempel: myregistry.azurecr.io
REGISTRY_USERNAME clientId Från JSON-utdata från skapandet av tjänstens huvudnamn
REGISTRY_PASSWORD clientSecret Från JSON-utdata från skapandet av tjänstens huvudnamn
RESOURCE_GROUP Namnet på resursgruppen som du använde för att begränsa tjänstens huvudnamn

Skapa arbetsflödesfil

  1. I GitHub-användargränssnittet väljer du Åtgärder.
  2. Välj konfigurera ett arbetsflöde själv.
  3. I Redigera ny fil klistrar du in följande YAML-innehåll för att skriva över exempelkoden. Acceptera standardfilnamnet main.ymleller ange ett filnamn som du väljer.
  4. Välj Starta incheckning, ange även korta och utökade beskrivningar av incheckningen och välj Checka in ny fil.
on: [push]
name: Linux_Container_Workflow

jobs:
    build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        # checkout the repo
        - name: 'Checkout GitHub Action'
          uses: actions/checkout@main
          
        - name: 'Login via Azure CLI'
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
        
        - name: 'Build and push image'
          uses: azure/docker-login@v1
          with:
            login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            username: ${{ secrets.REGISTRY_USERNAME }}
            password: ${{ secrets.REGISTRY_PASSWORD }}
        - run: |
            docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}

        - name: 'Deploy to Azure Container Instances'
          uses: 'azure/aci-deploy@v1'
          with:
            resource-group: ${{ secrets.RESOURCE_GROUP }}
            dns-name-label: ${{ secrets.RESOURCE_GROUP }}${{ github.run_number }}
            image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            registry-username: ${{ secrets.REGISTRY_USERNAME }}
            registry-password: ${{ secrets.REGISTRY_PASSWORD }}
            name: aci-sampleapp
            location: 'west us'

Verifiera arbetsflöde

När du har checkat in arbetsflödesfilen utlöses arbetsflödet. Om du vill granska arbetsflödets förlopp går du till Åtgärdsarbetsflöden>.

Visa arbetsflödets förlopp

Mer information om hur du visar status och resultat för varje steg i arbetsflödet finns i Visa arbetsflödeskörningshistorik . Om arbetsflödet inte slutförs läser du Visa loggar för att diagnostisera fel.

När arbetsflödet har slutförts hämtar du information om containerinstansen med namnet aci-sampleapp genom att köra kommandot az container show . Ersätt namnet på resursgruppen:

az container show \
  --resource-group <resource-group-name> \
  --name aci-sampleapp \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

Utdata liknar följande:

FQDN                                   ProvisioningState
---------------------------------      -------------------
aci-action01.westus.azurecontainer.io  Succeeded

När instansen har etablerats går du till containerns FQDN i webbläsaren för att visa webbappen som körs.

Köra webbapp i webbläsare

Använda Distribuera till Azure-tillägg

Du kan också använda tillägget Distribuera till Azure i Azure CLI för att konfigurera arbetsflödet. Kommandot az container app up i tillägget tar indataparametrar från dig för att konfigurera ett arbetsflöde för distribution till Azure Container Instances.

Arbetsflödet som skapas av Azure CLI liknar det arbetsflöde som du kan skapa manuellt med GitHub.

Ytterligare förutsättningar

Förutom förutsättningarna och lagringsplatsen för det här scenariot måste du installera tillägget Distribuera till Azure för Azure CLI.

Kör kommandot az extension add för att installera tillägget:

az extension add \
  --name deploy-to-azure

Information om hur du hittar, installerar och hanterar tillägg finns i Använda tillägg med Azure CLI.

Kör az container app up

Om du vill köra kommandot az container app up anger du minst:

  • Namnet på ditt Azure-containerregister, till exempel myregistry
  • URL:en till din GitHub-lagringsplats, till exempel https://github.com/<your-GitHub-Id>/acr-build-helloworld-node

Exempel-kommando:

az container app up \
  --acr myregistry \
  --repository https://github.com/myID/acr-build-helloworld-node

Kommandots förlopp

  • När du uppmanas till det anger du dina GitHub-autentiseringsuppgifter eller anger en personlig åtkomsttoken för GitHub (PAT) som har lagringsplats och användaromfattningar för att autentisera med ditt GitHub-konto. Om du anger GitHub-autentiseringsuppgifter skapar kommandot en PAT åt dig. Följ ytterligare uppmaningar för att konfigurera arbetsflödet.

  • Kommandot skapar lagringsplatshemligheter för arbetsflödet:

    • Autentiseringsuppgifter för tjänstens huvudnamn för Azure CLI
    • Autentiseringsuppgifter för åtkomst till Azure-containerregistret
  • När kommandot checkar in arbetsflödesfilen på lagringsplatsen utlöses arbetsflödet.

Utdata liknar följande:

[...]
Checking in file github/workflows/main.yml in the GitHub repository myid/acr-build-helloworld-node
Creating workflow...
GitHub Action Workflow has been created - https://github.com/myid/acr-build-helloworld-node/runs/515192398
GitHub workflow completed.
Workflow succeeded
Your app is deployed at:  http://acr-build-helloworld-node.eastus.azurecontainer.io:8080/

Information om hur du visar arbetsflödesstatus och resultat för varje steg i GitHub-användargränssnittet finns i Visa arbetsflödeskörningshistorik.

Verifiera arbetsflöde

Arbetsflödet distribuerar en Azure-containerinstans med basnamnet för din GitHub-lagringsplats, i det här fallet acr-build-helloworld-node. När arbetsflödet har slutförts hämtar du information om containerinstansen med namnet acr-build-helloworld-node genom att köra kommandot az container show . Ersätt namnet på resursgruppen:

az container show \
  --resource-group <resource-group-name> \
  --name acr-build-helloworld-node \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

Utdata liknar följande:

FQDN                                                   ProvisioningState
---------------------------------                      -------------------
acr-build-helloworld-node.westus.azurecontainer.io     Succeeded

När instansen har etablerats går du till containerns FQDN i webbläsaren för att visa webbappen som körs.

Rensa resurser

Stoppa behållarinstansen med kommandot az container delete:

az container delete \
  --name <instance-name>
  --resource-group <resource-group-name>

Om du vill ta bort resursgruppen och alla resurser i den kör du kommandot az group delete :

az group delete \
  --name <resource-group-name>

Nästa steg

Bläddra till GitHub Marketplace för fler åtgärder för att automatisera ditt arbetsflöde för utveckling