Jak můžu využít GitHub Actions k nasazování do Azure?

Dokončeno

Tato lekce popisuje, jak pomocí GitHub Actions nasadit webovou aplikaci založenou na kontejnerech do Microsoft Azure Web Apps. Popisuje některé možnosti aktivace pracovního postupu. Dále se dozvíte, jak pracovat s podmíněnými výrazy v pracovním postupu. Nakonec se dozvíte, jak vytvářet a odstraňovat prostředky Azure pomocí GitHub Actions.

Možnosti aktivace pracovního postupu průběžného nasazování

Pracovní postup průběžného nasazování můžete spustit různými způsoby. V předchozím modulu o kontinuální integraci pomocí GitHub Actions jste se naučili aktivovat pracovní postup z nabízených oznámení do úložiště GitHubu. U disku CD však můžete chtít aktivovat pracovní postup nasazení v některé jiné události.

Jednou z možností je aktivovat pracovní postup pomocí ChatOps. ChatOps ke spouštění úloh používá chatovací klienty, chatovací roboty a komunikační nástroje v reálném čase. Můžete například k žádosti o přijetí změn, která může aktivovat robota, přidat konkrétní komentář. Robot pak může na komentář odpovědět určitou statistikou nebo spustit pracovní postup.

Další možností, kterou používáme v našem příkladu, je přidat do žádosti o přijetí změn popisky. Různé popisky můžou spouštět různé pracovní postupy. Přidejte například popisek fáze pro zahájení pracovního postupu nasazení do přípravného prostředí. Můžete také přidat popisek prostředí pro spuštění pracovního postupu, který vytvoří prostředky Microsoft Azure, do kterých se nasadí. Pokud chcete použít popisky, váš pracovní postup vypadá takto:

on:
  pull_request:
    types: [labeled]

Řízení spouštění s podmíněnými úlohami

Často je potřeba, aby se pracovní postup spustil jen při splnění nějaké podmínky.

Pracovní postupy GitHubu poskytují podmínku if pro tento scénář. Podmíněný výraz používá výraz , který se vyhodnocuje za běhu. Chcete například spustit tento pracovní postup, pokud se do žádosti o přijetí změn přidá popisek fáze .

if: contains(github.event.pull_request.labels.*.name, 'stage')

Ukládání přihlašovacích údajů do tajných kódů GitHubu

V souboru pracovního postupu nikdy nechcete zveřejnit citlivé informace. Tajné kódy GitHubu jsou bezpečné místo pro ukládání citlivých informací, které váš pracovní postup potřebuje. Následuje příklad.

Aby bylo možné provést nasazení do prostředku Azure, musí mít akce GitHubu k tomuto prostředku oprávnění pro přístup. Vy však nechcete přihlašovací údaje Azure volně uložit do souboru pracovního postupu. Místo toho můžete přihlašovací údaje ukládat do tajných kódů GitHubu.

Pokud chcete ukládat informace do tajných kódů GitHubu, vytvořte na portálu tajný klíč.

Rozhraní webu Azure Portal pro vytváření tajných kódů

Potom použijte název tajného kódu, který jste vytvořili ve svém pracovním postupu, ať už potřebujete tyto informace kdekoli. Použijte například přihlašovací údaje Azure uložené v tajných klíčích GitHubu creds: v atributu akce Azure login .

steps:
      - name: "Login via Azure CLI"
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

Nasazení do Microsoft Azure pomocí GitHub Actions

GitHub Marketplace obsahuje několik akcí, které vám pomůžou při automatizaci úloh souvisejících s Azure.

GitHub Marketplace s výsledky hledání pro Azure

Akce GitHubu můžete také vyhledávat a procházet přímo v editoru pracovních postupů v úložišti. Prostřednictvím bočního panelu můžete vyhledat konkrétní akci, zobrazit doporučené akce nebo procházet vybrané kategorie.

Vyhledání akce:

  1. V úložišti vyhledejte soubor pracovního postupu, který chcete upravit.
  2. Vyberte ikonu Upravit v pravém horním rohu zobrazení souboru.
  3. Akce můžete procházet pomocí bočního panelu GitHub Marketplace napravo od editoru.

Předpokládejme, že chcete nasadit do Azure Web Apps kontejnerovou webovou aplikaci. Pokud hledáte na GitHub Marketplace, najdete tyto akce:

