Alıştırma - Dağıtım işlem hattı oluşturma
Helm grafiklerini oluşturdunuz ve artık uygulamayı GitHub Actions'ı kullanarak AKS'ye dağıtmak için ihtiyacınız olan tüm araçlara sahipsiniz. Bu ünitede, son dağıtım adımlarını tamamlayarak CI/CD işlem hattını tamamlaacaksınız.
Dağıtım adımları şunlardır:
- Dağıtım işini oluşturun.
- Açık Kimlik Bağlan (OIDC) ayarlayın.
- Uygulamayı Helm ile dağıtın.
- Dağıtımı üretimde çalıştırın.
Dağıtım işini ekleme
GitHub'da deponuzun çatalına gidin.
.github/workflows dizinini genişletin ve düzenlemek üzere build-staging.yml dosyasını açın.
Dosyanın sonuna, işin sonuna
build_push_image
aşağıdaki gibi yenideploy
bir iş ekleyin. Girintiyle eşleştiğinden emin olun.İşin üç anahtarı vardır:
runs-on
,needs
vepermissions
.- için
runs-on
, diğer işle tutarlı olmak için kullanınubuntu-20.04
. - için
needs
ilk işin adını kullanın;build_push_image
böylece uygulama yalnızca görüntü oluşturulduktan sonra dağıtılır - için
permissions
vecontents
adlıid-token
iki bağımsız değişken ekleyin.read
write
contents
gitHub Actions'a istek gönderme ve depo içeriğini okuma erişimi vermek için ve olarak ayarlayınid-token
.
- için
İşin ilk adımı olarak ekleyin
- uses: actions/checkout@v2
.Eklenen
deploy
iş aşağıdaki kod gibi görünmelidir:deploy: runs-on: ubuntu-20.04 needs: build_push_image permissions: id-token: write contents: read steps: - uses: actions/checkout@v2
Helm'i Yükle adımını ekleme
Helm sürümünü v3.3.1
indirmek ve yüklemek için GitHub eylemini kullanın.
Düzenleme sayfasının sağ panelinde helm aracı yükleyicisini arayın. Azure tarafından yayımlanan ilk sonucu seçin.
Kullanım YAML'sini kopyalamak için kopyala simgesini seçin.
YAML'yi kopyalayıp build-staging.yml anahtarın
uses
altına yapıştırın.adımını olarak
Helm tool installer
Install Helm
yeniden adlandırın ve anahtarını olarakv3.3.1
sabitleyinversion
.steps: - uses: actions/checkout@v2 - name: Install Helm uses: Azure/setup-helm@v1 with: version: v3.3.1
Azure Oturum Açma kimlik doğrulaması adımını ekleme
AKS'ye erişmek için GitHub Actions'ın kimliğini doğrulamak için OIDC kullanın.
Sağ panelde Azure oturum açma bilgilerini arayın ve Azure tarafından yayımlanan Azure Oturum Açma'yı seçin.
Kullanım YAML'sini kopyalamak için kopyala simgesini seçin ve build-staging.yml adımının
Install Helm
altına yapıştırın.Adım adını olarak
Azure Login
Sign in to Azure with OIDC
değiştirin.Azure Login
kimlik doğrulaması için üç parametre gerektirir:client-id
,tenant-id
vesubscription-id
. Bu parametreleri daha sonra ayarladığınız gizli diziler için yer tutucularla doldurun.- name: Sign in to Azure with OIDC uses: Azure/login@v1.5.1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Sağ panelde küme bağlamı için arama yapın ve Azure tarafından yayımlanan Azure Kubernetes set bağlamını seçin.
Kullanım YAML'sini kopyalamak için kopyala simgesini seçin ve build-staging.yml adımının
Sign in to Azure with OIDC
altına yapıştırın.resource-group
vecluster-name
parametrelerini önceki bir ünitede ayarladığınız gizli diziler için yer tutucularla doldurun.- name: Azure Kubernetes set context uses: Azure/aks-set-context@v3 with: resource-group: ${{ secrets.RESOURCE_GROUP }} cluster-name: ${{ secrets.CLUSTER_NAME }}
build-staging.yml dosyanız aşağıdaki örnekteki gibi görünmelidir:
name: Build and push the latest build to staging on: push: branches: [ main ] jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0 - name: Docker Login uses: docker/login-action@v3.0.0 with: registry: ${{ secrets.ACR_NAME }} username: ${{ secrets.ACR_LOGIN }} password: ${{ secrets.ACR_PASSWORD }} - name: Build and push staging images uses: docker/build-push-action@v5.0.0 with: context: . push: true tags: ${{secrets.ACR_NAME}}/contoso-website:latest deploy: runs-on: ubuntu-20.04 needs: build_push_image # Will wait for the execution of the previous job permissions: id-token: write # This is required for requesting the JWT contents: read # This is required for actions/checkout steps: - uses: actions/checkout@v2 - name: Install Helm uses: Azure/setup-helm@v1 with: version: v3.3.1 - name: Sign in to Azure with OIDC uses: Azure/login@v1.5.1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Azure Kubernetes set context uses: Azure/aks-set-context@v3 with: resource-group: ${{ secrets.RESOURCE_GROUP }} cluster-name: ${{ secrets.CLUSTER_NAME }}
Açık Kimlik Bağlan (OIDC) ayarlama
OIDC ile oturum açmak için bir hizmet sorumlusu ve sertifikalar oluşturarak gizli dizilerinize değerler atayın.
Hizmet sorumlusunu oluşturma
Azure Cloud Shell'de komutunu çalıştırın
az account show
ve çıkıştakiid
değeri kaydedin.Aşağıdaki komutu çalıştırarak bir hizmet sorumlusu oluşturun ve
id
değerini için önceki komuttan$SUBSCRIPTION_ID
yazın:az ad sp create-for-rbac --scopes /subscriptions/$SUBSCRIPTION_ID --role Contributor
JSON çıkışını kopyalayın ve sonraki adım için kaydedin.
Gizli dizileri ayarlama
GitHub depo sayfanızda Ayarlar sekmesini ve ardından sol menüden Gizli Diziler ve değişkenler>Eylemler'i seçin. Önceki adımlardan çıktıyı kullanan aşağıdaki üç yeni gizli diziyi tanımlayın.
AZURE_CLIENT_ID
: Çıkıştan"appId"
gelenaz ad sp create-for-rbac
değerAZURE_TENANT_ID
: Çıkıştan"tenant"
gelenaz ad sp create-for-rbac
değerAZURE_SUBSCRIPTION_ID
: Çıkıştanid
gelenaz account show
değer
Her gizli dizi için:
- Yeni depo gizli dizisi'ni seçin.
- Ad alanına gizli dizi adını girin.
- Gizli Dizi için değerini girin.
- Add secret (Gizli dizi ekle) öğesini seçin.
Federasyon kimlik bilgileri ekleme
GitHub Actions'ı uygulamaya erişme yetkisi vermek için federasyon sertifikaları oluşturun.
Azure portalında Uygulama kayıtları gidin.
Önceki
az ad sp create-for-rbac
adımda döndürülen değerledisplayName
eşleşen uygulamayı arayın ve seçin. Varsayılan olarak, uygulama adı hizmet sorumlusu oluşturma işleminin zaman damgasını kullanır.appID (İstemci Kimliği), Nesne Kimliği (Uygulama Nesne Kimliği) ve Dizin Kimliği (Kiracı Kimliği) değerlerinin önceki JSON çıkışıyla eşleşip eşleşmediğini doğrulayın.
Sol gezinti bölmesinde Sertifikalar ve gizli diziler'i seçin.
Sertifikalar ve gizli diziler ekranında Federasyon kimlik bilgileri sekmesini seçin.
Kimlik bilgisi ekle'yi seçin.
Hazırlama kimlik bilgilerini eklemek için, Kimlik bilgisi ekle ekranında aşağıdaki bilgileri seçin veya girin:
- Federasyon kimlik bilgisi senaryosu: Azure kaynaklarını dağıtan GitHub Actions'ı seçin.
- Kuruluş: GitHub kullanıcı adınızı girin.
- Depo: mslearn-aks-deployment-pipeline-github-actions girin.
- Varlık türü: Dal'ı seçin.
- GitHub dal adı: main girin.
- Ad: staging-cred girin.
- Açıklama Testi Girin.
Ekle'yi seçin.
Üretim kimlik bilgilerini eklemek için Kimlik bilgisi ekle'yi yeniden seçin ve Kimlik bilgisi ekle ekranında, aşağıdakiler dışında önceki kimlik bilgileriyle aynı değerleri girin:
- Varlık türü: Etiket'i seçin.
- GitHub etiket adı: v2.0.0 girin, çünkü sonraki adımda sürüm 2'yi dağıtacaksınız.
- Ad: prod-cred girin.
Ekle'yi seçin.
Helm ile uygulamayı dağıtma
Helm'i yapılandırdığınıza ve kümenize erişim tanıdığınıza göre, uygulamayı dağıtmaya hazırsınız demektir.
Helm Dağıtmayı Çalıştır adımını ekleme
GitHub'daki build-staging.yml dosyasına dönün, işteki en son adımdan
deploy
sonra adlıRun Helm Deploy
yeni bir adım oluşturun. Altına adlırun
başka bir anahtar ekleyin.- name: Run Helm Deploy run:
kapsayıcısının
run
içindeki herhangi bir kabuk komutunu yürütmek için anahtarını kullanabilirsiniz. Bu işlem hattı aşağıdakirun
Helm komutunu yürütmek için anahtarını kullanır:helm upgrade --install --create-namespace --atomic --wait --namespace staging contoso-website \ ./kubernetes/contoso-website \ --set image.repository=${{ secrets.ACR_NAME }} \ --set dns.name=${{ secrets.DNS_NAME }}
Her parametrenin ne yaptığını anlama:
Parametre Eylem veya değer helm upgrade
Yüklü sürümü yükseltir. --install
Sürüm yoksa yükler. --create-namespace
Bayraktaki --namespace
ad alanı yoksa, bunu oluşturur.--atomic
Sürüm başarısız olursa, yüklenmiş olan tüm iş yüklerini kaldırır. --wait
Yayının bitmesini bekler ve durumu döndürür OK
.--namespace staging contoso-website
contoso-website
Yayınıstaging
ad alanına dağıtır../kubernetes/contoso-website
Grafik dizininin konumu. --set image.repository
image.repository
yalnızca bu sürüm için values.yaml dosyasında değerini Güncelleştirmeler.--set dns.name
dns.name
Anahtarı yalnızca bu sürüm için values.yaml dosyasında Güncelleştirmeler.komutu dosyaya ekleyin ve karakterden
|
başlayarak çalışacak şekilde ayarlayın. AdımRun Helm deploy
şu örnekle eşleşmelidir:... - name: Run Helm Deploy run: | helm upgrade \ --install \ --create-namespace \ --atomic \ --wait \ --namespace staging \ contoso-website \ ./kubernetes/contoso-website \ --set image.repository=${{ secrets.ACR_NAME }} \ --set dns.name=${{ secrets.DNS_NAME }}
Tamamlanmış build-staging.yml dosyanız aşağıdaki örnekteki gibi görünmelidir:
name: Build and push the latest build to staging on: push: branches: [ main ] jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0 - name: Docker Login uses: docker/login-action@v3.0.0 with: registry: ${{ secrets.ACR_NAME }} username: ${{ secrets.ACR_LOGIN }} password: ${{ secrets.ACR_PASSWORD }} - name: Build and push staging images uses: docker/build-push-action@v5.0.0 with: context: . push: true tags: ${{secrets.ACR_NAME}}/contoso-website:latest deploy: runs-on: ubuntu-20.04 needs: build_push_image # Waits for the execution of the previous job permissions: id-token: write # Required for requesting the JWT contents: read # Required for actions/checkout steps: - uses: actions/checkout@v2 - name: Install Helm uses: Azure/setup-helm@v1 with: version: v3.3.1 - name: Sign in to Azure with OIDC uses: Azure/login@v1.5.1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Azure Kubernetes set context uses: Azure/aks-set-context@v3 with: resource-group: ${{ secrets.RESOURCE_GROUP }} cluster-name: ${{ secrets.CLUSTER_NAME }} - name: Run Helm Deploy run: | helm upgrade \ --install \ --create-namespace \ --atomic \ --wait \ --namespace staging \ contoso-website \ ./kubernetes/contoso-website \ --set image.repository=${{ secrets.ACR_NAME }} \ --set dns.name=${{ secrets.DNS_NAME }}
DNS_NAME gizli dizisini ayarlama
Yeni bir tarayıcı sekmesinde depo çatalınıza gidin, Ayarlar sekmesini seçin ve ardından sol menüden Gizli Diziler ve değişkenler>Eylemler'i seçin.
Yeni depo gizli dizisi'ni seçin.
Ad için
DNS_NAME
yazın.Gizli Dizi için, özgün kurulum betiği çıkışınızdan AKS DNS Bölge Adı değerini girin.
Bu değere sahip değilseniz Cloud Shell'de aşağıdaki komutu çalıştırarak ve
<aks-cluster-name>
değerlerini<resource-group-name>
yazın:az aks show -g <resource-group-name> -n <aks-cluster-name> -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
Add secret (Gizli dizi ekle) öğesini seçin.
Değişiklikleri işleme ve hazırlama dağıtımını test etme
Değişikliklerinizi işlemek için Değişiklikleri işle'yi seçin. İşleme için bir açıklama girin ve Değişiklikleri işle'yi seçin.
Derlemenin çalıştığını görmek için Eylemler sekmesini seçin.
Derleme başarılı olduktan sonra tarayıcınızda web sitesinin göründüğünü onaylamak için
contoso-staging.<aks-dns-zone-name>
adresine gidin.
Dağıtımı üretimde çalıştırma
Sonraki adım, üretim iş akışını oluşturmaktır.
Deponuzdaki .github/workflows dizininde düzenlemek üzere build-production.yml dosyasını açın.
deploy
Hazırlama işlem hattındaki işi kopyalayın ve build-production.yml dosyasındaki son satırın altına yapıştırın.bayrağını
Run Helm Deploy
staging
production
olarak değiştirerek--namespace
üretim ad alanına dağıtılacak adımı değiştirin.Helm komutunun sonuna yeni bir parametre ekleyin.
--set image.tag=${GITHUB_REF##*/}
Burada parametre genişletme adlı bir Bash özelliği kullanırsınız. Genişletme
${ENV##<wildcard><character>}
, dizenincharacter
sonrasındaki son oluşumunu döndürür.Bu durumda, yalnızca GitHub Actions çalışma zamanı
GITHUB_REF
olarak temsil edilen etiket adını almak istiyorsunuz. Dallar şeklindeykenrefs/heads/<branch>
etiketler şeklindedirrefs/tags/<tag>
.Yalnızca etiket adını almak için kaldırmak
refs/tags/
istiyorsunuz, bu nedenle ortam değişkenindekiGITHUB_REF
son/
etiketten sonraki her şeyi döndürmek için geçiş${GITHUB_REF##*/}
yapmak istiyorsunuz.Son build-production.yml dosyanız aşağıdaki örnekteki gibi görünmelidir:
name: Build and push the tagged build to production permissions: id-token: write # This is required for requesting the JWT contents: read # This is required for actions/checkout on: push: tags: - 'v*' jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Fetch latest version id: fetch_version run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/} - name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0 - name: Docker Login uses: docker/login-action@v3.0.0 with: registry: ${{ secrets.ACR_NAME }} username: ${{ secrets.ACR_LOGIN }} password: ${{ secrets.ACR_PASSWORD }} - name: Build and push production images uses: docker/build-push-action@v2 with: context: . push: true tags: ${{secrets.ACR_NAME}}/contoso-website:latest,${{secrets.ACR_NAME}}/contoso-website:${{ steps.fetch_version.outputs.TAG }} deploy: runs-on: ubuntu-20.04 needs: build_push_image steps: - uses: actions/checkout@v2 - name: Install Helm uses: Azure/setup-helm@v1 with: version: v3.3.1 - name: Login to Azure with OIDC uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Azure Kubernetes set context uses: Azure/aks-set-context@v3 with: resource-group: ${{ secrets.RESOURCE_GROUP }} cluster-name: ${{ secrets.CLUSTER_NAME }} - name: Run Helm Deploy run: | helm upgrade \ --install \ --create-namespace \ --atomic \ --wait \ --namespace production \ contoso-website \ ./kubernetes/contoso-website \ --set image.repository=${{ secrets.ACR_NAME }} \ --set dns.name=${{ secrets.DNS_NAME }} \ --set image.tag=${GITHUB_REF##*/}
Değişikliklerinizi işlemek için Değişiklikleri işle'yi seçin. İşleme için bir açıklama girin ve Değişiklikleri işle'yi seçin.
Üretim değişiklikleri
Üretim iş akışını her çalıştırdığınızda, federasyon sertifikasını ilgili etiket sürümüyle aşağıdaki gibi güncelleştirmeniz gerekir:
Azure portalında uygulama sayfanıza gidin ve sol gezinti bölmesinde Sertifikalar ve gizli diziler'i seçin.
Federasyon kimlik bilgileri sekmesini seçin.
Prod cred kimlik bilgilerini seçin.
Kimlik bilgilerini düzenle ekranında, Seçime göre seçeneğinin yanında, etiket numarasını v.2.0.1 gibi yeni bir v.x.x.x olarak artırın.
Güncelleştir'i seçin.
Cloud Shell'de komutunu çalıştırarak
git pull
en son değişiklikleri getirin. Ardından, değişiklikleri etiketlemek ve göndermek için aşağıdaki komutu çalıştırın ve yer tutucu için yeni sürüm etiketinizi yazın:git tag -a v<new version tag> -m 'Create new production deployment' && git push --tags
İstendiğinde, önceki alıştırmalardan PAT'yi parola olarak belirtin.
GitHub'da Eylemler sekmesini açın ve çalışan işlemi görün.
İş akışı başarılı olduktan sonra üretim dağıtımını test etmek için
contoso-production.<aks-dns-zone-name>
tarayıcınızda adresine gidin ve web sitesinin göründüğünü onaylayın.
Ücret uygulanmaması için kaynaklarınızı silmek için bir sonraki üniteye geçin.