Share via


GitHub Actions kullanarak App Service'e özel kapsayıcı dağıtma

GitHub Actions, otomatik yazılım geliştirme iş akışı oluşturma esnekliği sunar. Azure Web Dağıtımı eylemiyle, GitHub Actions kullanarak özel kapsayıcıları App Service dağıtmak için iş akışınızı otomatikleştirebilirsiniz.

İş akışı, deponuzdaki yoldaki /.github/workflows/ bir YAML (.yml) dosyası tarafından tanımlanır. Bu tanım, iş akışındaki çeşitli adımları ve parametreleri içerir.

Azure App Service kapsayıcı iş akışı için dosyanın üç bölümü vardır:

Section Görevler
Kimlik Doğrulaması 1. Hizmet sorumlusu alın veya profili yayımlayın.
2. GitHub gizli dizisi oluşturun.
Derleme 1. Ortamı oluşturun.
2. Kapsayıcı görüntüsünü oluşturun.
Dağıtma 1. Kapsayıcı görüntüsünü dağıtın.

Önkoşullar

Dağıtım kimlik bilgileri oluşturma

GitHub Actions için Azure Uygulaması Hizmetleri ile kimlik doğrulaması yapmak için önerilen yol bir yayımlama profili kullanmaktır. Ayrıca bir hizmet sorumlusu veya Open ID Connect ile de kimlik doğrulaması yapabilirsiniz, ancak işlem için daha fazla adım gerekir.

Azure'da kimlik doğrulaması yapmak için yayımlama profili kimlik bilgilerinizi veya hizmet sorumlunuzu GitHub gizli dizisi olarak kaydedin. Gizli diziye iş akışınızda erişeceksiniz.

Yayımlama profili, uygulama düzeyinde bir kimlik bilgisidir. Yayımlama profilinizi GitHub gizli dizisi olarak ayarlayın.

  1. Azure portal uygulama hizmetinize gidin.

  2. Genel Bakış sayfasında Yayımlama profilini al'ı seçin.

    Not

    Ekim 2020 itibarıyla, Linux web uygulamalarının dosyayı indirmeden önce uygulama ayarınınWEBSITE_WEBDEPLOY_USE_SCM olarak ayarlanması true gerekir. Bu gereksinim gelecekte kaldırılacaktır. Yaygın web uygulaması ayarlarını yapılandırmayı öğrenmek için bkz. Azure portal App Service uygulaması yapılandırma.

  3. İndirdiğiniz dosyayı kaydedin. GitHub gizli dizisi oluşturmak için dosyanın içeriğini kullanacaksınız.

Kimlik doğrulaması için GitHub gizli dizisini yapılandırma

GitHub'da deponuza göz atın. Ayarlar > Güvenlik > Gizli Dizileri ve değişkenler > Eylemler > Yeni depo gizli dizisi'ni seçin.

Uygulama düzeyinde kimlik bilgilerini kullanmak için indirilen yayımlama profili dosyasının içeriğini gizli dizinin değer alanına yapıştırın. Gizli diziyi AZURE_WEBAPP_PUBLISH_PROFILEolarak adlandırın.

GitHub iş akışınızı yapılandırırken Azure Web App'i dağıtma eyleminde öğesini AZURE_WEBAPP_PUBLISH_PROFILE kullanırsınız. Örnek:

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

Kayıt defteriniz için GitHub gizli dizilerini yapılandırma

Docker Oturum Açma eylemiyle kullanılacak gizli dizileri tanımlayın. Bu belgedeki örnekte kapsayıcı kayıt defteri için Azure Container Registry kullanılır.

  1. Azure portal veya Docker'da kapsayıcınıza gidin ve kullanıcı adını ve parolayı kopyalayın. Azure Container Registry kullanıcı adını ve parolayı kayıt defterinizin Ayarlar>Erişim anahtarları altındaki Azure portal bulabilirsiniz.

  2. adlı REGISTRY_USERNAMEkayıt defteri kullanıcı adı için yeni bir gizli dizi tanımlayın.

  3. adlı REGISTRY_PASSWORDkayıt defteri parolası için yeni bir gizli dizi tanımlayın.

Kapsayıcı görüntüsünü derleme

Aşağıdaki örnek, Node.JS Docker görüntüsü oluşturan iş akışının bir bölümünü gösterir. Docker Login'i kullanarak özel bir kapsayıcı kayıt defterinde oturum açın. Bu örnekte Azure Container Registry kullanılır, ancak aynı eylem diğer kayıt defterleri için de çalışır.

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 }}     

Aynı anda birden çok kapsayıcı kayıt defterine oturum açmak için Docker oturum açma özelliğini de kullanabilirsiniz. Bu örnek, docker.io ile kimlik doğrulaması için iki yeni GitHub gizli dizisini içerir. Örnekte, kayıt defterinin kök düzeyinde bir Dockerfile olduğu varsayılır.

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 }}     

App Service kapsayıcısına dağıtma

Görüntünüzü App Service özel bir kapsayıcıya dağıtmak için eylemini azure/webapps-deploy@v2 kullanın. Bu eylemin yedi parametresi vardır:

Parametre Açıklama
uygulama adı (Gerekli) App Service uygulamasının adı
publish-profile (İsteğe bağlı) Web Apps(Windows ve Linux) ve Web Uygulaması Kapsayıcıları (linux) için geçerlidir. Çok kapsayıcılı senaryo desteklenmiyor. Web Dağıtımı gizli dizileriyle profil (*.publishsettings) dosya içeriğini yayımlama
yuva adı (İsteğe bağlı) Üretim yuvası dışında var olan bir Yuvayı girin
Paket (İsteğe bağlı) Yalnızca Web Uygulaması için geçerlidir: Paket veya klasör yolu. *.zip, *.war, *.jar veya dağıtılacak klasör
Görüntü (Gerekli) Yalnızca Web Uygulaması Kapsayıcıları için geçerlidir: Tam kapsayıcı görüntüsü adını belirtin. Örneğin, 'myregistry.azurecr.io/nginx:latest' veya 'python:3.7.2-alpine/'. Çok kapsayıcılı bir uygulama için birden çok kapsayıcı görüntüsü adı sağlanabilir (çok satırlı ayrılmış)
yapılandırma dosyası (İsteğe bağlı) Yalnızca Web Uygulaması Kapsayıcıları için geçerlidir: Docker-Compose dosyasının yolu. Tam yol veya varsayılan çalışma dizinine göre olmalıdır. Çok kapsayıcılı uygulamalar için gereklidir.
startup-command (İsteğe bağlı) Start-up komutunu girin. Örneğin dotnet run veya 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 }}'

Sonraki adımlar

Her biri CI/CD için GitHub'ı kullanmanıza ve uygulamalarınızı Azure'a dağıtmanıza yardımcı olacak belgeler ve örnekler içeren, GitHub'da farklı depolarda gruplandırılmış Eylemler kümemizi bulabilirsiniz.