Visual Studio tarafından oluşturulan GitHub Actions iş akışlarını kullanarak uygulamanızı Azure'a dağıtma

Visual Studio 2019 sürüm 16.11'den başlayarak, GitHub.com'de barındırılan .NET projeleri için yeni GitHub Actions iş akışları oluşturabilirsiniz.

Önkoşullar

GitHub Actions kullanarak Azure'a tek bir proje dağıtma

Çözüm Gezgini'nde barındırılan GitHub.com projenize sağ tıklayın ve Yayımlaöğesini seçin.

> Yayımla'ya sağ tıklayın

Sonraki ekranda Azure'yi ve ardından İleri'yi seçin.

Azure 'ü seçin

proje türüne bağlı olarak, arasından seçim yapmak için farklı bir Azure hizmetleri listesi alırsınız. gereksinimlerinize uygun desteklenen Azure hizmetlerinden birini seçin.

projeniz için uygun Azure hizmetini seçin

Sihirbazın son adımında GitHub Actions iş akışlarını kullanarak CI/CD seçin (yml dosyası oluşturur) ve ardından Sonöğesini seçin.

GitHub Actions iş akışlarını kullanarak CI/CD (yml dosyası oluşturur)

Visual Studio yeni bir GitHub Actions iş akışı oluşturur ve bunu commit işlemi yapmanızı ve GitHub.com'a göndermenizi ister.

işleme ve gönderme

yerleşik Git araçlarını kullanarak bu adımı tamamlarsanız, Visual Studio iş akışının yürütülmesini algılar.

iş akışı çalışıyor

GitHub gizli anahtarlarını ayarlama

Oluşturulan iş akışının Azure'a başarıyla dağıtılması için yayımlama profilineerişmesi gerekebilir.

bir GitHub gizli dizi

Başarılı bir dağıtım için hizmet sorumlusuerişimi de gerekebilir.

iki GitHub gizli dizi

Her durumda Visual Studio, GitHub sırrını sizin için doğru değerle ayarlamaya çalışır. Başarısız olursa, bunu size bildirir ve yeniden deneme fırsatı verir.

GitHub sırrı eksik

Eğer gizli anahtarı yeniden ayarlamak başarısız olursa, Visual Studio size gizli anahtara manuel olarak erişme fırsatı sunar, böylece işlemi GitHub.com'daki depo sayfanız üzerinden tamamlayabilirsiniz.

Eksik GitHub gizli anahtar ayarlama

GitHub Actions kullanarak Azure Container Apps'e birden çok proje dağıtma

