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
- Visual Studio'da GitHub hesabınızda oturum açmış olmanız gerekir.
- Azure hesabı. Azure hesabınız yoksa Visual Studio aboneleri için Azure avantajlarınızı etkinleştirin veya ücretsiz deneme sürümüne kaydolun.
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.
Sonraki ekranda Azure'ı ve ardından İleri'yi seçin.
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.
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.
Visual Studio yeni bir GitHub Actions iş akışı oluşturur ve bunu işlemenizi ve GitHub.com göndermenizi ister.
Bu adımı yerleşik Git araçlarını kullanarak tamamlarsanız, Visual Studio iş akışının yürütülmesini algılar.
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.
Başarılı bir dağıtım için hizmet sorumlusuna erişim de gerekebilir.
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.
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.
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.
Çö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 İş Akışı hedef ekranında Azure'ı seçin.
Belirli bir hedef için Azure Container Apps'i seçin. Sihirbaz Kapsayıcı Uygulaması ekranına ilerler.
Mevcut bir Azure Container App'i seçin veya Yeni oluştur'u seçin.
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.
Oluşturulduktan sonra yeni Azure Container Apps örneği gösterilir.
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.
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 kayıt defteri oluşturulduktan sonra ekranda gösterilir.
Çö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.
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.
İş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.
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