Delen via


Een GitHub Action configureren om een containerinstantie te maken

GitHub Actions is een suite met functies in GitHub om uw werkstromen voor softwareontwikkeling te automatiseren op dezelfde plaats waar u code opslaat en samenwerkt aan pull-aanvragen en problemen.

Gebruik de Implementatie naar Azure Container Instances GitHub Actions om de implementatie van één container naar Azure Container Instances te automatiseren. Met de actie kunt u eigenschappen instellen voor een containerinstantie die vergelijkbaar is met die in de opdracht az container create .

In dit artikel wordt beschreven hoe u een werkstroom instelt in een GitHub-opslagplaats die de volgende acties uitvoert:

  • Een installatiekopie bouwen op basis van een Dockerfile
  • De installatiekopieën naar een Azure-containerregister pushen
  • De containerinstallatiekopieën implementeren in een Azure-containerinstantie

In dit artikel worden twee manieren beschreven om de werkstroom in te stellen:

Belangrijk

De GitHub Actions voor Azure Container Instances is momenteel in preview. Previews worden voor u beschikbaar gesteld op voorwaarde dat u akkoord gaat met de aanvullende gebruiksvoorwaarden. Sommige aspecten van deze functie worden mogelijk nog gewijzigd voordat de functie algemeen beschikbaar wordt.

Vereisten

  • GitHub-account : maak een account op https://github.com als u er nog geen hebt.
  • Azure CLI : u kunt de Azure Cloud Shell of een lokale installatie van de Azure CLI gebruiken om de Azure CLI-stappen te voltooien. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
  • Azure Container Registry: als u er nog geen hebt, maakt u een Azure-containerregister in de Basic-laag met behulp van de Azure CLI, Azure Portal of andere methoden. Noteer de resourcegroep die wordt gebruikt voor de implementatie, die wordt gebruikt voor de GitHub-werkstroom.

Opslagplaats instellen

  • Gebruik GitHub voor de voorbeelden in dit artikel om de volgende opslagplaats te splitsen: https://github.com/Azure-Samples/acr-build-helloworld-node

    Deze opslagplaats bevat een Dockerfile en bronbestanden om een containerinstallatiekopieën van een kleine web-app te maken.

    Schermafbeelding van de knop Fork (gemarkeerd) in GitHub

  • Zorg ervoor dat Acties is ingeschakeld voor uw opslagplaats. Navigeer naar uw geforkte opslagplaats en selecteer Instellingenacties>. Zorg ervoor dat in actiesmachtigingen alle acties toestaan is geselecteerd.

GitHub-werkstroom configureren

Referenties maken voor Azure-verificatie

In de GitHub-werkstroom moet u Azure-referenties opgeven om te verifiëren bij de Azure CLI. In het volgende voorbeeld wordt een service-principal gemaakt met de rol Inzender die is gericht op de resourcegroep voor uw containerregister.

Haal eerst de resource-id van uw resourcegroep op. Vervang de naam van uw groep in de volgende opdracht az group show :

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

Gebruik az ad sp create-for-rbac om de service-principal te maken:

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

De uitvoer ziet er ongeveer zo uit:

{
  "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/"
}

Sla de JSON-uitvoer op omdat deze in een latere stap wordt gebruikt. Noteer ook de clientIdservice-principal die u in de volgende sectie moet bijwerken.

Update voor registerverificatie

Werk de referenties van de Azure-service-principal bij om push- en pull-toegang tot uw containerregister toe te staan. Met deze stap kan de GitHub-werkstroom de service-principal gebruiken om te verifiëren met uw containerregister en een Docker-installatiekopie te pushen en op te halen.

Haal de resource-id van uw containerregister op. Vervang de naam van uw register in de volgende opdracht az acr show :

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

Gebruik az role assignment create om de AcrPush-rol toe te wijzen, waardoor push- en pull-toegang tot het register wordt verleend. Vervang de client-id van uw service-principal:

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

Referenties opslaan in GitHub-opslagplaats

  1. Navigeer in de GitHub-gebruikersinterface naar uw geforkte opslagplaats en selecteer Beveiligingsgeheimen > > en -variabelenacties.

  2. Selecteer Nieuw opslagplaatsgeheim om de volgende geheimen toe te voegen:

Geheim Weergegeven als
AZURE_CREDENTIALS De volledige JSON-uitvoer van de stap voor het maken van de service-principal
REGISTRY_LOGIN_SERVER De naam van de aanmeldingsserver van uw register (allemaal kleine letters). Voorbeeld: myregistry.azurecr.io
REGISTRY_USERNAME De clientId uit de JSON-uitvoer van het maken van de service-principal
REGISTRY_PASSWORD De clientSecret uit de JSON-uitvoer van het maken van de service-principal
RESOURCE_GROUP De naam van de resourcegroep die u hebt gebruikt om het bereik van de service-principal te bepalen