Docker kapsayıcılarını kullanan birden fazla projeniz varsa ve bunları çoklu proje uygulaması olarak dağıtmak istiyorsanız bu adımlar uygundur. Azure Container Apps veya Azure Kubernetes Service (AKS) üzerinde mikro hizmetler uygulayan çok projeli uygulamaları dağıtabilirsiniz. Bu makale, Azure Container Apps'i kapsar.

  1. Çözüm Gezgini'nde GitHub Actions düğümüne sağ tıklayın ve Yeni iş akışıseçin. GitHub Actions iş akışı sihirbazı görüntülenir.

    GitHub Actions düğüm menüsünün ekran görüntüsü.

  2. GitHub Actions İş Akışı hedef ekranında Azureseçin.

  3. Belirli bir hedef için Azure Container Apps’i seçin. Sihirbaz Container App ekranına ilerler.

    Mevcut Azure Container Apps'i gösteren ekran görüntüsü.

  4. Mevcut bir Azure Container App'i seçin veya yeni oluşturseçin.

    Mevcut Azure Container Apps'i gösteren ekran görüntüsü.

    Yeni bir tane oluşturduğunuzda bu ekranı görürsünüz. Test ederken veya öğrenirken, her şeyi daha sonra silmeyi kolaylaştırmak için genellikle yeni bir kaynak grubu oluşturmak en iyisidir. Kapsayıcı Uygulamalar ortamı, aynı sanal ağı paylaşan ve loglarını aynı kayıt hedefine yazan kapsayıcı uygulama gruplarının etrafındaki güvenli bir sınırdır. Bkz. Azure Container Apps ortamları. Bunun ne olduğunu bilmiyorsanız veya daha önce oluşturmadıysanız, bu örnek için yeni bir tane oluşturun.

    Yeni bir Azure Container Apps örneği oluşturmayı gösteren ekran görüntüsü.

    Oluşturulduktan sonra yeni Azure Container Apps örneği gösterilir.

    Yeni oluşturulan Azure Container Apps örneğini gösteren ekran görüntüsü.

  5. İlerlemek için Sonraki seçin ve Kayıt Defteri ekranına gidin. Mevcut bir Azure Container Registry'yi seçin veya yeni bir tane oluşturun.

    Azure Container Registry ekranının ekran görüntüsü.

    Yeni bir tane oluşturmayı seçerseniz bu ekranı görürsünüz. Kaynak grubunu, SKU'yu sağlayın ve mümkünse daha önce olduğu gibi aynı bölgeyi seçin. Azure Container Registry için SKU'lar hakkında bilgi almak için Azure Container Registry hizmet katmanlarınabakın.

    Yeni oluşturulan yeni bir Azure kapsayıcı kayıt defterini gösteren ekran görüntüsü.

    Yeni kayıt defteri oluşturulduktan sonra ekranda gösterilir.

    Yeni bir Azure kapsayıcı kayıt defteri oluşturmayı gösteren ekran görüntüsü.

  6. Çözümünüzdeki dağıtılabilir projeler görüntülenir; aynı Azure Container Apps örneğinde birlikte dağıtmak istediğiniz projeleri seçin.

    Dağıtılacak proje seçimini gösteren ekran görüntüsü.

  7. Bitişseçin. Azure'da varlıkları oluşturmak ve kimlik doğrulamasını ayarlamak için verilen komutları görebilirsiniz. Herhangi bir şey başarısız olursa, CLI'dan yeniden deneyebileceğiniz için kullanılan komut satırını not edin. Bu aşamada yetkilendirme hatası alırsanız çok fazla endişelenmeyin. Kimlik doğrulamasını daha sonra Visual Studio'da da ayarlayabilirsiniz.

  8. İşlem tamamlandıktan sonra özet ekranı görüntülenir. Özet ekranında, Visual Studio'nun GitHub deponuzda GitHub Actions gizli dizileri altında oluşturduğu girişlerle eşleşen kimlik bilgileri gösterilir. Sarı uyarı işaretlerini denetleyin. Oluşturma işlemi sırasında kimlik doğrulama adımlarından herhangi biri başarısız olduysa, uyarı işaretinin yanındaki bağlantıya tıklayarak ve birkaç adımı izleyerek bunu düzeltme fırsatınız olur.

  9. Visual Studio'da oluşturulanları denetlemek için iş akışı dosyasını açın. Visual Studio, durumunuz için bir iş akışı oluşturmak için en iyi şekilde çalışsa da, her uygulama ve depo benzersizdir, bu nedenle visual studio tarafından oluşturulan iş akışı YML dosyasının başarıyla çalışması için genellikle el ile düzenlemeniz gerekir. Açmak için Çözüm Gezgini'nde GitHub Actions düğümünü genişletin, yeni oluşturulan iş akışına sağ tıklayın ve Düzenleseçin.

Aşağıda, WebAPI ve WebFrontEnd adlı iki dağıtılabilir proje içeren bir çözüm için Visual Studio tarafından oluşturulan bir iş akışı dosyası örneği gösterilmektedir.

on:
push:
  branches:
  - main
