Konfigurace akce GitHubu pro vytvoření instance kontejneru

GitHub Actions je sada funkcí v GitHubu, která automatizuje pracovní postupy vývoje softwaru na stejném místě, kde ukládáte kód a spolupracujete na žádostech o přijetí změn a problémech.

Pomocí příkazu Deploy to Azure Container Instances GitHub Actions můžete automatizovat nasazení jednoho kontejneru do služby Azure Container Instances. Akce umožňuje nastavit vlastnosti instance kontejneru podobné těm v příkazu az container create .

Tento článek ukazuje, jak nastavit pracovní postup v úložišti GitHubu, který provádí následující akce:

  • Sestavení image ze souboru Dockerfile
  • Nahrání image do registru kontejneru Azure
  • Nasazení image kontejneru do instance kontejneru Azure

Tento článek ukazuje dva způsoby nastavení pracovního postupu:

Důležité

GitHub Actions pro službu Azure Container Instances je aktuálně ve verzi Preview. Verze Preview vám zpřístupňujeme pod podmínkou, že budete souhlasit s dodatečnými podmínkami použití. Některé aspekty této funkce se můžou před zveřejněním změnit.

Požadavky

  • Účet GitHub – Pokud ho ještě nemáte, vytvořte si https://github.com ho.
  • Azure CLI – K dokončení kroků Azure CLI můžete použít Azure Cloud Shell nebo místní instalaci Azure CLI. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
  • Registr kontejnerů Azure – Pokud ho nemáte, vytvořte registr kontejnerů Azure na úrovni Basic pomocí Azure CLI, webu Azure Portal nebo jiných metod. Poznamenejte si skupinu prostředků používanou pro nasazení, která se používá pro pracovní postup GitHubu.

Nastavení úložiště

  • V příkladech v tomto článku použijte GitHub k forku následujícího úložiště: https://github.com/Azure-Samples/acr-build-helloworld-node

    Toto úložiště obsahuje soubor Dockerfile a zdrojové soubory pro vytvoření image kontejneru malé webové aplikace.

    Snímek obrazovky s tlačítkem forku (zvýrazněným) v GitHubu

  • Ujistěte se, že je pro vaše úložiště povolené akce. Přejděte do rozvětvovaného úložiště a vyberte Nastavení> Akce. V části Oprávnění Akce se ujistěte, že je vybraná možnost Povolit všechny akce .

Konfigurace pracovního postupu GitHubu

Vytvoření přihlašovacích údajů pro ověřování Azure

V pracovním postupu GitHubu musíte zadat přihlašovací údaje Azure pro ověření v Azure CLI. Následující příklad vytvoří instanční objekt s rolí Přispěvatel vymezenou na skupinu prostředků pro váš registr kontejneru.

Nejprve získejte ID prostředku vaší skupiny prostředků. Nahraďte název skupiny v následujícím příkazu az group show :

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

Pomocí příkazu az ad sp create-for-rbac vytvořte instanční objekt:

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

Výstup se podobá tomuto:

{
  "clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
  "clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
  "subscriptionId": "xxxx251c-xxxx-xxxx-xxxx-bf99a306xxxx",
  "tenantId": "xxxx88bf-xxxx-xxxx-xxxx-2d7cd011xxxx",
  "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/"
}

Uložte výstup JSON, protože se používá v pozdějším kroku. Poznamenejte si clientIdtaké , který potřebujete aktualizovat instanční objekt v další části.

Aktualizace pro ověřování registru

Aktualizujte přihlašovací údaje instančního objektu Azure tak, aby umožňovaly přístup k zápisu a vyžádání přístupu k vašemu registru kontejneru. Tento krok umožňuje pracovnímu postupu GitHubu použít instanční objekt k ověření v registru kontejneru a k nasdílení a vyžádání image Dockeru.

Získejte ID prostředku vašeho registru kontejneru. Nahraďte název registru v následujícím příkazu az acr show :

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

Pomocí příkazu az role assignment create přiřaďte roli AcrPush, která poskytuje přístup nabízených oznámení a vyžádání přístupu k registru. Nahraďte ID klienta vašeho instančního objektu:

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

Uložení přihlašovacích údajů do úložiště GitHub

  1. V uživatelském rozhraní GitHubu přejděte do vašeho forku úložiště a vyberte Akce tajných > kódů zabezpečení a proměnných>.

  2. Vyberte Nový tajný klíč úložiště a přidejte následující tajné kódy:

Tajný Hodnota
AZURE_CREDENTIALS Celý výstup JSON z kroku vytvoření instančního objektu
REGISTRY_LOGIN_SERVER Název přihlašovacího serveru vašeho registru (všechna malá písmena). Příklad: myregistry.azurecr.io
REGISTRY_USERNAME Z clientId výstupu JSON z vytvoření instančního objektu
REGISTRY_PASSWORD Z clientSecret výstupu JSON z vytvoření instančního objektu
RESOURCE_GROUP Název skupiny prostředků, kterou jste použili k určení oboru instančního objektu

