T2.2: Integrates InterSystems IRIS with CI/CD Pipelines

Knowledge Review - InterSystems IRIS Development Professional

1. Comprende opciones de despliegue para aplicaciones InterSystems IRIS

Puntos Clave

  • Despliegue basado en contenedor: Imágenes Docker con aprovisionamiento automatizado y merge de configuración
  • Despliegue de código compilado: Desplegar código pre-compilado usando %Studio.Project.DeployToFile() e InstallFromFile()
  • Integración de control de código fuente: Flujos de trabajo basados en Git con hooks del lado del cliente o del servidor
  • Despliegue REST API: Source Code File REST API para gestión de código programática
  • Orquestación Kubernetes: InterSystems Kubernetes Operator (IKO) para despliegues en cluster

Notas Detalladas

Resumen

InterSystems IRIS soporta múltiples estrategias de despliegue para acomodar pipelines CI/CD modernos.

Despliegue Basado en Contenedor

  • Enfoque: Aprovechar imágenes Docker con la característica Configuration Merge
  • Variación: Aplicar archivos de merge declarativos para actualizar el CPF durante despliegue
  • Beneficio: Imágenes idénticas configuradas diferentemente para entornos de desarrollo, pruebas, y producción

Despliegue de Código Compilado

  • Método: Empaquetar y desplegar aplicaciones pre-compiladas usando métodos de clase %Studio.Project
  • Métodos Clave: DeployToFile() e InstallFromFile()
  • Requisito: Versiones IRIS coincidentes y configuraciones de identificador delimitado SQL entre origen y destino
  • Beneficio: Elimina recompilación en sistemas destino

Source Code File REST API

  • Propósito: Acceso programático para herramientas CI/CD
  • Capacidades: Crear, actualizar, compilar, y consultar código programáticamente

Despliegue Kubernetes

  • InterSystems Kubernetes Operator (IKO): Extiende la API Kubernetes con el recurso personalizado IrisCluster
  • Capacidades: Despliegue automatizado de clusters sharded, clusters de caché distribuida, o instancias standalone con mirroring

Elegir una Estrategia

Las organizaciones típicamente combinan múltiples enfoques:

  • Contenedores: Para infraestructura
  • REST APIs: Para automatización
  • Control de Código Fuente: Para gestión de versión

La elección depende de complejidad de despliegue, requisitos de consistencia de entorno, y madurez DevOps organizacional.

2. Gestiona archivos CPF para despliegue continuo

Puntos Clave

  • Estructura CPF: iris.cpf contiene la mayoría de configuraciones, leído en cada inicio
  • Merge de configuración: Aplicar archivos de merge declarativos para actualizar CPF durante despliegue
  • Variación de entorno: Misma imagen, diferentes configuraciones vía archivos de merge
  • Formato de archivo de merge: Formato JSON o XML especificando cambios de configuración
  • Aplicación automatizada: Aplicado durante inicio de contenedor o aprovisionamiento de instancia

Notas Detalladas

Resumen

El Configuration Parameter File (iris.cpf) es el artefacto de configuración central para InterSystems IRIS, conteniendo mapeos de base de datos, definiciones de namespace, configuraciones de seguridad, parámetros de sistema, y configuraciones de aplicación.

Característica Configuration Merge

  • Propósito: Gestión de configuración declarativa aplicando archivos de merge durante despliegue o inicio
  • Contenido: Archivos de merge especifican solo las diferencias de configuración necesarias para un entorno específico
  • Control de Versión: Archivos de merge se vuelven artefactos versionables en su pipeline CI/CD

Métodos de Aplicación

  • Despliegues de Contenedor: Aplicar vía flag --merge al programa iris-main o a través de variables de entorno
  • Instalaciones Tradicionales: Aplicar usando la API de merge CPF o durante instalación vía clases manifest

Patrón de Infraestructura Inmutable

  • Misma imagen de contenedor despliega a múltiples entornos
  • Configuraciones específicas de entorno aplicadas en runtime

Mejores Prácticas

  • Almacenar archivos de merge en control de código fuente junto con código de aplicación
  • Validar archivos de merge en entornos inferiores antes de producción
  • Mantener archivos de merge separados para cada entorno (dev.cpf.merge, test.cpf.merge, prod.cpf.merge)
  • Documentar todos los cambios de configuración a través de archivos de merge con control de versión en lugar de ediciones manuales de portal

Beneficios

  • Consistencia de configuración a través de entornos
  • Capacidades de rollback
  • Trazas de auditoría para requisitos de cumplimiento

