GitHub eylemlerini kullanarak App Service özel kapsayıcı dağıtma

GitHub eylemleri , otomatik yazılım geliştirme iş akışı oluşturma esnekliği sağlar. Azure Web dağıtımı eylemiyle, GitHub eylemlerini kullanarak App Service için özel kapsayıcılar dağıtmak üzere iş akışınızı otomatik hale getirebilirsiniz.

Bir iş akışı, deponuzdaki yoldaki bir YAML (. yıml) dosyası tarafından tanımlanır /.github/workflows/ . 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. bir 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ştur

GitHub eylemleri için Azure App Services ile kimlik doğrulamak için önerilen yol, bir yayımlama profiliyle birlikte bulunur. Hizmet sorumlusu ile de kimlik doğrulaması yapabilirsiniz ancak işlem daha fazla adım gerektirir.

Yayımlama profili kimlik bilgilerinizi veya hizmet sorumlunuzu Azure ile kimlik doğrulamak için GitHub gizli anahtarı olarak kaydedin. Gizli anahtar, iş akışınız dahilinde.

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

  1. Azure portal App Service 'e gidin.

  2. Genel bakış sayfasında, Yayımlama profili al' ı seçin.

    Not

    2020 Ekim itibariyle Linux Web Apps, WEBSITE_WEBDEPLOY_USE_SCM true dosyanın indirilmeden önce uygulama ayarının ayarlanmış olması gerekir. Bu gereksinim gelecekte kaldırılacak. Ortak Web uygulaması ayarlarını yapılandırma hakkında bilgi edinmek için Azure portal App Service uygulama yapılandırmakonusuna bakın.

  3. İndirdiğiniz dosyayı kaydedin. Dosyanın içeriğini bir GitHub parolası oluşturmak için kullanacaksınız.

Kimlik doğrulaması için GitHub gizliliğini yapılandırma

GitHub'da deponuza gözatıp Ayarlar > gizlilikler ' ı seçin > yeni bir gizli dizi ekleyin.

Uygulama düzeyi kimlik bilgilerinikullanmak için, indirilen yayımlama profili dosyasının içeriğini gizli dizinin değer alanına yapıştırın. Parolayı adlandırın AZURE_WEBAPP_PUBLISH_PROFILE .

GitHub iş akışınızı yapılandırırken, AZURE_WEBAPP_PUBLISH_PROFILE Azure Web uygulaması dağıtma eyleminde öğesini 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 örnek, kapsayıcı kayıt defteri için Azure Container Registry kullanır.

  1. Azure portal veya Docker 'daki kapsayıcınıza gidin ve Kullanıcı adını ve parolayı kopyalayın. Azure Container Registry Kullanıcı adı ve parolayı, > kayıt defteriniz için ayarlar erişim tuşları altında Azure Portal bulabilirsiniz.

  2. Adlı kayıt defteri Kullanıcı adı için yeni bir gizli dizi tanımlayın REGISTRY_USERNAME .

  3. Adlı kayıt defteri parolası için yeni bir gizli dizi tanımlayın REGISTRY_PASSWORD .

Kapsayıcı görüntüsünü oluşturma

Aşağıdaki örnek, Node.JS bir Docker görüntüsü oluşturan iş akışının bir parçasını gösterir. Bir özel kapsayıcı kayıt defterinde oturum açmak için Docker oturum açma kullanın. Bu örnek Azure Container Registry kullanır, ancak aynı eylem diğer kayıt defterleri için de geçerlidir.

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 defterlerine oturum açmak için Docker oturum açma bilgilerini de kullanabilirsiniz. Bu örnek, docker.io ile kimlik doğrulaması için iki yeni GitHub parolası içerir. Örnek, kayıt defterinin kök düzeyinde bir Dockerfile olduğunu varsayar.

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 azure/webapps-deploy@v2 eylemini kullanın. Bu eylem yedi parametreye sahiptir:

Parametre Açıklama
uygulama adı Istenir App Service uygulamasının adı
Yayımlama profili Seçim Web Apps (Windows ve Linux) ve Web uygulaması kapsayıcıları (Linux) için geçerlidir. Çoklu kapsayıcı senaryosu desteklenmiyor. *Web dağıtımı gizli dizileri ile profil (. publishsettings) dosya içeriğini yayımlama
yuva adı Seçim Üretim yuvası dışında mevcut bir yuva girin
leyebilir Seçim Yalnızca Web uygulaması için geçerlidir: paket veya klasör yolu. *. zip, * . war, * . jar veya dağıtılacak bir klasör
yansımasını Istenir Yalnızca Web uygulaması kapsayıcıları için geçerlidir: tamamen nitelenmiş kapsayıcı görüntüsü adını belirtin. Örneğin, ' myregistry.azurecr.io/nginx:latest ' veya ' Python: 3.7.2-alçam/'. Çok kapsayıcılı bir uygulama için birden çok kapsayıcı görüntüsü adı sağlanmış olabilir (çok satırlı ayrılmış)
yapılandırma-dosya Seçim Yalnızca Web uygulaması kapsayıcıları için geçerlidir: Docker-Compose dosyanın yolu. Tam olarak nitelenmiş bir yol olmalıdır veya varsayılan çalışma dizinine göre değişir. Çok Kapsayıcılı uygulamalar için gereklidir.
başlangıç-komut Seçim Başlangıç komutunu girin. For ex. 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

GitHub 'daki farklı depolarda gruplanmış eylem listemizi, 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 bir şekilde bulabilirsiniz.