Když tyto akce přidáte do úlohy Deploy-to-Azure, pracovní postup bude vypadat takto:

  Deploy-to-Azure:
    runs-on: ubuntu-latest
    needs: Build-Docker-Image
    name: Deploy app container to Azure
    steps:
      - name: "Login via Azure CLI"
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - uses: azure/docker-login@v1
        with:
          login-server: ${{env.IMAGE_REGISTRY_URL}}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Deploy web app container
        uses: azure/webapps-deploy@v1
        with:
          app-name: ${{env.AZURE_WEBAPP_NAME}}
          images: ${{env.IMAGE_REGISTRY_URL}}/${{ github.repository }}/${{env.DOCKER_IMAGE_NAME}}:${{ github.sha }}

      - name: Azure logout
        run: |
          az logout

Všimněte si, že tato úloha závisí na předchozí úloze Build-Docker-Image. V této úloze se vytvořil artefakt, který se teď nasadí.

Akce Azure/login@v1 potřebuje přihlašovací údaje pro přihlášení k vašemu účtu Azure, aby mohl přistupovat k prostředkům Azure, do které chcete nasadit. Tady použijte přihlašovací údaje, které jsme uložili v tajných klíčích GitHubu.

Totéž platí pro akci azure/docker-login@v1 . Vzhledem k tomu, že nasazujete image kontejneru, musíte se přihlásit ke svému privátnímu registru kontejneru.

Akce azure/webapps-deploy@v1 provede nasazení. Závisí na dvou předchozích akcích.

Vytváření a odstraňování prostředků Azure pomocí GitHub Actions

Vzhledem k tomu, že CD je automatizovaný proces, rozhodli jste se použít infrastrukturu jako kód k vytvoření a převzetí prostředí, do které nasazujete. GitHub Actions může tyto úlohy v Azure automatizovat a tyto akce můžete zahrnout do pracovního postupu.

Poznámka:

Mějte na paměti, že je důležité prostředky, které už nepoužíváte, co nejdříve, abyste se vyhnuli zbytečným poplatkům.

Jednou z možností je vytvořit nový pracovní postup se dvěma úlohami: jedna z nich prostředky zprovozní a druhá poté odstraní. Pomocí podmíněného příkazu pak spustíte tu úlohu, kterou právě potřebujete. V našem příkladu vyhledá podmíněný příkaz v žádosti o přijetí změn popisek. Pokud je popisek zprovoznit prostředí, spustí úlohu set-up-azure-resources, u popisku job zlikvidovat prostředí pak úlohu destroy-azure-resources.

jobs:
  set-up-azure-resources:
    runs-on: ubuntu-latest

    if: contains(github.event.pull_request.labels.*.name, 'spin up environment')

    ...

  destroy-azure-resources:
    runs-on: ubuntu-latest

    if: contains(github.event.pull_request.labels.*.name, 'destroy environment')

    ...

K vytváření a ničení prostředků Azure využívají tyto úlohy rozhraní Azure CLI. Další informace o Azure CLI najdete v tématu Přehled Azure CLI.

Tady je příklad kroků v úloze set-up-azure-resources:

steps:
  - name: Checkout repository
    uses: actions/checkout@v2

  - name: Azure login
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Create Azure resource group
    if: success()
    run: |
      az group create --location ${{env.AZURE_LOCATION}} --name ${{env.AZURE_RESOURCE_GROUP}} --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
  - name: Create Azure app service plan
    if: success()
    run: |
      az appservice plan create --resource-group ${{env.AZURE_RESOURCE_GROUP}} --name ${{env.AZURE_APP_PLAN}} --is-linux --sku F1 --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
  - name: Create webapp resource
    if: success()
    run: |
      az webapp create --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --plan ${{ env.AZURE_APP_PLAN }} --name ${{ env.AZURE_WEBAPP_NAME }}  --deployment-container-image-name nginx --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
  - name: Configure webapp to use GitHub Packages
    if: success()
    run: |
      az webapp config container set --docker-custom-image-name nginx --docker-registry-server-password ${{secrets.GITHUB_TOKEN}} --docker-registry-server-url https://docker.pkg.github.com --docker-registry-server-user ${{github.actor}} --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}

Všimněte si, že k rezervaci úložiště a přihlášení do Azure se používají akce GitHubu. Pak se pomocí Azure CLI vytvoří potřebné prostředky a nasadí kontejner.