Tutorial: Implementación de CI/CD con GitOps (Flux v2)
En este tutorial, configurará una solución de CI/CD con GitOps con Flux v2 y los clústeres de Kubernetes habilitados para Azure Arc o los clústeres de Azure Kubernetes Service (AKS). Con la aplicación de votaciones de ejemplo de Azure puede llevar a cabo las siguientes tareas:
- Conecte los repositorios de la aplicación y de GitOps a Azure DevOps (Azure Repos) o GitHub.
- Implemente el flujo de CI/CD con Azure Pipelines o GitHub.
- Conecte la instancia de Azure Container Registry a Azure DevOps y Kubernetes.
- Cree los grupos de variables de entorno o los secretos.
- Implementar los entornos
dev
ystage
. - Probar los entornos de la aplicación.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Requisitos previos
Complete el tutorial anterior para obtener información sobre cómo implementar GitOps para su entorno de CI/CD.
Conozca las ventajas y arquitectura de esta característica.
Compruebe que tiene:
- Un clúster de Kubernetes conectado habilitado para Azure Arc con el nombre arc-cicd-cluster.
- Una instancia conectada de Azure Container Registry con la integración de AKS o la autenticación de un clúster que no es de AKS.
Instale las versiones más recientes de estas extensiones de la CLI de Kubernetes habilitado para Azure Arc y Configuración de Kubernetes:
az extension add --name connectedk8s az extension add --name k8s-configuration
O bien, para actualizar las extensiones a la versión más reciente, ejecute los siguientes comandos:
az extension update --name connectedk8s az extension update --name k8s-configuration
Conexión de Azure Container Registry a Kubernetes
Habilite el clúster de Kubernetes para extraer imágenes de la instancia de Azure Container Registry. Si es privada, se requiere autenticación.
Conexión de Azure Container Registry a clústeres existentes de Kubernetes
Integre una instancia de Azure Container Registry existente con los clústeres de AKS existentes mediante el siguiente comando:
az aks update -n arc-cicd-cluster -g myResourceGroup --attach-acr arc-demo-acr
Creación de un secreto de extracción de imágenes
Para conectar los clústeres locales y los que no son de AKS a la instancia de Azure Container Registry, cree un secreto de extracción de imágenes. Kubernetes usa secretos de extracción de imágenes para almacenar la información necesaria para autenticarse en el registro.
Cree un secreto de extracción de imágenes con el siguiente comando kubectl
: Repita el procedimiento con los espacios de nombres dev
y stage
.
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<container-registry-name>.azurecr.io \
--docker-username=<service-principal-ID> \
--docker-password=<service-principal-password>
Para evitar tener que establecer un secreto de extracción de imágenes para cada pod, considere la posibilidad de agregar el secreto de extracción de imágenes a la cuenta de servicio en los espacios de nombres dev
y stage
. Consulte el tutorial de Kubernetes para más información.
En función del orquestador de CI/CD que prefiera, puede continuar con las instrucciones para Azure DevOps o para GitHub.
Implementación de CI/CD con Azure DevOps
En este tutorial se da por supuesto que está familiarizado con Azure DevOps, Azure Repos, Azure Pipelines y la CLI de Azure.
Asegúrese de completar los pasos siguientes primero:
- Inicie sesión en Azure DevOps Services.
- Debe tener permisos de "Administrador de compilación" y "Administrador de proyectos" para Azure Repos y Azure Pipelines.
Importación de los repositorios de la aplicación y de GitOps en Azure Repos
Importe un repositorio de aplicaciones y un repositorio de GitOps en Azure Repos. Para este tutorial, use los siguientes repositorios de ejemplo:
Repositorio de la aplicación arc-cicd-demo-src
- URL: https://github.com/Azure/arc-cicd-demo-src
- Contiene la aplicación de votaciones de Azure de ejemplo que se va a implementar con GitOps.
- Importar el repositorio con el nombre
arc-cicd-demo-src
Repositorio de GitOps arc-cicd-demo-gitops
- Dirección URL: https://github.com/Azure/arc-cicd-demo-gitops
- Funciona como base para los recursos del clúster que hospedan la aplicación de votaciones de Azure.
- Importar el repositorio con el nombre
arc-cicd-demo-gitops
Obtenga más información sobre la Importación de repositorios de Git.
Nota
La importación y el uso de dos repositorios diferentes para la aplicación y los repositorios de GitOps puede mejorar la seguridad y la simplicidad. Los permisos y la visibilidad de los repositorios de la aplicación y de GitOps se pueden optimizar individualmente. Por ejemplo, es posible que el administrador del clúster no encuentre los cambios en el código de la aplicación correspondientes al estado deseado del clúster. Por el contrario, un desarrollador de aplicaciones no necesita conocer los parámetros específicos de cada entorno: un conjunto de valores de prueba que proporcione cobertura para los parámetros puede ser suficiente.
Conexión del repositorio de GitOps
Para la implementación continua de la aplicación, conecte el repositorio de la aplicación al clúster mediante GitOps. El repositorio de GitOps arc-cicd-demo-gitops contiene los recursos básicos para poner en funcionamiento la aplicación en el clúster arc-cicd-cluster.
El repositorio inicial de GitOps solo contiene un manifiesto que crea los espacios de nombres dev y stage correspondientes a los entornos de implementación.
La conexión de GitOps que crea sincroniza automáticamente los manifiestos en el directorio del manifiesto y actualiza el estado del clúster.
El flujo de trabajo de CI/CD rellena el directorio de manifiestos con manifiestos adicionales para implementar la aplicación.
Cree una nueva conexión de GitOps al repositorio arc-cicd-demo-gitops recién importado en Azure Repos.
az k8s-configuration flux create \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --namespace flux-system \ --resource-group myResourceGroup \ -u https://dev.azure.com/<Your organization>/<Your project>/_git/arc-cicd-demo-gitops \ --https-user <Azure Repos username> \ --https-key <Azure Repos PAT token> \ --scope cluster \ --cluster-type connectedClusters \ --branch master \ --kustomization name=cluster-config prune=true path=arc-cicd-cluster/manifests
Sugerencia
Para un clúster de AKS (en lugar de un clúster habilitado para Arc), use
-cluster-type managedClusters
.Compruebe el estado de la implementación en Azure Portal.
- Si se realiza correctamente, verá que se han creado en el clúster los espacios de nombres
dev
ystage
. - También puede confirmar que, en la página Azure Portal del clúster, se crea una configuración
cluster-config
en la pestaña fGitOps
.
- Si se realiza correctamente, verá que se han creado en el clúster los espacios de nombres
Importación de las canalizaciones de CI/CD
Ahora que ha sincronizado una conexión de GitOps, debe importar las canalizaciones de CI/CD que crean los manifiestos.
El repositorio de la aplicación contiene la carpeta .pipeline
con las canalizaciones que se van a utilizar para las solicitudes de incorporación de cambios (PR), CI y CD. Importe y cambie el nombre de las tres canalizaciones proporcionadas en el repositorio de ejemplo:
Nombre del archivo de la canalización. | Descripción |
---|---|
.pipelines/az-vote-pr-pipeline.yaml |
Canalización de PR de la aplicación, llamada arc-cicd-demo-src PR |
.pipelines/az-vote-ci-pipeline.yaml |
Canalización de CI de la aplicación, llamada arc-cicd-demo-src CI |
.pipelines/az-vote-cd-pipeline.yaml |
Canalización de CD de la aplicación, llamada arc-cicd-demo-src CD |
Conexión de Azure Container Registry a Azure DevOps
Durante el proceso de CI, implementará los contenedores de la aplicación en un registro. Empiece por crear una conexión de servicio de Azure:
- En Azure DevOps, abra la página Conexiones de servicio desde la página de configuración del proyecto. En TFS, abra la página Servicios desde el icono de Configuración en la barra de menús superior.
- Elija + Nueva conexión de servicio y seleccione el tipo de conexión de servicio que necesite.
- Rellene los parámetros para la conexión de servicio. En este tutorial:
- Asigne el nombre arc-demo-acr a la conexión de servicio.
- Seleccione myResourceGroup como grupo de recursos.
- Seleccione Conceder permiso de acceso a todas las canalizaciones.
- Esta opción autoriza los archivos de canalización de YAML para las conexiones de servicio.
- Elija Guardar para crear la conexión.
Configuración de la conexión del servicio PR
La canalización de CD manipula las solicitudes de cambios (PR) en el repositorio de GitOps, lo que requiere una conexión de servicio. Para configurar esta conexión:
- En Azure DevOps, abra la página Conexiones de servicio desde la página de configuración del proyecto. En TFS, abra la página Servicios desde el icono de Configuración en la barra de menús superior.
- Elija + Nueva conexión de servicio y seleccione el tipo
Generic
. - Rellene los parámetros para la conexión de servicio. En este tutorial:
- Dirección URL del servidor
https://dev.azure.com/<Your organization>/<Your project>/_apis/git/repositories/arc-cicd-demo-gitops
- Deje vacíos los campos Nombre de usuario y Contraseña.
- Asigne a la conexión de servicio el nombre azdo-pr-connection.
- Dirección URL del servidor
- Seleccione Conceder permiso de acceso a todas las canalizaciones.
- Esta opción autoriza los archivos de canalización de YAML para las conexiones de servicio.
- Elija Guardar para crear la conexión.
Instalación del conector de GitOps
Agregue el repositorio del conector de GitOps a los repositorios de Helm:
helm repo add gitops-connector https://azure.github.io/gitops-connector/
Instale el conector en el clúster:
helm upgrade -i gitops-connector gitops-connector/gitops-connector \ --namespace flux-system \ --set gitRepositoryType=AZDO \ --set ciCdOrchestratorType=AZDO \ --set gitOpsOperatorType=FLUX \ --set azdoGitOpsRepoName=arc-cicd-demo-gitops \ --set azdoOrgUrl=https://dev.azure.com/<Your organization>/<Your project> \ --set gitOpsAppURL=https://dev.azure.com/<Your organization>/<Your project>/_git/arc-cicd-demo-gitops \ --set orchestratorPAT=<Azure Repos PAT token>
Nota:
Azure Repos PAT token
debe tener permisos deBuild: Read & execute
yCode: Full
.Configure Flux para enviar notificaciones al conector de GitOps:
cat <<EOF | kubectl apply -f - apiVersion: notification.toolkit.fluxcd.io/v1beta1 kind: Alert metadata: name: gitops-connector namespace: flux-system spec: eventSeverity: info eventSources: - kind: GitRepository name: cluster-config - kind: Kustomization name: cluster-config-cluster-config providerRef: name: gitops-connector --- apiVersion: notification.toolkit.fluxcd.io/v1beta1 kind: Provider metadata: name: gitops-connector namespace: flux-system spec: type: generic address: http://gitops-connector:8080/gitopsphase EOF
Para más información sobre la instalación, consulte el repositorio del Conector de GitOps.
Creación de grupos de variables de entorno
Grupo de variables del repositorio de aplicaciones
Cree un grupo de variables llamado az-vote-app-dev. Establezca los valores siguientes:
Variable | Value |
---|---|
AZURE_SUBSCRIPTION |
(conexión de servicio de Azure, que debe ser arc-demo-acr, creada anteriormente en el tutorial) |
AZ_ACR_NAME |
Nombre de Azure ACR, por ejemplo arc-demo-acr |
ENVIRONMENT_NAME |
Des |
MANIFESTS_BRANCH |
master |
MANIFESTS_REPO |
arc-cicd-demo-gitops |
ORGANIZATION_NAME |
Nombre de la organización de Azure DevOps |
PROJECT_NAME |
Nombre del proyecto de GitOps en Azure DevOps |
REPO_URL |
Dirección URL completa del repositorio de GitOps |
SRC_FOLDER |
azure-vote |
TARGET_CLUSTER |
arc-cicd-cluster |
TARGET_NAMESPACE |
dev |
VOTE_APP_TITLE |
Aplicación de votación |
AKS_RESOURCE_GROUP |
Grupo de recursos de AKS. Es necesario para las pruebas automatizadas. |
AKS_NAME |
Nombre de AKS. Es necesario para las pruebas automatizadas. |
Grupo de variables del entorno de fase
Clone el grupo de variables az-vote-app-dev.
Cambie el nombre a az-vote-app-stage.
Asegúrese de establecer los siguientes valores para las variables correspondientes:
Variable Value ENVIRONMENT_NAME
Fase TARGET_NAMESPACE
stage
Ahora está listo para realizar la implementación en los entornos dev
y stage
.
Creación de entornos
En el proyecto de Azure DevOps, cree los entornos Dev
y Stage
. Consulte Creación de entornos y selección como destino para más detalles.
Concesión de más permisos al servicio de compilación
La canalización de CD usa el token de seguridad de la compilación en ejecución para autenticarse en el repositorio de GitOps. Se necesitan más permisos para que la canalización cree una nueva rama, inserte cambios y cree solicitudes de cambios. Para habilitar estos permisos, siga estos pasos:
- En Azure DevOps, abra Configuración del proyecto.
- En Repositorios, seleccione Repositorios.
- Seleccione Seguridad.
- Busque
<Project Name> Build Service (<Organization Name>)
yProject Collection Build Service (<Organization Name>)
(use la búsqueda si no los ve) y permita Contribuir, Contribuir a solicitudes de cambios y Crear rama. - En Canalizaciones, seleccione Configuración.
- Desactive la opción Proteger el acceso a repositorios en canalizaciones YAML.
Para obtener más información, consulte Concesión de permisos de control de versiones al servicio de compilación y Administración de permisos de cuenta de servicio de compilación.
Implementación en el entorno de desarrollo por primera vez
Con las canalizaciones de CI y CD creadas, ejecute la canalización de CI para implementar la aplicación por primera vez.
Canalización de CI
Durante la ejecución inicial de la canalización de CI, si ve un error de autorización de recursos al leer el nombre de la conexión de servicio, haga lo siguiente:
- Compruebe que la variable a la que se accede es AZURE_SUBSCRIPTION.
- Autorice el uso.
- vuelva a ejecutar la canalización.
La canalización de CI:
- Garantiza que el cambio de la aplicación supera todas las comprobaciones de calidad automatizadas para la implementación.
- Realiza cualquier validación adicional que no se pudo completar en la canalización de PR. Específicamente para GitOps, la canalización también publica los artefactos para la confirmación que se implementará mediante la canalización de CD.
- Comprueba que la imagen de Docker ha cambiado y que se ha insertado la nueva imagen.
Canalización de CD
Durante la ejecución inicial de la canalización de CD, deberá proporcionar acceso a la canalización al repositorio de GitOps. Seleccione Ver cuando se le indique que la canalización necesita permiso para acceder a un recurso. A continuación, seleccione Permitir para conceder permiso de uso del repositorio de GitOps para las ejecuciones actuales y futuras de la canalización.
La ejecución correcta de la canalización de CI desencadena la canalización de CD para completar el proceso de implementación. Realiza la implementación en cada entorno de forma incremental.
Sugerencia
Si la canalización de CD no se desencadena automáticamente:
- Compruebe que el nombre coincide con el desencadenador de rama en
.pipelines/az-vote-cd-pipeline.yaml
.- Debería ser
arc-cicd-demo-src CI
.
- Debería ser
- Vuelva a ejecutar la canalización de CI.
Una vez que se hayan generado los cambios de plantilla y de manifiesto en el repositorio de GitOps, la canalización de CD crea una confirmación, la inserta y crea una solicitud de cambios para su aprobación.
Busque el elemento PR que ha creado la canalización en el repositorio de GitOps.
Compruebe los cambios en el repositorio de GitOps. Debería ver lo siguiente:
- La plantilla de Helm de alto nivel ha cambiado.
- Los manifiestos de Kubernetes de bajo nivel que muestran los cambios subyacentes en el estado deseado. Flux implementa estos manifiestos.
Si todo parece correcto, apruebe y complete la solicitud de incorporación de cambios.
Después de unos minutos, Flux recoge el cambio e inicia la implementación.
Supervise el estado
git commit
en la pestaña Historial de confirmaciones. Una vez que sesucceeded
, la canalización de CD inicia pruebas automatizadas.Reenvíe el puerto de forma local mediante
kubectl
y asegúrese de que la aplicación funciona correctamente mediante:kubectl port-forward -n dev svc/azure-vote-front 8080:80
Vaya a la aplicación de votaciones de Azure en el explorador en
http://localhost:8080/
.Vote a sus favoritos y prepárese para realizar algunos cambios en la aplicación.
Configuración de las aprobaciones de entorno
Tras la implementación de la aplicación, no solo puede realizar cambios en el código o las plantillas, sino que también puede poner involuntariamente el clúster en un estado incorrecto.
Si el entorno de desarrollo revela una interrupción después de la implementación, la habilitación de aprobaciones de entorno ayuda a evitar que el problema se produzca en entornos posteriores.
- En el proyecto de Azure DevOps, vaya al entorno que se va a proteger.
- Vaya a Aprobaciones y comprobaciones en el recurso.
- Seleccione Crear.
- Proporcione los aprobadores y un mensaje opcional.
- Seleccione de nuevo Crear para completar la adición de la comprobación de aprobación manual.
Para más información, consulte Definición de aprobación y comprobaciones.
La próxima vez que se ejecute la canalización de CD, la canalización se pondrá en pausa después de la creación de la PR de GitOps. Compruebe que el cambio está sincronizado correctamente y pasa la funcionalidad básica. Apruebe la comprobación desde la canalización para permitir que el cambio fluya al siguiente entorno.
Realización de un cambio en la aplicación
Con este conjunto de plantillas y manifiestos de línea base que representan el estado del clúster, realiza un pequeño cambio en la aplicación.
En el repositorio arc-cicd-demo-src, edite el archivo
azure-vote/src/azure-vote-front/config_file.cfg
.Como "gatos frente a perros" no está obteniendo suficientes votos, cámbielo a "tabuladores frente a espacios" para impulsar la participación.
Confirme el cambio en una nueva rama, insértelo y cree una solicitud de incorporación de cambios. Esta secuencia de pasos es el flujo de desarrollador típico que iniciará el ciclo de vida de CI/CD.
Canalización de validación de PR
La canalización de PR es la primera línea de defensa contra un cambio erróneo. Las comprobaciones de la calidad del código de la aplicación habituales incluyen el linting y el análisis estático. Desde la perspectiva de GitOps, también debe asegurarse de la misma calidad para la infraestructura resultante que se va a implementar.
El archivo Dockerfile y los gráficos de Helm de la aplicación pueden usar el linting de una manera similar a la aplicación.
Errores encontrados durante el intervalo de linting desde archivos YAML con formato incorrecto, hasta sugerencias de procedimientos recomendados, como establecer límites de CPU y memoria para la aplicación.
Nota:
Para obtener la mejor cobertura del linting de Helm en una aplicación real, sustituya los valores que son razonablemente similares a los que se usarían en un entorno real.
Los errores encontrados durante la ejecución de la canalización aparecen en la sección de resultados de las pruebas de la ejecución. Desde aquí, puede:
- Realizar un seguimiento de las estadísticas de utilidad sobre tipos de error.
- Buscar la primera confirmación en la que se detectaron.
- Realizar un seguimiento de la pila de los vínculos de estilo a las secciones de código que produjeron el error.
La ejecución de canalización finaliza, confirmando la calidad del código de la aplicación y la plantilla que lo implementa. Ahora puede aprobar y completar la solicitud de incorporación de cambios. La canalización de CI se ejecuta de nuevo, con lo que se volverán a generar las plantillas y los manifiestos antes de desencadenar la canalización de CD.
Sugerencia
En un entorno real, asegúrese de establecer directivas de rama para asegurarse de que la solicitud de cambios supera las comprobaciones de calidad. Para obtener más información, consulte Directivas y configuraciones de rama.
Aprobaciones del proceso de CD
La ejecución correcta de la canalización de CI desencadena la canalización de CD para completar el proceso de implementación. Esta vez, la canalización requiere que apruebe cada entorno de implementación.
- Apruebe la implementación en el entorno
dev
. - Una vez que se hayan generado los cambios de plantilla y de manifiesto en el repositorio de GitOps, la canalización de CD creará una confirmación, la insertará y creará una solicitud de incorporación de cambios para su aprobación.
- Compruebe los cambios en el repositorio de GitOps. Debería ver lo siguiente:
- La plantilla de Helm de alto nivel ha cambiado.
- Los manifiestos de Kubernetes de bajo nivel que muestran los cambios subyacentes en el estado deseado.
- Si todo parece correcto, apruebe y complete la solicitud de incorporación de cambios.
- Espere a que la implementación se complete.
- Como prueba de humo básica, vaya a la página de la aplicación y compruebe que la aplicación de votación ahora muestra la Tabuladores frente a espacios.
- Reenvíe el puerto de forma local mediante
kubectl
y asegúrese de que la aplicación funciona correctamente mediante:kubectl port-forward -n dev svc/azure-vote-front 8080:80
- Vaya a la aplicación de votaciones de Azure en el explorador en
http://localhost:8080/
y compruebe que las opciones de votación han cambiado a la encuesta Tabuladores frente a espacios.
- Reenvíe el puerto de forma local mediante
- Repita los pasos del 1 al 7 para el entorno
stage
.
La implementación ha finalizado.
Para información general detallada de todos los pasos y técnicas implementados en los flujos de trabajo de CI/CD que se usan en este tutorial, consulte el diagrama de flujo de GitOps de Azure DevOps.
Implementación de CI/CD con GitHub
En este tutorial se da por supuesto que está familiarizado con GitHub y GitHub Actions.
Aplicación de bifurcación y repositorios de GitOps
Bifurque un repositorio de aplicaciones y un repositorio de GitOps. Para este tutorial, use los siguientes repositorios de ejemplo:
Repositorio de la aplicación arc-cicd-demo-src
- URL: https://github.com/Azure/arc-cicd-demo-src
- Contiene la aplicación de votaciones de Azure de ejemplo que se va a implementar con GitOps.
Repositorio de GitOps arc-cicd-demo-gitops
- Dirección URL: https://github.com/Azure/arc-cicd-demo-gitops
- Funciona como base para los recursos del clúster que hospedan la aplicación de votaciones de Azure.
Conexión del repositorio de GitOps
Para la implementación continua de la aplicación, conecte el repositorio de la aplicación al clúster mediante GitOps. El repositorio de GitOps arc-cicd-demo-gitops contiene los recursos básicos para poner en funcionamiento la aplicación en el clúster arc-cicd-cluster.
El repositorio inicial de GitOps solo contiene un manifiesto que crea los espacios de nombres dev y stage correspondientes a los entornos de implementación.
La conexión de GitOps que crea realizará automáticamente las siguientes acciones:
- Sincronizar los manifiestos en el directorio de manifiestos.
- Actualizar el estado del clúster.
El flujo de trabajo de CI/CD rellena el directorio de manifiestos con manifiestos adicionales para implementar la aplicación.
Cree una nueva conexión de GitOps al repositorio arc-cicd-demo-gitops recién importado en GitHub.
az k8s-configuration flux create \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --namespace cluster-config \ --resource-group myResourceGroup \ -u https://github.com/<Your organization>/arc-cicd-demo-gitops.git \ --https-user <Azure Repos username> \ --https-key <Azure Repos PAT token> \ --scope cluster \ --cluster-type connectedClusters \ --branch master \ --kustomization name=cluster-config prune=true path=arc-cicd-cluster/manifests
Compruebe el estado de la implementación en Azure Portal.
- Si se realiza correctamente, verá que se han creado en el clúster los espacios de nombres
dev
ystage
.
- Si se realiza correctamente, verá que se han creado en el clúster los espacios de nombres
Instalación del conector de GitOps
Agregue el repositorio del conector de GitOps a los repositorios de Helm:
helm repo add gitops-connector https://azure.github.io/gitops-connector/
Instale el conector en el clúster:
helm upgrade -i gitops-connector gitops-connector/gitops-connector \ --namespace flux-system \ --set gitRepositoryType=GITHUB \ --set ciCdOrchestratorType=GITHUB \ --set gitOpsOperatorType=FLUX \ --set gitHubGitOpsRepoName=arc-cicd-demo-src \ --set gitHubGitOpsManifestsRepoName=arc-cicd-demo-gitops \ --set gitHubOrgUrl=https://api.github.com/repos/<Your organization> \ --set gitOpsAppURL=https://github.com/<Your organization>/arc-cicd-demo-gitops/commit \ --set orchestratorPAT=<GitHub PAT token>
Configure Flux para enviar notificaciones al conector de GitOps:
cat <<EOF | kubectl apply -f - apiVersion: notification.toolkit.fluxcd.io/v1beta1 kind: Alert metadata: name: gitops-connector namespace: flux-system spec: eventSeverity: info eventSources: - kind: GitRepository name: cluster-config - kind: Kustomization name: cluster-config-cluster-config providerRef: name: gitops-connector --- apiVersion: notification.toolkit.fluxcd.io/v1beta1 kind: Provider metadata: name: gitops-connector namespace: flux-system spec: type: generic address: http://gitops-connector:8080/gitopsphase EOF
Para obtener más información sobre la instalación, consulte el repositorio del Conector de GitOps.
Creación de secretos de GitHub
El siguiente paso es crear secretos de entorno y repositorio de GitHub.
Creación de secretos del repositorio de GitHub
Use los siguientes valores para los secretos del repositorio de GitHub:
Secreto | Valor |
---|---|
AZURE_CREDENTIALS |
Credenciales de Azure con el siguiente formato {"clientId":"GUID","clientSecret":"GUID","subscriptionId":"GUID","tenantId":"GUID"} |
AZ_ACR_NAME |
Nombre de Azure ACR, por ejemplo arc-demo-acr |
MANIFESTS_BRANCH |
master |
MANIFESTS_FOLDER |
arc-cicd-cluster |
MANIFESTS_REPO |
https://github.com/your-organization/arc-cicd-demo-gitops |
VOTE_APP_TITLE |
Aplicación de votación |
AKS_RESOURCE_GROUP |
Grupo de recursos de AKS. Es necesario para las pruebas automatizadas. |
AKS_NAME |
Nombre de AKS. Es necesario para las pruebas automatizadas. |
PAT |
Token PAT de GitHub con permiso para PR en el repositorio de GitOps |
Creación de secretos de entorno en GitHub
- Cree un entorno
az-vote-app-dev
con los siguientes secretos:
Secreto | Valor |
---|---|
ENVIRONMENT_NAME |
Des |
TARGET_NAMESPACE |
dev |
- Cree un entorno
az-vote-app-stage
con los siguientes secretos:
Secreto | Valor |
---|---|
ENVIRONMENT_NAME |
Fase |
TARGET_NAMESPACE |
stage |
Ahora está listo para realizar la implementación en los entornos dev
y stage
.
Flujo de trabajo de desarrollo de CI/CD
Para iniciar el flujo de trabajo de desarrollo de CI/CD, cambie el código fuente. En el repositorio de la aplicación, actualice los valores del archivo .azure-vote/src/azure-vote-front/config_file.cfg
e implemente los cambios en el repositorio.
Flujo de trabajo de desarrollo de CI/CD:
- Garantiza que el cambio de la aplicación supera todas las comprobaciones de calidad automatizadas para la implementación.
- Realiza cualquier validación adicional que no se pudo completar en la canalización de PR.
- Comprueba que la imagen de Docker ha cambiado y que se ha insertado la nueva imagen.
- Publica los artefactos (etiquetas de imagen de Docker, plantillas de manifiesto, utilidades) que se usan en las siguientes fases de CD.
- Implementa la aplicación en el entorno de desarrollo.
- Genera manifiestos en el repositorio de GitOps.
- Crea una solicitud de incorporación de cambios en el repositorio de GitOps para su aprobación.
Una vez completados estos pasos:
Busque el elemento PR que ha creado la canalización en el repositorio de GitOps.
Compruebe los cambios en el repositorio de GitOps. Debería ver lo siguiente:
- La plantilla de Helm de alto nivel ha cambiado.
- Los manifiestos de Kubernetes de bajo nivel que muestran los cambios subyacentes en el estado deseado. Flux implementa estos manifiestos.
Si todo parece correcto, apruebe y complete la solicitud de incorporación de cambios.
Después de unos minutos, Flux recoge el cambio e inicia la implementación.
Supervise el estado
git commit
en la pestaña Historial de confirmaciones. Una vez que sesucceeded
, se inicia el flujo de trabajo deCD Stage
.Reenvíe el puerto de forma local mediante
kubectl
y asegúrese de que la aplicación funciona correctamente mediante:kubectl port-forward -n dev svc/azure-vote-front 8080:80
Vaya a la aplicación de votaciones de Azure en el explorador en
http://localhost:8080/
.Vote a sus favoritos y prepárese para realizar algunos cambios en la aplicación.
Flujo de trabajo de la fase de CD
El flujo de trabajo de la fase de CD se inicia automáticamente una vez que Flux implementa correctamente la aplicación en el entorno de desarrollo y notifica la acciones de GitHub a través del conector de GitOps.
Flujo de trabajo de la fase de CD:
- Ejecuta pruebas de humo de la aplicación en el entorno de desarrollo.
- Implementa la aplicación en el entorno de fase.
- Genera manifiestos en el repositorio de GitOps.
- Crea un PR en el repositorio de GitOps para su aprobación.
Una vez que se combina la solicitud de incorporación de cambios de manifiesto en el entorno de fase y Flux aplica correctamente todos los cambios, se actualiza el estado de confirmación de Git en el repositorio de GitOps. La implementación ha finalizado.
Para información general detallada de todos los pasos y técnicas implementados en los flujos de trabajo de CI/CD que se usan en este tutorial, consulte el diagrama de flujo de GitOps de GitHub.
Limpieza de recursos
Si no va a seguir usando esta aplicación, elimine los recursos mediante los siguientes pasos:
Elimine la conexión de configuración de GitOps de Azure Arc:
az k8s-configuration flux delete \ --name cluster-config \ --cluster-name arc-cicd-cluster \ --resource-group myResourceGroup \ -t connectedClusters --yes
Eliminación del conector de GitOps:
helm uninstall gitops-connector -n flux-system kubectl delete alerts.notification.toolkit.fluxcd.io gitops-connector -n flux-system kubectl delete providers.notification.toolkit.fluxcd.io gitops-connector -n flux-system
Pasos siguientes
En este tutorial, configurará un flujo de trabajo completo de CI/CD que implementa DevOps desde el desarrollo de la aplicación hasta la implementación. Los cambios en la aplicación desencadenan automáticamente la validación y la implementación, que se vigilan mediante aprobaciones manuales.
Avance a nuestro artículo conceptual para más información sobre GitOps y configuraciones con Kubernetes habilitado para Azure Arc.