env:
CONTAINER_REGISTRY_LOGIN_SERVER: registry20230810121555.azurecr.io
CONTAINER_APP_NAME: containerapp20230810121017
CONTAINER_APP_RESOURCE_GROUP_NAME: webfrontend-container-app-1234
CONTAINER_APP_CONTAINER_NAME: containerapp
jobs:
WebApi_buildImageAndDeploy:
  runs-on: ubuntu-latest
  steps:
  - name: Checkout source code
    uses: actions/checkout@v3
  - name: Set up Docker Buildx
    uses: docker/setup-buildx-action@v2
  - name: Login to Docker registry
    uses: docker/login-action@v2
    with:
      registry: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}
      username: ${{ secrets.registry20230810121555_USERNAME_6891 }}
      password: ${{ secrets.registry20230810121555_PASSWORD_6891 }}
  - name: Build and push Docker image to Azure container registry
    uses: docker/build-push-action@v4
    with:
      push: true
      tags: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webapi:${{ github.sha }}
      file: WebApi\Dockerfile
  - name: Azure login
    uses: azure/login@v1
    with:
      creds: ${{ secrets.containerapp20230810121017_SPN }}
  - name: Deploy to Azure container app
    uses: azure/CLI@v1
    with:
      inlineScript: >-
        az config set extension.use_dynamic_install=yes_without_prompt
        az containerapp registry set --name ${{ env.CONTAINER_APP_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --server ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }} --username ${{ secrets.registry20230810121555_USERNAME_2047 }} --password ${{ secrets.registry20230810121555_PASSWORD_2047 }}
        az containerapp update --name ${{ env.CONTAINER_APP_NAME }} --container-name ${{ env.CONTAINER_APP_CONTAINER_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --image ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webapi:${{ github.sha }}
  - name: Azure logout
    run: az logout
WebFrontEnd_buildImageAndDeploy:
  runs-on: ubuntu-latest
  needs: WebApi_buildImageAndDeploy
  steps:
  - name: Checkout source code
    uses: actions/checkout@v3
  - name: Set up Docker Buildx
    uses: docker/setup-buildx-action@v2
  - name: Login to Docker registry
    uses: docker/login-action@v2
    with:
      registry: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}
      username: ${{ secrets.registry20230810121555_USERNAME_2047 }}
      password: ${{ secrets.registry20230810121555_PASSWORD_2047 }}
  - name: Build and push Docker image to Azure container registry
    uses: docker/build-push-action@v4
    with:
      push: true
      tags: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webfrontend:${{ github.sha }}
      file: WebFrontEnd\Dockerfile
  - name: Azure login
    uses: azure/login@v1
    with:
      creds: ${{ secrets.containerapp20230810121017_SPN }}
  - name: Deploy to Azure container app
    uses: azure/CLI@v1
    with:
      inlineScript: >-
        az config set extension.use_dynamic_install=yes_without_prompt
        az containerapp registry set --name ${{ env.CONTAINER_APP_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --server ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }} --username ${{ secrets.registry20230810121555_USERNAME_2047 }} --password ${{ secrets.registry20230810121555_PASSWORD_2047 }}
        az containerapp update --name ${{ env.CONTAINER_APP_NAME }} --container-name ${{ env.CONTAINER_APP_CONTAINER_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --image ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webfrontend:${{ github.sha }}
  - name: Azure logout
    run: az logout

İş akışının temel işlevi, doğru kimlik doğrulamasıyla Azure hizmetlerinde oturum açmak ve uygulamayı derlemek ve dağıtmak için komutları çalıştırmaktır.

İş akışını düzenleme ve test etme

Yukarıdaki yordam bir iş akışı YML dosyası oluşturur, ancak normalde bir dağıtım için kullanılabilmesi için önce dosyayı gözden geçirmeniz ve özelleştirmeniz gerekir. GitHub'ın iş akışı eylemleri yazma yönergelerine başvurmanız gerekebilir; bkz. Özel eylemler hakkında. İş akışı dosyası, ortam değişkenleri için ayarlar ve gizli dizilerin adları gibi birçok yapılandırılabilir öğe içerir. Dockerfile'larınızın konumlarına yapılan referansları, Azure kapsayıcı uygulamanızın adını, iş akışı çalıştırmalarını tetikleyeceğiniz depodaki dalı ve GitHub'daki gizli ifadelere yapılan referansları görebilirsiniz. Gizli bilgilere ${{ secrets.SECRET_NAME }}sözdizimi kullanılarak referans verilir. Bkz. GitHub Actions gizli dizilerini.

Projeleriniz deponun kökünde değilse, Dockerfile'ları bulma yolunu belirtmek için iş akışını değiştirmeniz gerekir. Her iki projede de Dockerfile'a göreli yollar için ortam değişkenleri ekleyin.

DOCKER_FILEPATH_WEBAPI: docker/ComposeSample/WebApi/Dockerfile
DOCKER_FILEPATH_WEBFRONTEND: docker/ComposeSample/WebFrontend/Dockerfile

file parametresi için bu ortam değişkenlerinin değerlerini aşağıdaki gibi kullanın:

- name: Build and push Docker image to Azure container registry
  uses: docker/build-push-action@v4
  with:
    push: true
    tags: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webfrontend:${{ github.sha }}
    file: ${{ env.DOCKER_FILEPATH_WEBFRONTEND }}

Dockerfile'da değişiklik yapmanız gerekiyorsa, değişiklikleri yapın ve kaydedin, işleyin ve uzak depoya gönderin. Visual Studio'nın oluşturduğu iş akışı, belirtilen dalda güncelleştirilirse çalıştırılmasına neden olan bir tetikleyici içerir. working dalına gönderim yapıyorsanız, aşağıdaki gibi bir kod olmalıdır:

on:
  push:
  branches:
  - working

Değişiklikleri test etmek için, bunları taahhüt edin ve tetikleyici kodunda belirtilen deponun dalına gönderin. Çekme isteği (PR) oluşturmanız gerekmez. push tetikleyicisi doğru dal olarak ayarlandığı sürece iş akışı çalışır.

GitHub.com'daki deponuzun Eylemler sekmesinde iş akışı çalışmasını bulun. Visual Studio'daki GitHub Actions özet sekmesindeki bir bağlantıyı kullanarak doğrudan oraya ulaşabilirsiniz. GitHub'da iş akışı çalıştırmasını açarak günlükleri görüntüleyebilirsiniz.

Sorun giderme

İş akışınız başarıyla çalıştırılamazsa aşağıdaki sorun giderme ipuçları yararlı olabilir.

Sorun: Oluşturma aşaması oluşturulmuyor

Dockerfile'da karşılaşabileceğiniz bir sorun, derleme aşamasının Visual Studio'daki gibi çalışmamasıdır. Visual Studio'nın bir proje için oluşturduğu varsayılan Dockerfile bu sorunu gösterir. Böyle bir Dockerfile'nız varsa derleme aşamasında aşağıdaki değişiklikleri göz önünde bulundurun. İşte bir projenin depoda docker/ComposeSample/WebApi konumlandığı bir örnek. Tam yolun verilmesinin nedeni, iş akışı derleme kapsayıcısındaki Dockerfile bağlamının deponun köküne ayarlanmış olmasıdır, oysa Visual Studio'da proje klasörünün üstündeki klasöre ayarlanmıştır. Derleme klasörünü oluşturmak için buraya _build soneki eklenir ve yalnızca proje dosyasını kopyalamak yerine klasörün tamamı kopyalanır. Visual Studio tarafından oluşturulan varsayılan Dockerfile ile karşılaştırıldığında, COPY komutunun ilk bağımsız değişkenindeki yolun dosya bölümü kaldırıldı, böylece yalnızca proje dosyası yerine klasörün tamamını kopyalıyoruz. Bu değişiklikler olmadan, bu aşama bir MSBuild hatası oluşturur.

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["docker/ComposeSample/WebApi/", "WebApi_build/"]
RUN dotnet restore "WebApi_build/WebApi.csproj"
COPY . .
WORKDIR "/src/WebApi_build"
RUN dotnet build "WebApi.csproj" -c Release -o /app/build

Sorun: Kimlik doğrulama bilgileri

İş akışı, Azure erişimi için doğru kullanıcı adı ve parola gizli dizilerinin ayarlanmasını gerektirir. Visual Studio, Azure varlıklarını oluştururken veya Microsoft Visual Studio IDE'deki GitHub Actions ekranından bunu otomatik olarak yapmaya çalışır. GitHub'daki gizli dizileri denetledikten sonra orada olduklarından emin olabilir veya depodaki Ayarlar bölümünü kullanarak bunları yeniden oluşturabilir ve gerekirse GitHub'a yeniden ekleyebilirsiniz. Gizli kimliğini iş akışının her bölümünde referans alınan değerlerle karşılaştırarak kontrol edin. Gerekirse Azure portalında kapsayıcı kayıt defterine gidip kapsayıcı kayıt defterinin kullanıcı adını ve parolasını alabilir ve gitHub'daki gizli dizileri güncelleştirmek için bu değerleri kullanabilirsiniz.

Hizmet Prensibi ayarlamak ve istemci kimliği, istemci gizli anahtarı ve kiracı kimliği almak için az ad sp create-for-rbac komutunu çalıştırdıysanız, GitHub deponuzun GitHub Actions Gizli Anahtarlar bölümüne istemci kimliğini ve istemci gizli anahtarını gizli olarak ekleyin. Azure Container App kimlik doğrulaması için kullanıcı adı (uygulama için istemci kimliği) ve parola (istemci gizli dizisi) biçiminde Azure oturum açma kimlik bilgilerini sağlayabilirsiniz. Bunu yapmak için Azure login adımını aşağıdaki kodla değiştirin. İstemci kimliği ve istemci gizli anahtarı için oluşturduğunuz kendi GitHub gizli adlarınızı kullanın ve aynı komutun çıktısından kiracı kimliğini kullanın.

- name: Azure login
  uses: azure/CLI@v1
  with:
    inlineScript: |
      az login --service-principal -u ${{ secrets.GITHUB_SECRETID_FOR_USERNAME }} -p ${{ secrets.GITHUB_SECRETID_FOR_PASSWORD }} --tenant {your tenant ID}
      az account list

Dockerfile düzgün çalışıyorsa ve kimlik doğrulaması doğruysa ve iş akışınızla ilgili sorunlar görmeye devam ediyorsanız aşağıdaki kaynakları göz önünde bulundurun:

Hangi proje türleri desteklenir?

  • ASP.NET Core
  • ASP.NET 5 ve üzeri
  • Azure İşlevleri

Hangi Azure hizmetleri desteklenir?

  • Azure Web Apps
  • Azure İşlevleri
  • Azure API Management