Ejercicio: Creación de una canalización de Azure DevOps para implementar la aplicación nativa en la nube
El administrador quiere que cambie la CI/CD de la aplicación eShop de las empresas para que use Azure Pipelines. Ahora creará una canalización de Azure DevOps para compilar e implementar el servicio de productos.
Creación de una canalización de Azure DevOps
Importante
Antes de empezar, deberá tener una cuenta de Azure DevOps. Si no tiene una, puede crear una de forma gratuita en dev.azure.com.
- Inicie sesión en dev.azure.com.
- Seleccione + Nuevo proyecto.
- En Nombre del proyecto, escriba implementación de eShop.
- Deje la opción Visibilidad establecida en Privado y seleccione Crear.
- A la izquierda, seleccione Canalizaciones y, a continuación, seleccione Crear canalización.
- En la página Conectar, en ¿Dónde está el código?, seleccione GitHub.
- Si se le solicita, inicie sesión en GitHub y autorice a Azure Pipelines a acceder a su cuenta de GitHub.
- En Seleccionar un repositorio, seleccione el repositorio bifurcado.
- En la página Configurar , seleccione la opción Implementar en Azure Kubernetes Service .
- En el panel Implementar en Azure Kubernetes Service , seleccione la suscripción de Azure y, a continuación, seleccione Continuar.
- Si se le solicita, inicie sesión en la suscripción de Azure.
- En Cluster (Clúster), seleccione el clúster de AKS que creó en la unidad anterior aks-eshop.
- En Espacio de nombres, deje Existente seleccionado y, a continuación, seleccione predeterminado.
- En Container Registry, seleccione azure Container Registry que creó en la unidad anterior, como acseshop186748394.
- En Nombre de la imagen, escriba productservice.
- En Puerto de servicio, escriba 8080.
- Seleccione Validar y configurar.
Revisión del archivo YAML de la tubería
Azure Pipelines usa archivos YAML para definir los pasos para compilar e implementar la aplicación. El archivo YAML se almacena en el repositorio de GitHub y se creó automáticamente en función de la información proporcionada.
Vamos a revisar el archivo YAML:
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)
Las secciones desencadenador y recursos definen cuándo se debe ejecutar la canalización. En este caso, la canalización se ejecutará cuando se confirme un cambio en la rama principal del repositorio.
La sección variables define las variables usadas en la canalización. Las variables se usan para definir Azure Container Registry y el Dockerfile que se va a usar.
A continuación, YAML define un trabajo de compilación que usa el agente más reciente de Ubuntu . El trabajo usa la tarea docker para compilar e insertar la imagen en Azure Container Registry.
La última fase es implementar el servicio de producto actualizado en AKS. El trabajo usa la tarea KubernetesManifest para implementar la imagen en AKS.
Ejecución de la canalización
En la parte superior derecha de la página Revisar la canalización YAML , seleccione Guardar y ejecutar. En el panel Guardar y ejecutar:
- Seleccione Crear una rama nueva para este commit.
- Deje las opciones restantes con sus valores predeterminados.
- Seleccione Guardar y ejecutar.
Supervisión y solución de problemas de la canalización
Azure Pipelines se supervisa y administra desde el portal de Azure DevOps. Echemos un vistazo a la salida de la ejecución de la canalización que ha creado.
En la página de resumen se muestran todas las fases de la canalización en ejecución. Puede seleccionar una fase para ver los pasos con más detalle. En un momento, verá que se ha producido un error en la canalización. Seleccione la fase de compilación .
En la fase de compilación, puede ver que se ha producido un error en la compilación. Seleccione el paso Compilar e insertar una imagen en Azure Container Registry . El error del archivo de registro muestra:
##[error]Unhandled: No Dockerfile matching /home/vsts/work/1/s/**/Dockerfile was found.
Corregir el error
En DevOps, vuelva a la página de resumen del pipeline. Va a editar la canalización creada para corregir el error.
En la parte superior derecha, seleccione el menú Más acciones y, a continuación, seleccione Editar canalización.
La línea 17 del archivo YAML define el Dockerfile que se va a usar y, de forma predeterminada, la canalización espera que haya un archivo denominado Dockerfile en la raíz del repositorio.
La eShop usa un archivo docker diferente para el servicio de producto denominado DockerfileProducts. Edite la línea 17 para que sea:
dockerfilePath: '**/DockerfileProducts.acr'Haga clic en Guardar.
En el panel Guardar , seleccione Guardar.
Seleccione Ejecutar y, a continuación, en el panel Ejecutar canalización , seleccione Ejecutar.
Vea la etapa de construcción completarse. La etapa de implementación se detiene hasta que la seleccionas y permites que se ejecute.
La canalización se completa correctamente. Seleccione la fase Implementar para ver los pasos.