Werkstroombestand maken

  1. Selecteer Acties in de GitHub-gebruikersinterface.
  2. Selecteer zelf een werkstroom instellen.
  3. Plak in Het nieuwe bestand bewerken de volgende YAML-inhoud om de voorbeeldcode te overschrijven. Accepteer de standaardbestandsnaam main.ymlof geef een bestandsnaam op die u kiest.
  4. Selecteer Doorvoer starten, geef desgewenst korte en uitgebreide beschrijvingen van uw doorvoering op en selecteer Nieuw bestand doorvoeren.
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'

Werkstroom valideren

Nadat u het werkstroombestand hebt doorgevoerd, wordt de werkstroom geactiveerd. Als u de voortgang van de werkstroom wilt bekijken, gaat u naar Werkstromen voor acties>.

Voortgang van werkstroom weergeven

Zie Uitvoeringsgeschiedenis van werkstroom weergeven voor informatie over het weergeven van de status en resultaten van elke stap in uw werkstroom. Als de werkstroom niet is voltooid, raadpleegt u Logboeken weergeven om fouten vast te stellen.

Wanneer de werkstroom is voltooid, haalt u informatie op over het containerexemplaar met de naam aci-sampleapp door de opdracht az container show uit te voeren. Vervang de naam van uw resourcegroep:

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

De uitvoer ziet er ongeveer zo uit:

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

Nadat het exemplaar is ingericht, gaat u naar de FQDN van de container in uw browser om de actieve web-app weer te geven.

Web-app uitvoeren in browser

Implementeren in Azure-extensie gebruiken

U kunt ook de azure-extensie Implementeren in de Azure CLI gebruiken om de werkstroom te configureren. Met az container app up de opdracht in de extensie worden invoerparameters van u gebruikt om een werkstroom in te stellen voor implementatie in Azure Container Instances.

De werkstroom die door de Azure CLI is gemaakt, is vergelijkbaar met de werkstroom die u handmatig kunt maken met behulp van GitHub.

Aanvullende vereisten

Naast de vereisten en het instellen van opslagplaatsen voor dit scenario moet u de implementatie naar de Azure-extensie voor de Azure CLI installeren.

Voer de opdracht az extension add uit om de extensie te installeren:

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

Zie Extensies gebruiken met Azure CLI voor meer informatie over het zoeken, installeren en beheren van extensies.

az container app up uitvoeren

Als u de opdracht az container app up wilt uitvoeren, geeft u minimaal het volgende op:

  • De naam van uw Azure-containerregister, bijvoorbeeld myregistry
  • De URL naar uw GitHub-opslagplaats, bijvoorbeeld https://github.com/<your-GitHub-Id>/acr-build-helloworld-node

Voorbeeldopdracht:

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

Voortgang van opdracht

  • Wanneer u hierom wordt gevraagd, geeft u uw GitHub-referenties op of geeft u een persoonlijk GitHub-toegangstoken (PAT) op met opslagplaatsen en gebruikersbereiken voor verificatie met uw GitHub-account. Als u GitHub-referenties opgeeft, wordt met de opdracht een PAT voor u gemaakt. Volg aanvullende aanwijzingen om de werkstroom te configureren.

  • Met de opdracht maakt u opslagplaatsgeheimen voor de werkstroom:

    • Referenties voor de service-principal voor de Azure CLI
    • Referenties voor toegang tot het Azure-containerregister
  • Nadat de opdracht het werkstroombestand heeft doorgevoerd in uw opslagplaats, wordt de werkstroom geactiveerd.

De uitvoer ziet er ongeveer zo uit:

[...]
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/

Als u de werkstroomstatus en de resultaten van elke stap in de GitHub-gebruikersinterface wilt weergeven, raadpleegt u De uitvoeringsgeschiedenis van de werkstroom weergeven.

Werkstroom valideren

De werkstroom implementeert een Azure-containerinstantie met de basisnaam van uw GitHub-opslagplaats, in dit geval acr-build-helloworld-node. Wanneer de werkstroom is voltooid, haalt u informatie op over het containerexemplaren met de naam acr-build-helloworld-node door de opdracht az container show uit te voeren. Vervang de naam van uw resourcegroep:

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

De uitvoer ziet er ongeveer zo uit:

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

Nadat het exemplaar is ingericht, gaat u naar de FQDN van de container in uw browser om de actieve web-app weer te geven.

Resources opschonen

Stop de containerinstantie met de opdracht az container delete:

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

Als u de resourcegroep en alle resources erin wilt verwijderen, voert u de opdracht az group delete uit:

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

Volgende stappen

Blader door de GitHub Marketplace voor meer acties om uw ontwikkelwerkstroom te automatiseren