Übung – Erstellen einer Azure DevOps-Pipeline zum Bereitstellen Ihrer cloudeigenen App
Ihr Vorgesetzter möchte, dass Sie die CI/CD für die Unternehmen eShop-App ändern, um Azure Pipelines zu verwenden. Sie erstellen nun eine Azure DevOps-Pipeline, um Ihren Produktdienst zu erstellen und bereitzustellen.
Erstellen einer Azure DevOps-Pipeline
Von Bedeutung
Bevor Sie beginnen, müssen Sie über ein Azure DevOps-Konto verfügen. Wenn Sie keins haben, können Sie eine kostenlos bei dev.azure.com erstellen.
- Melden Sie sich bei dev.azure.com an.
- Wählen Sie +Neues Projekt aus.
- Geben Sie für den Projektnamen die eShop-Bereitstellung ein.
- Lassen Sie die Sichtbarkeit auf "Privat" festgelegt, und wählen Sie "Erstellen" aus.
- Wählen Sie auf der linken Seite "Pipelines" und dann " Pipeline erstellen" aus.
- Wählen Sie auf der Seite "Verbinden" unter "Wo befindet sich Ihr Code?", gitHub aus.
- Wenn Sie dazu aufgefordert werden, melden Sie sich bei GitHub an, und autorisieren Sie Azure Pipelines für den Zugriff auf Ihr GitHub-Konto.
- Für Repository auswählen wählen Sie Ihr geforktes Repository aus.
- Wählen Sie auf der Seite "Konfigurieren " die Option " In Azure Kubernetes-Dienst bereitstellen " aus.
- Wählen Sie im Bereich "Für Azure Kubernetes-Dienst bereitstellen " Ihr Azure-Abonnement und dann " Weiter" aus.
- Wenn Sie dazu aufgefordert werden, melden Sie sich bei Ihrem Azure-Abonnement an.
- Wählen Sie für den Cluster den AKS-Cluster aus, den Sie in der vorherigen Einheit aks-eshop erstellt haben.
- Lassen Sie für den Namespace"Vorhanden" ausgewählt, und wählen Sie dann "Standard" aus.
- Wählen Sie für die Containerregistrierung die Azure-Containerregistrierung aus, die Sie in der vorherigen Einheit erstellt haben, z. B. acseshop186748394.
- Geben Sie für den Image-Namenproductservice ein.
- Geben Sie für den Dienstport8080 ein.
- Wählen Sie "Überprüfen und Konfigurieren" aus.
Überprüfen Sie die YAML-Pipeline-Datei
Azure Pipelines verwendet YAML-Dateien, um die Schritte zum Erstellen und Bereitstellen Ihrer App zu definieren. Die YAML-Datei wird in Ihrem GitHub-Repository gespeichert und basierend auf den von Ihnen bereitgestellten Informationen automatisch erstellt.
Sehen wir uns die YAML-Datei an:
trigger:
- main
resources:
- repo: self
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: '3bcbb23c-6fca-4ff0-8719-bfbdb64a89b1'
imageRepository: 'productservice'
containerRegistry: 'acseshop186748394.azurecr.io'
dockerfilePath: '**/Dockerfile'
tag: '$(Build.BuildId)'
imagePullSecret: 'acseshop18674839414442d34-auth'
# Agent VM image name
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- upload: manifests
artifact: manifests
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
jobs:
- deployment: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
environment: 'PhilStollerymod9cloudnativeexercisecode-1959.default'
strategy:
runOnce:
deploy:
steps:
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: createSecret
secretName: $(imagePullSecret)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
Die Auslöser - und Ressourcenabschnitte definieren, wann die Pipeline ausgeführt werden soll. In diesem Fall wird die Pipeline ausgeführt, wenn eine Änderung an der Standardverzweigung Ihres Repositorys übernommen wird.
Im Variablenabschnitt werden die variablen definiert, die in der Pipeline verwendet werden. Die Variablen werden verwendet, um die zu verwendende Azure-Containerregistrierung und die Dockerfile-Datei zu definieren.
Der YAML definiert dann einen Buildauftrag, der den ubuntu-latest-Agent verwendet. Der Job verwendet die Docker-Task, um das Image in die Azure-Containerregistrierung aufzubauen und zu übertragen.
Die letzte Phase besteht darin, den aktualisierten Produktdienst für AKS bereitzustellen . Der Job verwendet die KubernetesManifest-Aufgabe, um das Image auf AKS bereitzustellen.
Führen Sie die Pipeline aus.
Wählen Sie oben rechts auf der YaML-Pipelineseite "Überprüfen" die Option "Speichern" und "Ausführen" aus. Im Panel "Speichern und Ausführen":
- Wählen Sie Für diesen Commit neuen Branch erstellen.
- Lassen Sie alle anderen Optionen auf ihre Standardeinstellungen belassen.
- Wählen Sie "Speichern" und "Ausführen" aus.
Überwachen und Beheben von Problemen mit der Pipeline
Azure-Pipelines werden über das Azure DevOps-Portal überwacht und verwaltet. Sehen wir uns die Ergebnisse der Ausführung der von Ihnen erstellten Pipeline an.
Auf der Zusammenfassungsseite werden alle Phasen der laufenden Pipeline angezeigt. Sie können eine Phase auswählen, um die Schritte ausführlicher anzuzeigen. In einem Moment sehen Sie, dass die Pipeline fehlgeschlagen ist. Wählen Sie die Buildphase aus.
In der Buildphase können Sie sehen, dass der Build fehlgeschlagen ist. Wählen Sie den Schritt "Erstellen" aus, und übertragen Sie ein Image in den Schritt "Azure Container Registry" . Der Fehler in der Protokolldatei zeigt Folgendes:
##[error]Unhandled: No Dockerfile matching /home/vsts/work/1/s/**/Dockerfile was found.
Beheben des Fehlers
Wechseln Sie in DevOps zurück zur Pipelinezusammenfassungsseite. Sie werden die erstellte Pipeline bearbeiten, um den Fehler zu beheben.
Wählen Sie oben rechts das Menü "Weitere Aktionen " und dann " Pipeline bearbeiten" aus.
Zeile 17 der YAML-Datei definiert die zu verwendende Dockerfile-Datei, und standardmäßig erwartet die Pipeline, dass im Stammverzeichnis des Repositorys eine Datei namens Dockerfile vorhanden ist.
Der eShop verwendet eine andere Docker-Datei für den Produktdienst namens DockerfileProducts. Zeile 17 bearbeiten, um folgendes zu sein:
dockerfilePath: '**/DockerfileProducts.acr'Wählen Sie Speichern aus.
Wählen Sie im Bereich "Speichern " die Option "Speichern" aus.
Wählen Sie Ausführen aus, und wählen Sie dann im Bereich Pipeline ausführen die Option Ausführen aus.
Sehen Sie sich die Buildphase vollständig an. Die Bereitstellungsphase wird angehalten, bis Sie sie auswählen und die Ausführung zulassen.
Die Pipeline wird erfolgreich abgeschlossen. Wählen Sie die Bereitstellungsphase aus, um die Schritte anzuzeigen.



