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'da barındırılan GitHub.com projenize sağ tıklayın ve Yayımla'yı seçin.

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

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

Azure'ı seçme

Proje türünüze bağlı olarak, 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'yi seçin (yml dosyası oluşturur) ve ardından Son'u 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 işlemenizi ve GitHub.com göndermenizi ister.

işleme ve gönderme

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

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

GitHub gizli dizilerini ayarlama

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

bir GitHub gizli dizisi

Başarılı bir dağıtım için hizmet sorumlusuna erişim de gerekebilir.

iki GitHub gizli dizi

Her durumda Visual Studio, GitHub gizli dizisini 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 gizli dizisi eksik

Gizli diziyi yeniden ayarlayamazsa Visual Studio, GitHub.com deponuzun sayfasından işlemi tamamlayabilmeniz için gizli diziye el ile erişme fırsatı sunar.

eksik GitHub gizli dizilerini 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'e veya Azure Kubernetes Service'e (AKS) mikro hizmetler uygulayan uygulamalar gibi çok projeli uygulamalar dağıtabilirsiniz. Bu makale, Azure Container Apps'i kapsar.

  1. Çözüm Gezgini'da GitHub Actions düğümüne sağ tıklayın ve Yeni iş akışı'nı 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 Azure'ı seçin.

  3. Belirli bir hedef için Azure Container Apps'i seçin. Sihirbaz Kapsayıcı Uygulaması 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ştur'u seç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. Container Apps ortamı, aynı sanal ağı paylaşan ve günlükleri aynı günlük 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. Kayıt Defteri ekranına ilerlemek için İleri'yi seçin. 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 için bkz. Azure Container Registry hizmet katmanları.

    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. Son'u 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'da GitHub Actions düğümünü genişletin, yeni oluşturulan iş akışına sağ tıklayın ve Düzenle'yi seç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, Azure kapsayıcı uygulamanızın adını, iş akışı çalıştırmalarını tetiklerken kullanacağınız depodaki dalı ve GitHub'daki gizli dizilere yapılan başvuruları görebilirsiniz. Gizli dizilere söz dizimi kullanılarak başvurulur ${{ secrets.SECRET_NAME }}. Bkz . GitHub Actions gizli dizileri.

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

Parametresi için file 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. Dalına working gönderiyorsanız, aşağıdaki koda benzemelidir:

on:
  push:
  branches:
  - working

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

GitHub.com deponuzun Eylemler sekmesinde iş akışı çalıştırmasını arayın. 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: Derleme aşaması derlenmiyor

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. Aşağıda, bir projenin depoda docker/ComposeSample/WebApi bulunduğu bir örnek verilmiştir. tam yol, iş akışı derleme kapsayıcısında Dockerfile bağlamı deponun köküne ayarlandığından, ancak Visual Studio'da proje klasörünün üzerindeki klasöre ayarlandığından verilir. Derleme klasörünü oluşturmak için buraya sonek _build 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ğrulaması kimlik 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'da 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 dizi kimliğini iş akışının her bölümünde başvuruda bulunarak denetleyin. 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.

Bir hizmet sorumlusu ayarlamak ve istemci kimliği, istemci gizli dizisi ve kiracı kimliği almak için komutunu çalıştırdıysanızaz ad sp create-for-rbac, GitHub deponuzun GitHub Actions Gizli Dizileri bölümüne istemci kimliğini ve istemci gizli dizisini gizli dizi 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 adımı Azure login aşağıdaki kodla değiştirin. İstemci kimliği ve istemci gizli dizisi için oluşturduğunuz kendi GitHub gizli dizi 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