Aracılığıyla paylaş


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

Otomatik yazılım geliştirme iş akışı oluşturmak için GitHub Actions'ı kullanabilirsiniz. İş akışınızı otomatikleştirmek ve Azure App Service'e özel kapsayıcılar dağıtmak için Azure Web Dağıtımı eylemini kullanabilirsiniz.

İş 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.

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

OpenID Connect kullanarak GitHub Actions için Azure App Services ile kimlik doğrulaması yapmanızı öneririz. Ayrıca bir hizmet sorumlusu veya yayımlama profiliyle de kimlik doğrulaması yapabilirsiniz.

Azure ile kimlik doğrulaması yapmak için yayımlama profili kimlik bilgilerinizi veya hizmet sorumlunuzu GitHub gizli dizisi olarak kaydedin. iş akışınızdaki gizli bilgiye erişin.

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

  1. Azure portalında App Service'e gidin.

  2. Genel Bakış bölmesinde Yayımlama profilini al'ı seçin.

    Not

    Ekim 2020 itibarıyla kullanıcıların WEBSITE_WEBDEPLOY_USE_SCM Linux web uygulamaları true için uygulama ayarını olarak ayarlamaları gerekir. Yaygın web uygulaması ayarlarını yapılandırmayı öğrenmek için Azure portalında App Service uygulaması yapılandırma bölümüne gidin.

  3. İndirilen dosyayı kaydedin. GitHub sırrını oluştururken dosyanın içeriğini kullanırsınız.

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

GitHub'da deponuza göz atın. Ayarlar

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 eylemindeki gizli diziyi AZURE_WEBAPP_PUBLISH_PROFILE kullanın. Ö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 makaledeki ö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 Ayarlarbulabilirsiniz.

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

Aşağıdaki örnekte, bir Windows Docker görüntüsü oluşturan iş akışının bir bölümü gösterilmektedir. Docker Login'i kullanarak özel 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: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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
app-name (Gerekli) App Service uygulamasının adı.
publish-profile (İsteğe bağlı) Web uygulamaları (Windows ve Linux) ve web uygulaması kapsayıcıları (Linux) ile kullanılır. Çoklu konteyner senaryosu desteklenmiyor. Web Deploy gizli bilgileriyle profil \*.publishsettings dosyası içeriğini yayımla.
slot-name (İsteğe bağlı) Üretim alanı dışında mevcut bir alanı girin.
package (İsteğe bağlı) Yalnızca web uygulamalarıyla kullanılır: Paket veya klasör yolu. \*.zip, \*.war, \*.jarveya dağıtılacak bir klasör.
images (Gerekli) Yalnızca web uygulaması kapsayıcılarıyla kullanılır: Tam kapsayıcı görüntüsü adını belirtin. Örneğin, myregistry.azurecr.io/nginx:latest veya python:3.12.12-alpine/. Birden fazla kapsayıcıya sahip bir uygulama için birden fazla kapsayıcı görüntü adı sağlanabilir (satır satır belirtilmiş).
configuration-file (İsteğe bağlı) Yalnızca web uygulaması kapsayıcıları ile birlikte kullanılır: 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ı) Başlangıç 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 }}'
name: Windows_Container_Workflow

on: [push]

jobs:
  build:
    runs-on: windows-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 }}'

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