Nasazení vlastního kontejneru do App Service pomocí funkce GitHub Actions

GitHub Actions poskytuje flexibilitu při vytváření automatizovaného pracovního postupu vývoje softwaru. Pomocí akce Nasazení webu Azure můžete automatizovat pracovní postup nasazení vlastních kontejnerů do App Service pomocí GitHub Actions.

Pracovní postup je definován souborem YAML (.yml) v cestě /.github/workflows/ ve vašem úložišti. Tato definice obsahuje různé kroky a parametry, které jsou v pracovním postupu.

Pro pracovní postup Azure App Service kontejneru má soubor tři oddíly:

Sekce Úlohy
Authentication 1. Načtení instančního objektu nebo profilu publikování
2. Vytvořte tajný kód GitHubu.
Sestavení 1. Vytvořte prostředí.
2. Sestavte image kontejneru.
Nasazení 1. Nasaďte image kontejneru.

Požadavky

Vygenerování přihlašovacích údajů pro nasazení

Doporučeným způsobem ověřování pomocí služby Aplikace Azure Services pro GitHub Actions je profil publikování. Můžete se také ověřit pomocí instančního objektu nebo Open ID Connect, ale proces vyžaduje další kroky.

Uložte přihlašovací údaje profilu publikování nebo instanční objekt jako tajný klíč GitHubu pro ověření v Azure. K tajnému kódu budete přistupovat v rámci pracovního postupu.

Profil publikování je přihlašovací údaje na úrovni aplikace. Nastavte profil publikování jako tajný kód GitHubu.

  1. Přejděte do služby App Service v Azure Portal.

  2. Na stránce Přehled vyberte Získat profil publikování.

    Poznámka

    Od října 2020 budou webové aplikace pro Linux před stažením souboru potřebovat nastavení WEBSITE_WEBDEPLOY_USE_SCM aplikace nastavené na true hodnotu . Tento požadavek bude v budoucnu odebrán. Informace o konfiguraci běžných nastavení webové aplikace najdete v tématu Konfigurace App Service aplikace v Azure Portal.

  3. Stažený soubor uložte. Obsah souboru použijete k vytvoření tajného kódu GitHubu.

Konfigurace tajného klíče GitHubu pro ověřování

V GitHubu procházejte úložiště. Vyberte Nastavení > Tajné klíče zabezpečení > a proměnné > Akce > Nový tajný klíč úložiště.

Pokud chcete použít přihlašovací údaje na úrovni aplikace, vložte obsah staženého souboru profilu publikování do pole hodnoty tajného kódu. Pojmenujte tajný kód AZURE_WEBAPP_PUBLISH_PROFILE.

Při konfiguraci pracovního postupu GitHubu AZURE_WEBAPP_PUBLISH_PROFILE použijete akci nasazení webové aplikace Azure. Příklad:

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

Konfigurace tajných kódů GitHubu pro registr

Definujte tajné kódy, které se mají použít s akcí Přihlášení k Dockeru. Příklad v tomto dokumentu používá Azure Container Registry pro registr kontejneru.

  1. Přejděte do kontejneru v Azure Portal nebo Dockeru a zkopírujte uživatelské jméno a heslo. Uživatelské jméno a heslo Azure Container Registry najdete v Azure Portal v části Nastavení>Přístupové klíče pro váš registr.

  2. Definujte nový tajný klíč pro uživatelské jméno registru s názvem REGISTRY_USERNAME.

  3. Definujte nový tajný klíč pro heslo registru s názvem REGISTRY_PASSWORD.

Sestavení image kontejneru

Následující příklad ukazuje část pracovního postupu, který sestaví Node.JS image Dockeru. Přihlaste se k privátnímu registru kontejneru pomocí Přihlášení Dockeru . Tento příklad používá Azure Container Registry ale stejná akce funguje i pro ostatní registry.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

Přihlášení do Dockeru můžete použít také k přihlášení k více registrům kontejnerů najednou. Tento příklad obsahuje dva nové tajné kódy GitHubu pro ověřování pomocí docker.io. V příkladu se předpokládá, že na kořenové úrovni registru existuje soubor Dockerfile.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - uses: azure/docker-login@v1
      with:
        login-server: index.docker.io
        username: ${{ secrets.DOCKERIO_USERNAME }}
        password: ${{ secrets.DOCKERIO_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

Nasazení do kontejneru App Service

Pokud chcete nasadit image do vlastního kontejneru v App Service, použijte azure/webapps-deploy@v2 akci . Tato akce má sedm parametrů:

Parametr Vysvětlení
název aplikace (Povinné) Název aplikace App Service
publikování profilu (Volitelné) Platí pro Web Apps (Windows a Linux) a Web App Containers(linux). Scénář s více kontejnery se nepodporuje. Publikování obsahu souboru profilu (*.publishsettings) s tajnými kódy nasazení webu
název slotu (Volitelné) Zadejte existující slot kromě produkčního slotu.
Balíček (Volitelné) Platí jenom pro webovou aplikaci: Cesta k balíčku nebo složce. *.zip, *.war, *.jar nebo složku pro nasazení
Obrázky (Povinné) Platí jenom pro službu Web App Containers: Zadejte plně kvalifikované názvy imagí kontejneru. Například "myregistry.azurecr.io/nginx:latest" nebo "python:3.7.2-alpine/". U vícekontejnerových aplikací je možné zadat více názvů imagí kontejneru (oddělené více řádky).
konfigurační soubor (Volitelné) Platí pouze pro službu Web App Containers: Cesta k souboru Docker-Compose. Měla by jít o plně kvalifikovanou cestu nebo relativní k výchozímu pracovnímu adresáři. Vyžaduje se pro vícekontejnerové aplikace.
příkaz startup-command (Volitelné) Zadejte spouštěcí příkaz. Například dotnet run nebo dotnet filename.dll
name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}

    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

    - uses: azure/webapps-deploy@v2
      with:
        app-name: 'myapp'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'

Další kroky

Naši sadu akcí seskupených do různých úložišť najdete na GitHubu. Každá z nich obsahuje dokumentaci a příklady, které vám pomůžou používat GitHub pro CI/CD a nasazovat aplikace do Azure.