Aracılığıyla paylaş


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 app service'e özel kapsayıcılar 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 Uygulaması Hizmeti kapsayıcısı 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.
Yapı 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ı Services ile kimlik doğrulaması yapmak için önerilen yol bir yayımlama profilidir. 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ında 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ın WEBSITE_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ında App Service uygulaması yapılandırma.

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

GitHub gizli dizisini kimlik doğrulaması için 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 kullanırsınız AZURE_WEBAPP_PUBLISH_PROFILE . Örneğin:

- 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'yi kullanır.

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

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

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

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

Aşağıdaki örnekte, Node.JS Docker görüntüsü oluşturan iş akışının bir bölümü gösterilmektedir. 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'teki özel bir kapsayıcıya dağıtmak için eylemi kullanın azure/webapps-deploy@v2 . 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. Ex. dotnet run veya dotnet filename.dll için
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ı depolar halinde gruplandırılmış Eylemler kümemizi bulabilirsiniz.