3. Implementa pruebas unitarias usando framework %UnitTest

Puntos Clave

  • Creación de caso de prueba: Extender clase %UnitTest.TestCase y agregar métodos Test*
  • Macros de aserción: $$$AssertEquals, $$$AssertNotEquals, $$$AssertStatusOK, $$$AssertTrue
  • Setup y teardown: OnBeforeAllTests(), OnBeforeOneTest(), OnAfterOneTest(), OnAfterAllTests()
  • Ejecución de prueba: ##class(%UnitTest.Manager).RunTest() con calificadores
  • Gestión de resultados: Acceso programático vía tabla %UnitTest.Result.TestAssert

Notas Detalladas

Resumen

El framework %UnitTest proporciona capacidades de testing estilo xUnit esenciales para pipelines CI/CD.

Creación de Casos de Prueba

  • Extensión de Clase: Extender %UnitTest.TestCase
  • Nomenclatura de Método: Métodos cuyos nombres comienzan con "Test" son ejecutados
  • Orden de Ejecución: Métodos de prueba ejecutan en orden alfabético

Macros de Aserción

  • $$$AssertEquals(actual, expected, description): Verifica igualdad
  • $$$AssertStatusOK(status, description): Valida códigos de estado
  • $$$AssertTrue(expression, description): Verifica condiciones booleanas
  • $$$AssertFilesSame(file1, file2, description): Compara contenido de archivo

Métodos Setup y Teardown

  • OnBeforeAllTests(): Ejecuta una vez antes de todas las pruebas
  • OnBeforeOneTest(): Ejecuta antes de cada método de prueba
  • OnAfterOneTest(): Ejecuta después de cada prueba
  • OnAfterAllTests(): Ejecuta una vez después de que todas las pruebas completen

Ejecución de Prueba

  • Sintaxis: ##class(%UnitTest.Manager).RunTest("testspec", "qualifiers")
  • Calificadores Clave:
  • /nodelete: Mantiene clases de prueba cargadas
  • /debug: Habilita debugging
  • /autoload: Carga pruebas desde ^UnitTestRoot

Acceso a Resultados

  • Programático: Tabla %UnitTest.Result.TestAssert
  • Visual: Portal UnitTest del Management Portal

Integración CI/CD

  • Establecer ^UnitTestRoot a su directorio de prueba
  • Ejecutar RunTest() con calificadores apropiados
  • Capturar código de estado de retorno
  • Analizar resultados desde tabla TestAssert para fallar builds cuando pruebas fallan

Cobertura de Prueba

Incluir casos positivos, casos negativos, condiciones límite, y escenarios de manejo de error. Ejecutar pruebas después de compilación, antes de promoción de despliegue, y en ejecuciones de prueba de regresión programadas.

4. Diseña y ejecuta estrategias de prueba de integración

Puntos Clave

  • Pruebas multi-componente: Probar interacciones entre clases, bases de datos, y sistemas externos
  • Gestión de datos de prueba: Usar OnBeforeAllTests() para poblar bases de datos de prueba, OnAfterAllTests() para limpiar
  • Mocking de sistema externo: Aislar dependencias usando dobles de prueba y servicios mock
  • Validación end-to-end: Probar flujos de trabajo completos incluyendo REST APIs, procesos de negocio, y transformaciones de datos
  • Consistencia de entorno de prueba: Usar contenedores y merge CPF para asegurar entornos de prueba reproducibles

Notas Detalladas

Resumen

Pruebas de integración validan que múltiples componentes trabajan juntos correctamente, lo cual es crítico antes de promover cambios a producción.

Diferencia de Pruebas Unitarias

  • Pruebas Unitarias: Aislan métodos individuales
  • Pruebas de Integración: Validan interacciones de componente, operaciones de base de datos, llamadas REST API, enrutamiento de mensaje, e integraciones de sistema externo

Puntos de Integración a Probar

  • Interacciones de clase
  • Ciclo de vida de objeto persistente
  • Resultados de consulta SQL
  • Endpoints de servicio REST
  • Flujos de trabajo de proceso de negocio
  • Integraciones de API externa

Gestión de Estado de Prueba

  • OnBeforeAllTests(): Crea bases de datos, puebla datos de prueba, establece conexiones, configura entorno de prueba
  • OnAfterAllTests(): Remueve datos de prueba, cierra conexiones, restaura estado

Mocking de Sistema Externo

  • Servicios REST mock que retornan respuestas predecibles
  • Llamadas de base de datos stub con datos de prueba
  • Usar colas de mensaje de prueba en lugar de sistemas de producción

