İşlem hattı yapılandırma ve güncelleştirmeleri gönderme
Bu makalede, GitHub Actions veya Azure DevOps gibi bir CI/CD işlem hattı aracılığıyla şablon değişikliklerini göndermek için Azure Geliştirici CLI'sını (azd
) kullanmayı öğreneceksiniz. Bu örnekte React Web App'i Node.js API'siyle ve Azure'da MongoDB şablonuyla kullanacaksınız, ancak bu makalede öğrendiğiniz ilkeleri Azure Geliştirici CLI şablonlarından herhangi birine uygulayabilirsiniz.
Not
Komut azd pipeline config
hala beta sürümündedir. Özellik sürüm oluşturma ve sürüm stratejisi sayfasında alfa ve beta özellik desteği hakkında daha fazla bilgi edinin.
Önkoşullar
- Azure Geliştirici CLI'sını yükleyin.
- Node.js şablonunu dağıtın.
- Visual Studio Code yüklü.
azd
şablonlar , CI/CD kurulumu için gereken adlı azure-dev.yml
varsayılan bir GitHub Actions ve/veya Azure DevOps işlem hattı yapılandırma dosyası içerebilir veya içermeyebilir. Bu yapılandırma dosyası Azure kaynaklarınızı sağlar ve kodunuzu ana dala dağıtır. bulabilirsiniz azure-dev.yml
:
- GitHub Actions için: dizininde
.github/workflows
. - Azure DevOps için: dizininde
.azdo/pipelines
.
Yapılandırma dosyasını olduğu gibi kullanabilir veya gereksinimlerinize uyacak şekilde değiştirebilirsiniz.
Not
çağırmadan azd pipeline config
önce şablonunuzun işlem hattı tanımına (azure-dev.yaml
) sahip olduğundan emin olun. azd
bu dosyayı otomatik olarak oluşturmaz.
Aşağıdaki azd için işlem hattı tanımı oluşturma bölümüne bakın.
azd pipeline config
Komutunu kullanarak aşağıdaki görevleri işleyen bir CI/CD işlem hattı yapılandırın:
- Azure aboneliğinde uygulama için bir hizmet sorumlusu oluşturur ve yapılandırılır. Azd'in
Owner
hizmet sorumlusuna rol oluşturmasına ve atamasına izin vermek için kullanıcınızın Azure aboneliğinde rolü veyaContributor + User Access Administrator
rolleri olmalıdır. - GitHub veya Azure DevOps deposu oluşturup yapılandırmak ve proje kodunuzu buna işlemek için bir iş akışında size yol gösterir. Ayrıca mevcut bir depo kullanmayı da seçebilirsiniz.
- Azure ile deponuz arasında güvenli bir bağlantı oluşturur.
- İş akışı dosyasını iade ettiğinizde GitHub eylemini çalıştırır.
Bu işlem üzerinde daha ayrıntılı denetim için veya kullanıcınız gerekli rollere sahip değilse, işlem hattını el ile yapılandırabilirsiniz.
Devam etmek için tercih ettiğiniz işlem hattı sağlayıcısını seçin:
GitHub'ı Azure'a dağıtma yetkisi verme
İş akışını yapılandırmak için, gitHub eyleminden hizmet sorumlusunu sizin adınıza Azure'a dağıtma yetkisi vermeniz gerekir. azd
hizmet sorumlusunu ve bunun için bir federasyon kimlik bilgilerini oluşturur.
Azure hizmet sorumlusunu oluşturmak ve işlem hattını yapılandırmak için aşağıdaki komutu çalıştırın:
azd pipeline config
Bu komut isteğe bağlı olarak bir GitHub deposu oluşturur ve kodu yeni depoya iletir.
Not
Varsayılan olarak,
azd pipeline config
federasyon kimlik bilgileri olarak adlandırılan OpenID Connect (OIDC) kullanır. OIDC'yi kullanmak istemiyorsanızazd pipeline config --auth-type client-credentials
komutunu çalıştırın.Terraform için OIDC/federasyon kimlik bilgileri desteklenmez .
İstenen GitHub bilgilerini sağlayın.
Yeni bir GitHub Actions çalıştırması başlatmak için yerel değişikliklerinizi işlemeniz ve göndermeniz istendiğinde belirtin
y
.Terminal penceresinde komutun
azd pipeline config
sonuçlarını görüntüleyin. komutu,azd pipeline config
projeniz için GitHub depo adının çıkışını alır.Tarayıcınızı kullanarak projenizin GitHub deposunu açın.
İş akışının çalıştığını görmek için Eylemler'i seçin.
Kod değişikliği yapma ve gönderme
Projenin
/src/web/src/layout
dizininde dosyasını açınheader.tsx
.satırını
<Text variant="xLarge">ToDo</Text>
bulun.Değişmez değeri
ToDo
olarakmyTodo
değiştirin.Dosyayı kaydedin.
Değişikliğinizi işleyin. Değişikliğin işlenmesi, güncelleştirmeyi dağıtmak için GitHub Eylem işlem hattını başlatır.
Tarayıcınızı kullanarak projenizin GitHub deposunu açarak her ikisini de görebilirsiniz:
- İşlemeniz
- GitHub Actions tarafından ayarlanan işleme.
Test güncelleştirmesinin iş akışına yansıtılmış olduğunu görmek için Eylemler'i seçin.
Güncelleştirmeyi incelemek için web ön uç URL'sini ziyaret edin.
azd
GitHub eylemi olarak
GitHub eylemi olarak ekleyin.azd
Bu eylem yüklenir azd
. Bunu kullanmak için aşağıdakileri öğesine .github\workflows\azure-dev.yml
ekleyebilirsiniz:
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install azd
uses: Azure/setup-azd@v0.1.0
Kaynakları temizleme
Bu makalede oluşturulan Azure kaynaklarına artık ihtiyacınız kalmadığında aşağıdaki komutu çalıştırın:
azd down
Gelişmiş özellikler
Komutu, aşağıdaki bölümlerde açıklandığı gibi belirli şablon senaryoları veya gereksinimleri için genişletebilirsiniz azd pipeline config
.
Ek gizli diziler veya değişkenler
Varsayılan olarak, azd
işlem hattı için değişkenleri ve gizli dizileri ayarlar. Örneğin, azd pipeline config
komutu her yürütürken işlem hattı değişkenleri olarak ve region
değerlerini oluşturursubscription id
environment name
. İşlem hattı tanımı daha sonra şu değişkenlere başvurur:
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
İşlem hattı çalıştırıldığında, azd
değişkenlere ve gizli dizilere eşlenen ortamdan değerleri alır. Şablona bağlı olarak, ortam değişkenlerini kullanarak denetleyebileceğiniz ayarlar olabilir. Örneğin, adlı KEY_VAULT_NAME
bir ortam değişkeni, şablon altyapısındaki bir Key Vault kaynağının adını tanımlamak için ayarlanabilir. Bu gibi durumlarda, değişkenlerin ve gizli dizilerin listesi, şablonu kullanılarak azure.yaml
tanımlanabilir. Örneğin, aşağıdaki azure.yaml
yapılandırmayı göz önünde bulundurun:
pipeline:
variables:
- KEY_VAULT_NAME
- STORAGE_NAME
secrets:
- CONNECTION_STRING
Bu yapılandırmayla, azd
değişkenlerden veya gizli dizilerden herhangi birinin ortamda boş olmayan bir değere sahip olup olmadığını denetler. azd
ardından yapılandırmadaki anahtarın adını değişkenin veya gizli dizinin adı olarak ve değerin ortamından dize olmayan değeri kullanarak işlem hattı için bir değişken veya gizli dizi oluşturur.
İşlem azure-dev.yaml
hattı tanımı daha sonra değişkenlere veya gizli dizilere başvurabilir:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
KEY_VAULT_NAME: ${{ variables.KEY_VAULT_NAME }}
STORAGE_NAME: ${{ variables.STORAGE_NAME }}
CONNECTION_STRING: ${{ secrets.CONNECTION_STRING }}
Not
azd'in işlem hattı değerlerini sıfırlaması için içindeki azure.yaml
gizli dizilerin veya değişkenlerin listesini güncelleştirdikten sonra çalıştırmanız azd pipeline config
gerekir.
Altyapı parametreleri
Aşağıdaki bicep örneğini göz önünde bulundurun:
@secure()
param BlobStorageConnection string
Parametrenin BlobStorageConnection
varsayılan değer kümesi yoktur, bu nedenle azd
kullanıcıdan bir değer girmesini ister. Ancak, CI/CD sırasında etkileşimli bir istem yoktur. azd
komutunu çalıştırdığınızda azd pipeline config
parametresinin değerini istemesi, değeri işlem hattına kaydetmesi ve işlem hattı çalıştırıldığında değeri yeniden getirmesi gerekir.
azd
adlı AZD_INITIAL_ENVIRONMENT_CONFIG
bir işlem hattı gizli dizisini kullanarak işlem hattındaki tüm gerekli parametrelerin değerini otomatik olarak kaydeder ve ayarlar. Yalnızca işlem hattınızda bu gizli diziye başvurmanız gerekir:
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
İşlem hattı çalıştırıldığında, azd
parametrelerin değerlerini gizli diziden alır ve etkileşimli istem gereksinimini ortadan kaldırır.
Not
Yeni bir parametre eklerseniz yeniden çalıştırmanız azd pipeline config
gerekir.
İşlem hattı tanımı oluşturma
Şablonunuzun azd
ci/CD işlem hattı tanım dosyası yoksa kendiniz oluşturabilirsiniz. CI/CD işlem hattı tanımı genellikle 4 ana bölüme sahiptir:
- tetiklemek
- izinler
- işletim sistemi veya havuz
- çalıştırılacak adımlar
Aşağıdaki örneklerde GitHub Actions ve Azure Pipelines için bir tanım dosyasının ve ilgili yapılandırmaların nasıl oluşturulacağı gösterilmektedir.
GitHub Actions'da çalıştırmak azd
için aşağıdaki yapılandırmalar gerekir:
- Verme
id-token: write
vecontents: read
erişim kapsamları. - Zaten yüklü olan
azd
bir docker görüntüsü kullanmıyorsanız azd eylemini yükleyin.
Kendi işlem hattı tanımınız için başlangıç noktası olarak aşağıdaki şablonu kullanabilirsiniz:
on:
workflow_dispatch:
push:
# Run when commits are pushed to mainline branch (main or master)
# Set this to the mainline branch you are using
branches:
- main
- master
# Set this permission if you are using a Federated Credential.
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
# azd build-in variables.
# This variables are always set by `azd pipeline config`
# You can set them as global env (apply to all steps) or you can add them to individual steps' environment
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
## Define the additional variables or secrets that are required globally (provision and deploy)
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
steps:
- name: Checkout
uses: actions/checkout@v4
# using the install-azd action
- name: Install azd
uses: Azure/setup-azd@v1.0.0
# # If you want to use azd-daily build, or install it from a PR, you can remove previous step and
# # use the next one:
# - name: Install azd - daily or from PR
# # Update this scrip based on the OS - pool of your pipeline. This example is for a linux pipeline installing daily build
# run: curl -fsSL https://aka.ms/install-azd.sh | bash -s -- --version daily
# shell: pwsh
# azd set up Federated Credential by default. You can remove this step if you are using Client Credentials
- name: Log in with Azure (Federated Credentials)
if: ${{ env.AZURE_CLIENT_ID != '' }}
run: |
azd auth login `
--client-id "$Env:AZURE_CLIENT_ID" `
--federated-credential-provider "github" `
--tenant-id "$Env:AZURE_TENANT_ID"
shell: pwsh
## If you set up your pipeline with Client Credentials, remove previous step and uncomment this one
# - name: Log in with Azure (Client Credentials)
# if: ${{ env.AZURE_CREDENTIALS != '' }}
# run: |
# $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable;
# Write-Host "::add-mask::$($info.clientSecret)"
# azd auth login `
# --client-id "$($info.clientId)" `
# --client-secret "$($info.clientSecret)" `
# --tenant-id "$($info.tenantId)"
# shell: pwsh
# env:
# AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
# # uncomment this if you are using infrastructure parameters
# AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
## Define the additional variables or secrets that are required only for provision
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
- name: Deploy Application
run: azd deploy --no-prompt
env:
## Define the additional variables or secrets that are required only for deploy
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}