Pruebas de integración
con Docker en Azure
DevOps
Rodolfo Ortiz
Agenda
● Revisar conceptos
○ Pruebas de integración
○ Docker
○ Azure DevOps
● Consideraciones
● Detalles de implementación
Meta
Correr las pruebas sobre una base de datos que se crea al iniciar las pruebas, y
que al terminarlas la base de datos se borra.
¿Qué son las pruebas de integración?
Es la fase de pruebas de software en la que módulos individuales de software son
combinados y probados como un grupo.
Controlador => Command/Query (CQRS) => Repositorio => Base de datos
¿Qué es Docker?
Docker es una herramienta diseñada para hacer más fácil la creación, despliegue
(deploy) y ejecución de aplicaciones usando contenedores.
Es como una máquina virtual (VM) pero más ligera. Utiliza virtualización.
Diferencias entre Máquina Virtual y Contenedores
Máquina Virtual Contenedor
Pesadas (en cuanto a recursos) Ligeras
Desempeño limitado Desempeño nativo
Cada MV corre en su propio sistema
operativo
Todos los contenedores comparten el
sistema operativo anfitrión (host OS)
Virtualización a nivel de hardware Virtualización a nivel de software
Pueden requerir minutos para iniciar Inician en milisegundos
Asignan la memoria requerida Requieren menos espacio de memoria
Totalmente aislada y más segura Aislamiento a nivel de proceso,
posiblemente menos seguro
Ejemplo
docker run -it ubuntu
cat /etc/issue
docker run --name my_sqlserver -d -p 15435:1433 -e
"SA_PASSWORD=Password_01" -e "ACCEPT_EULA=Y"
mcr.microsoft.com/mssql/server:2019-latest
Dockerfile
Docker puede crear imágenes automáticamente leyendo las instrucciones de un
archivo llamado Dockerfile. Un archivo Dockerfile es un archivo de texto que
contiene todos los comandos que un usuario podría ejecutar en la línea de
comandos para crear una imagen.
Ejemplo
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim AS base
WORKDIR /app
EXPOSE 80
WORKDIR /src
RUN dotnet restore "Contoso.Web/Contoso.Web.csproj"
COPY /src/Contoso.Web Contoso.Web/
RUN dotnet build "Contoso.Web.csproj" -c Release -o /app
RUN dotnet publish "Contoso.Web.csproj" -c Release -o /app/publish
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Contoso.Web.dll"]
¿Qué es Azure DevOps?
Un ambiente de integración continua y despliegue continuo (CI/CD)
Consideraciones de esta implementación
DevOps usa Linux 100% (Ubuntu)
SQL Server es necesario (versión Linux)
Se utiliza Roundhouse (herramienta de migración de base de datos)
Configuración del ambiente en Azure DevOps
¿Cuáles son los pasos necesarios para correr pruebas de integración usando
Docker en Azure DevOps?
1) Crear una imagen en base a un Dockerfile
2) Correr un contenedor con la imagen creada
3) Configurar DevOps para que corra las pruebas de integración
Azure DevOps
Dockerfile image
Dockerfile
Correr SQL Server
Restaurar base de
datos
Correr migraciones
de base de datos
Docker container
SQL Server
Tarea de Azure corre
las pruebas
Compila
docker
build
Corre
docker
run
dotnet
test
Detalles de implementación
docker build -t contoso_sqlserver --file Dockerfile .
docker run --name contoso_sqlserver -d -p 1433:1433 -e
"SA_PASSWORD=Password_01" -e "ACCEPT_EULA=Y" contoso_sqlserver
dotnet test
Revisión del Azure DevOps Pipeline
Atrás de escenas > compilar la imagen
Instalar .NET Core
Instalar SQL Server
Copiar el script para restaurar la base de datos
Copiar el script para instalar roundhouse
Copiar el script para correr las migraciones de base de datos
Atrás de escenas > correr el contenedor
Correr el contenedor exponiendo el puerto 1433
Esperar uno o dos minutos antes de continuar con la restauración de BD
Se ejecutan los siguientes scripts:
● para restaurar la base de datos
● para instalar Roundhouse
● para correr migraciones de base de datos
Atrás de escenas > pruebas de integración
Existen 2 opciones:
● dotnet test
● dotnet vstest
Preguntas
Links
https://dev.azure.com/ortiz-mpr/Contoso/
https://github.com/enriquecatala/mssql-server-samplesdb