Prueba de Integración Basada en Contenedor

  • Cada ejecución de prueba levanta un contenedor IRIS fresco con datos de prueba
  • Ejecuta pruebas de integración, captura resultados
  • Destruye el contenedor después de que pruebas completen
  • Asegura estado limpio y reproducibilidad

Integración CI/CD

  • Ejecutar después de que pruebas unitarias pasen, antes de despliegue a staging
  • Usar entornos de prueba dedicados que reflejen topología de producción con datos de prueba

Patrones Comunes de Prueba de Integración

  • Probar contratos REST API con pares de solicitud/respuesta conocidos
  • Validar flujos de mensaje de proceso de negocio con mensajes de entrada de prueba
  • Verificar restricciones de integridad de base de datos con datos de caso límite
  • Confirmar comportamiento de adaptador de interoperabilidad con sistemas externos mock

Medición de Efectividad

Rastrear cobertura de código, cobertura de escenario, y tasas de detección de defecto.

5. Prueba requisitos no funcionales (rendimiento, seguridad, etc.)

Puntos Clave

  • Pruebas de rendimiento: Usar $$$LogMessage para capturar timing, planes de ejecución de consulta, y utilización de recursos
  • Pruebas de carga: Simular usuarios concurrentes, medir tiempos de respuesta y throughput
  • Pruebas de seguridad: Validar autenticación, autorización, encriptación, y logging de auditoría
  • Pruebas de escalabilidad: Probar comportamiento bajo volúmenes de datos y cargas de usuario crecientes
  • Pruebas de confiabilidad: Validar manejo de error, failover, y procedimientos de recuperación

Notas Detalladas

Resumen

Pruebas de requisitos no funcionales validan que aplicaciones cumplan estándares de rendimiento, seguridad, escalabilidad, y confiabilidad más allá de corrección funcional básica.

Pruebas de Rendimiento

  • Propósito: Medir tiempos de respuesta, throughput, y consumo de recursos
  • Implementación: Usar $HOROLOG o ##class(%Library.PerfMon) para capturar métricas de timing
  • Logging: Registrar resultados con $$$LogMessage
  • Aserciones: Afirmar umbrales de rendimiento con lógica personalizada
  • Pruebas Comunes:
  • Tiempo de ejecución de consulta SQL contra líneas base
  • Duración de ejecución de método bajo varios volúmenes de datos
  • Consumo de memoria durante operaciones batch

Pruebas de Carga

  • Generar múltiples jobs que ejecutan escenarios de prueba simultáneamente
  • Medir comportamiento de sistema bajo cargas realistas y pico
  • Simular usuarios concurrentes

Pruebas de Seguridad

  • Autenticación: Probar login con credenciales válidas e inválidas
  • Autorización: Intentar acceso no autorizado a recursos
  • Encriptación: Verificar datos en reposo y en tránsito
  • Logging de Auditoría: Confirmar que eventos de seguridad son capturados
  • Aserciones: Usar $$$AssertStatusNotOK para acceso denegado, $$$AssertTrue para autenticación exitosa

Pruebas de Escalabilidad

  • Evaluar degradación de rendimiento cuando volúmenes de datos o conteos de usuario incrementan
  • Identificar cuellos de botella y límites de capacidad
  • Probar con conjuntos de datos y cargas de usuario progresivamente más grandes

Pruebas de Confiabilidad

  • Validar manejo de error y rollback de transacción
  • Probar escenarios de failover y procedimientos de recuperación de desastre
  • Simular fallos (interrupciones de red, locks de base de datos, agotamiento de recursos)
  • Verificar degradación elegante y recuperación

Integración CI/CD

  • Ejecutar en entornos de prueba de rendimiento dedicados en horarios (noche, semanal) en lugar de en cada commit
  • Tendencia de resultados a través del tiempo para identificar regresiones de rendimiento antes de producción

6. Comprende implicaciones de promoción de cambios a través de entornos

Puntos Clave

  • Paridad de entorno: Mantener configuraciones consistentes a través de dev, test, staging, y producción
  • Compatibilidad de versión: Asegurar que versiones IRIS coincidan al desplegar código compilado
  • Gestión de configuración: Usar archivos de merge CPF para configuraciones específicas de entorno
  • Rastreo de dependencia: Rastrear y desplegar clases, globals, y recursos dependientes juntos
  • Procedimientos de rollback: Mantener habilidad de revertir cambios si ocurren problemas en producción

