Llama a la API de Movimiento de DB de LCS en tu pipeline de Azure DevOps

Aquí puedes leer mi guía completa sobre Dynamics 365 for Finance and Operations y Azure DevOps.

Hace no mucho hablé en otro post sobre la API de movimiento de base de datos de LCS, y en este quiero mostrar como llamar a la API usando PowerShell desde nuestras pipelines de Azure DevOps.

¿Para qué?

Básicamente por automatización. Ahora mismo la API sólo permite el refresco de un entorno de Microsoft Dynamics 365 for Finance and Operations a otro, así que la idea es tener datos frescos de producción en nuestros entornos de UAT a diario. No sé qué nuevas operaciones soportará la API en el futuro pero otra idea sería añadir al pipeline la exportación de la DB (creando un bacpac) de un entorno de UAT para tener datos listos para restarurar en una máquina de desarrollo.

No olvidemos que la API tiene un límite de 3 operaciones de refresco por entorno por 24 horas. No hagáis esto en una build de integración contínua (tampoco tiene mucho sentido). Seguramente la mejor idea es que se ejecute una vez al día con los tests.

Todas estas operaciones/llamadas se pueden hacer también con las d365fo.tools de Mötz Jensen que dan soporte a la API de LCS. Pero si estás usando un agente de Azure en lugar de uno en una VM (como la máquina de build) no se pueden instalar. O por lo menos no he encontrado cómo hacerlo 🙂

EDIT: bueno, gracias al comentario de Mötz con instrucciones para añadir las d365fo.tools a un pipeline de azure he editado el post con cómo hacerlo, sólo id al final para ver cómo tenemos que hacerlo para usar las d365fo.tools en vuestras pipelines!

Llamando a la API

Voy a usar PowerShell para las llamadas a la API desde DevOps. PowerShell tiene un comando llamado Invoke-RestMethod que hace peticiones HTTP/HTTPS. Es muy fácil usarlo y sólo necesitamos hacer lo mismo que en mi anterior post sobre la API.

Obtener el token

Para obtener el token usaremos este script. Sólo hay que cambiar los valores de las variables por los de tu proyecto, App de AAD, usuario (recuerda que tiene que estar dado de alta en la preview) y contraseña para ejecutarlo. Si todo está bien recibiremos un JSON con la respuesta en $tokenResponse y ahí podremos acceder al valor del token usando notación por puntos.

Solicitar el refresco de DB

Está es la llamada para lanzar el refresco. Necesitamos el token que hemos obtenido en el paso anterior para usarlo en la cabecera y los Ids de los entornos de origen y destino.

Si va bien recibiremos una respuesta 200 OK.

Añadirlo a tu pipeline

Añadir esto a un pipeline de Azure DevOps no tiene misterior. Selecciona y edita tu pipeline, yo lo hago en una build nocturna (aunque pone coninuous no lo es…) que se ejecuta después de la actualización de los entornos, y añadre una task de PowerShell:

Llama a la API de Movimiento de DB de LCS en tu pipeline de Azure DevOps 1

Selecciona la tarea y cambias el tipo a «Inline»:

Llama a la API de Movimiento de DB de LCS en tu pipeline de Azure DevOps 2

Y finalmente pega el script anterior en el campo Script y ¡listo! Tendrás un refresco de datos después de los tests.

También puedes ejecutar esto en tu pipeline de release PERO si lo haces después del paso de despliegue recuerda marcar la opción «Wait for Completion» o ¡la operación fallará al estar el entorno en servicio! E incluso podría fallar si el tiempo de mantenimiento del entorno sobrepasa el del timeout del pipeline. Bueno, mejor… ¡no hagas esto en el pipeline de release!

Y eso es todo, vamos a ver qué nuevas funcionalidades se añaden a la API y qué podemos hacer con ellas.

Actualización: Usar d365fo.tools en tu Pipeline de Azure

Gracias al comentario de Mötz indicando como usar las d365fo.tools en un pipeline he creado una que instalará las herramientas y ejecutará los comandos. Es incluso más fácil que hacerlo con el Invoke-RestMethod.

Pero antes…

Aseguraros que en vuestra App de Azure Active Directory habéis seleccionado «Treat application as a public client» en el apartado de autenticación:

Llama a la API de Movimiento de DB de LCS en tu pipeline de Azure DevOps 3

La tarea

Primero necesitamos instalar las d365fo.tools y después podemos usar los comandos para llamar a la API de LCS:

Como podéis ver es un poco más fácil hacer el refresh usando las d365fo.tools. Obtenemos el token y lo que devuelve la operación lo pasamos al comando Set-D365LcsApiConfig que guardará el token (y otras cosas). Esto ayuda a no tener que andar poniendo varias veces el AppId, usuario, etc. Y ya véis lo fácil que es invocar el refresco de DB, sólo necesitamos el environment Id del entorno de origen y destino. Y listo!

2 comentarios sobre “Llama a la API de Movimiento de DB de LCS en tu pipeline de Azure DevOps

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.