Vytvoření souboru pracovního postupu

  1. V uživatelském rozhraní GitHubu vyberte Akce.
  2. Vyberte nastavení pracovního postupu sami.
  3. Do části Upravit nový soubor vložte následující obsah YAML, který přepíše vzorový kód. Přijměte výchozí název souboru main.ymlnebo zadejte název souboru, který zvolíte.
  4. Vyberte Spustit potvrzení, volitelně zadejte krátký a rozšířený popis potvrzení a vyberte Potvrdit nový soubor.
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'

Ověření pracovního postupu

Po potvrzení souboru pracovního postupu se pracovní postup aktivuje. Pokud chcete zkontrolovat průběh pracovního postupu, přejděte na Pracovní postupy akcí>.

Zobrazení průběhu pracovního postupu

Informace o zobrazení stavu a výsledků jednotlivých kroků v pracovním postupu najdete v části Zobrazení historie spuštění pracovního postupu. Pokud se pracovní postup nedokončí, prohlédni si zobrazení protokolů pro diagnostiku selhání.

Po úspěšném dokončení pracovního postupu získejte informace o instanci kontejneru s názvem aci-sampleapp spuštěním příkazu az container show . Nahraďte název vaší skupiny prostředků:

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

Výstup se podobá tomuto:

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

Po zřízení instance přejděte v prohlížeči na plně kvalifikovaný název domény kontejneru a zobrazte spuštěnou webovou aplikaci.

Spuštění webové aplikace v prohlížeči

Použití rozšíření Deploy to Azure

Případně můžete ke konfiguraci pracovního postupu použít rozšíření Deploy to Azure (Nasadit do Azure) v Azure CLI. Příkaz az container app up v rozšíření přebírá vstupní parametry od vás k nastavení pracovního postupu pro nasazení do služby Azure Container Instances.

Pracovní postup vytvořený rozhraním příkazového řádku Azure je podobný pracovnímu postupu, který můžete vytvořit ručně pomocí GitHubu.

Další požadavky

Kromě požadavků a nastavení úložiště pro tento scénář je potřeba nainstalovat rozšíření Deploy to Azure (Nasadit do Azure) pro Azure CLI.

Spuštěním příkazu az extension add nainstalujte rozšíření:

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

Informace o hledání, instalaci a správě rozšíření najdete v tématu Použití rozšíření s Azure CLI.

Spusťte příkaz az container app up.

Pokud chcete spustit příkaz az container app up , zadejte minimálně:

  • Název registru kontejneru Azure, například myregistry
  • Adresa URL úložiště GitHubu, například https://github.com/<your-GitHub-Id>/acr-build-helloworld-node

Ukázkový příkaz:

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

Průběh příkazu

  • Po zobrazení výzvy zadejte své přihlašovací údaje GitHubu nebo zadejte osobní přístupový token GitHubu (PAT), který má obory úložiště a uživatele pro ověření pomocí vašeho účtu GitHubu. Pokud zadáte přihlašovací údaje GitHubu, příkaz za vás vytvoří PAT. Podle dalších výzev nakonfigurujte pracovní postup.

  • Příkaz vytvoří tajné kódy úložiště pro pracovní postup:

    • Přihlašovací údaje instančního objektu pro Azure CLI
    • Přihlašovací údaje pro přístup k registru kontejnerů Azure
  • Po potvrzení souboru pracovního postupu do úložiště se pracovní postup aktivuje.

Výstup se podobá tomuto:

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

Pokud chcete zobrazit stav pracovního postupu a výsledky jednotlivých kroků v uživatelském rozhraní GitHubu, přečtěte si téma Zobrazení historie spuštění pracovního postupu.

Ověření pracovního postupu

Pracovní postup nasadí instanci kontejneru Azure se základním názvem úložiště GitHub, v tomto případě acr-build-helloworld-node. Po úspěšném dokončení pracovního postupu získejte informace o instanci kontejneru s názvem acr-build-helloworld-node spuštěním příkazu az container show. Nahraďte název vaší skupiny prostředků:

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

Výstup se podobá tomuto:

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

Po zřízení instance přejděte v prohlížeči na plně kvalifikovaný název domény kontejneru a zobrazte spuštěnou webovou aplikaci.

Vyčištění prostředků

Instanci kontejneru zastavte pomocí příkazu az container delete:

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

Pokud chcete odstranit skupinu prostředků a všechny prostředky v ní, spusťte příkaz az group delete :

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

Další kroky

Další akce pro automatizaci pracovního postupu vývoje najdete na Webu GitHub Marketplace .