Notas Detalladas

Resumen

Promoción de cambios a través de entornos requiere planificación cuidadosa para asegurar consistencia, confiabilidad, y reversibilidad.

Paridad de Entorno

  • Mantener configuraciones similares, volúmenes de datos, y topologías a través de dev, test, staging, y producción
  • Usar contenedores e infraestructura como código para configuraciones base consistentes
  • Gestionar diferencias específicas de entorno a través de archivos de merge CPF

Compatibilidad de Versión

  • Requisito de Código Compilado: DeployToFile() e InstallFromFile() requieren versiones IRIS idénticas y configuraciones de identificador delimitado SQL
  • Discrepancias: Causan errores de runtime o bugs sutiles
  • Mejor Práctica: Versionar artefactos de despliegue y rastrear requisitos de versión IRIS en manifiestos de despliegue

Gestión de Configuración

  • Archivos de merge CPF separan código de aplicación de configuración específica de entorno
  • Almacenar archivos de merge en control de código fuente, versionar junto con código
  • Aplicar automáticamente durante despliegue
  • Previene deriva de configuración y habilita recreación de entorno

Rastreo de Dependencia

  • Inclusión Automática: %Studio.Project.DeployToFile() incluye clases padre y clases hijo referenciadas por relación
  • No Incluido: Subclases, proyecciones (archivos Java), o dependencias acopladas libremente
  • Mejor Práctica: Agregar explícitamente todos los componentes requeridos a proyectos de despliegue y probar en entornos inferiores

Procedimientos de Rollback

  • Mantener versiones previas de paquetes de código compilado, configuraciones CPF, y backups de base de datos
  • Probar procedimientos de rollback regularmente en entornos no producción
  • Documentar pasos de rollback en runbooks
  • Comportamiento de Código: Procesos en ejecución continúan usando código viejo hasta reiniciar; objetos instanciados usan la versión de clase del tiempo de instanciación

Flujo de Trabajo de Promoción Típico

1. Desarrollador hace commit a rama de característica 2. CI construye y ejecuta pruebas unitarias 3. Merge a main dispara pruebas de integración 4. Promoción a staging requiere aprobación manual 5. Despliegue automatizado a staging con pruebas smoke 6. Despliegue a producción durante ventanas de mantenimiento con plan de rollback listo

Resumen de Preparación para el Examen

Conceptos Críticos a Dominar:

  1. Opciones de Despliegue: Conocer despliegue de contenedor, despliegue de código compilado, despliegue REST API, y orquestación Kubernetes
  2. Gestión CPF: Comprender archivos de merge de configuración, configuraciones específicas de entorno, e integración de control de versión
  3. Framework %UnitTest: Dominar extensión TestCase, macros de aserción, métodos setup/teardown, y ejecución de prueba
  4. Prueba de Integración: Diseñar pruebas multi-componente, gestionar datos de prueba, mockear sistemas externos, validar flujos de trabajo
  5. Prueba No Funcional: Medir rendimiento, validar seguridad, probar escalabilidad y confiabilidad
  6. Promoción de Cambios: Mantener paridad de entorno, gestionar dependencias, asegurar compatibilidad de versión, planear rollbacks

Escenarios Comunes de Examen:

  • Seleccionar estrategia de despliegue apropiada para un requisito de pipeline CI/CD dado
  • Escribir pruebas unitarias con %UnitTest.TestCase y macros de aserción
  • Aplicar archivos de merge CPF para configuraciones específicas de entorno
  • Diseñar estrategias de prueba de integración para sistemas multi-componente
  • Comprender requisitos de despliegue de código compilado (coincidencia de versión, configuraciones SQL)
  • Planear promoción de cambios con rastreo de dependencia y procedimientos de rollback

Recomendaciones de Práctica Práctica:

  • Crear una clase %UnitTest.TestCase con múltiples métodos de prueba usando diferentes macros de aserción
  • Practicar despliegue de código compilado usando DeployToFile() e InstallFromFile()
  • Construir archivos de merge CPF para diferentes entornos y aplicarlos durante despliegue
  • Escribir pruebas de integración que abarquen múltiples clases y validen operaciones de base de datos
  • Implementar pruebas de rendimiento que midan y afirmen umbrales de timing
  • Configurar un pipeline CI/CD simple que ejecuta pruebas unitarias, construye despliegues, y promueve a través de entornos
  • Practicar usando la Source Code File REST API para gestión de código programática
  • Desplegar instancias IRIS en contenedor con archivos de merge de configuración

Report an Issue