Pruebas de integración con Docker en Azure DevOps

  • 1.
    Pruebas de integración conDocker en Azure DevOps Rodolfo Ortiz
  • 3.
    Agenda ● Revisar conceptos ○Pruebas de integración ○ Docker ○ Azure DevOps ● Consideraciones ● Detalles de implementación
  • 4.
    Meta Correr las pruebassobre una base de datos que se crea al iniciar las pruebas, y que al terminarlas la base de datos se borra.
  • 5.
    ¿Qué son laspruebas de integración? Es la fase de pruebas de software en la que módulos individuales de software son combinados y probados como un grupo. Controlador => Command/Query (CQRS) => Repositorio => Base de datos
  • 6.
    ¿Qué es Docker? Dockeres una herramienta diseñada para hacer más fácil la creación, despliegue (deploy) y ejecución de aplicaciones usando contenedores. Es como una máquina virtual (VM) pero más ligera. Utiliza virtualización.
  • 7.
    Diferencias entre MáquinaVirtual y Contenedores Máquina Virtual Contenedor Pesadas (en cuanto a recursos) Ligeras Desempeño limitado Desempeño nativo Cada MV corre en su propio sistema operativo Todos los contenedores comparten el sistema operativo anfitrión (host OS) Virtualización a nivel de hardware Virtualización a nivel de software Pueden requerir minutos para iniciar Inician en milisegundos Asignan la memoria requerida Requieren menos espacio de memoria Totalmente aislada y más segura Aislamiento a nivel de proceso, posiblemente menos seguro
  • 8.
    Ejemplo docker run -itubuntu cat /etc/issue docker run --name my_sqlserver -d -p 15435:1433 -e "SA_PASSWORD=Password_01" -e "ACCEPT_EULA=Y" mcr.microsoft.com/mssql/server:2019-latest
  • 9.
    Dockerfile Docker puede crearimágenes automáticamente leyendo las instrucciones de un archivo llamado Dockerfile. Un archivo Dockerfile es un archivo de texto que contiene todos los comandos que un usuario podría ejecutar en la línea de comandos para crear una imagen.
  • 10.
    Ejemplo FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-stretch-slim ASbase WORKDIR /app EXPOSE 80 WORKDIR /src RUN dotnet restore "Contoso.Web/Contoso.Web.csproj" COPY /src/Contoso.Web Contoso.Web/ RUN dotnet build "Contoso.Web.csproj" -c Release -o /app RUN dotnet publish "Contoso.Web.csproj" -c Release -o /app/publish WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "Contoso.Web.dll"]
  • 11.
    ¿Qué es AzureDevOps? Un ambiente de integración continua y despliegue continuo (CI/CD)
  • 12.
    Consideraciones de estaimplementación DevOps usa Linux 100% (Ubuntu) SQL Server es necesario (versión Linux) Se utiliza Roundhouse (herramienta de migración de base de datos)
  • 13.
    Configuración del ambienteen Azure DevOps ¿Cuáles son los pasos necesarios para correr pruebas de integración usando Docker en Azure DevOps? 1) Crear una imagen en base a un Dockerfile 2) Correr un contenedor con la imagen creada 3) Configurar DevOps para que corra las pruebas de integración
  • 14.
    Azure DevOps Dockerfile image Dockerfile CorrerSQL Server Restaurar base de datos Correr migraciones de base de datos Docker container SQL Server Tarea de Azure corre las pruebas Compila docker build Corre docker run dotnet test
  • 15.
    Detalles de implementación dockerbuild -t contoso_sqlserver --file Dockerfile . docker run --name contoso_sqlserver -d -p 1433:1433 -e "SA_PASSWORD=Password_01" -e "ACCEPT_EULA=Y" contoso_sqlserver dotnet test
  • 16.
    Revisión del AzureDevOps Pipeline
  • 17.
    Atrás de escenas> compilar la imagen Instalar .NET Core Instalar SQL Server Copiar el script para restaurar la base de datos Copiar el script para instalar roundhouse Copiar el script para correr las migraciones de base de datos
  • 18.
    Atrás de escenas> correr el contenedor Correr el contenedor exponiendo el puerto 1433 Esperar uno o dos minutos antes de continuar con la restauración de BD Se ejecutan los siguientes scripts: ● para restaurar la base de datos ● para instalar Roundhouse ● para correr migraciones de base de datos
  • 19.
    Atrás de escenas> pruebas de integración Existen 2 opciones: ● dotnet test ● dotnet vstest
  • 20.
  • 21.