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 naučíte, jak pracovat s podmínkovými konstrukcemi 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í nebo přidejte popisek spuštění prostředí pro spuštění pracovního postupu, který vytvoří prostředky Microsoft Azure, aby se do nich mohlo nasadit. 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 chcete pracovní postup spustit pouze v případě, že je splněna určitá podmínka.

Pracovní postupy GitHubu poskytují podmínku if pro tento scénář. Podmíněný příkaz používá výraz , který se vyhodnocuje za běhu. Například chcete spustit tento pracovní postup, pokud je k pull requestu přidán štítek 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. Tady je 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íč.

Snímek obrazovky s rozhraním portálu GitHub pro vytvoření tajného kódu

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 má několik akcí, které vám pomůžou automatizovat úlohy související s Azure.

Snímek obrazovky Webu GitHub Marketplace zobrazující 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. V pravém horním rohu zobrazení souboru vyberte ikonu Upravit .
  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ých 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, už jste se rozhodli použít infrastrukturu jako kód k vytvoření a zrušení prostředí, do kterých 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 set-up-azure-resources, spustí úlohu , u popisku job destroy-azure-resources pak úlohu .

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.