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:
- GitHub-werkstroom configureren: maak een werkstroom in een GitHub-opslagplaats met behulp van de actie Implementeren in Azure Container Instances en andere acties.
- Cli-extensie gebruiken: gebruik de
az container app up
opdracht in de Azure-extensie Implementeren in de Azure CLI. Met deze opdracht wordt het maken van de GitHub-werkstroom en implementatiestappen gestroomlijnd.
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.
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 clientId
service-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
Navigeer in de GitHub-gebruikersinterface naar uw geforkte opslagplaats en selecteer Beveiligingsgeheimen > > en -variabelenacties.
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
- Selecteer Acties in de GitHub-gebruikersinterface.
- Selecteer zelf een werkstroom instellen.
- Plak in Het nieuwe bestand bewerken de volgende YAML-inhoud om de voorbeeldcode te overschrijven. Accepteer de standaardbestandsnaam
main.yml
of geef een bestandsnaam op die u kiest. - 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>.
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.
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