Implementación de análisis estático y pruebas unitarias en entornos en contenedores, parte 2
Por Miroslaw Zielinski
20 de mayo de 2020
5 min leer
Es posible que haya leído en una publicación anterior sobre cómo aplicar SAST y pruebas unitarias en un entorno en contenedores. Aquí hay una continuación sobre cómo puede implementar adecuadamente el análisis estático y las pruebas unitarias utilizando Parasoft C/C++test Standard en un contenedor Docker.
Saltar a la sección
Cómo crear una imagen de contenedor
Parte 1 de esta publicación discutió los beneficios de usar contenedores para implementar cadenas de herramientas de desarrollo integradas. Mostró cómo configurar Parasoft C / C ++ test Professional para trabajar con la cadena de herramientas de compilación y el entorno de ejecución de pruebas implementado en un contenedor.
Ahora, veamos cómo crear una imagen de contenedor con Parasoft C / C ++ test Standard. Demostraré un ejemplo simple con una ejecución de análisis estático en el contenedor.
Implementar el estándar de prueba Parasoft C / C ++ en un contenedor Docker
Como herramienta basada en la línea de comandos, el estándar de prueba Parasoft C / C ++ es adecuado para implementaciones en contenedores. Se puede empaquetar con el compilador y el sistema de compilación en una imagen de contenedor y usarse para CI / CD e implementarse en los escritorios de los desarrolladores para los escaneos de línea de comandos locales. La siguiente imagen muestra la descripción general de alto nivel de esta configuración:
El diagrama muestra a Jenkins usando la prueba C / C ++ en contenedores para ejecutar análisis estático. En esta configuración específica, la prueba de Parasoft C / C ++, la cadena de herramientas de compilación y las herramientas de compilación se implementan en el contenedor que se muestra en la esquina superior derecha del diagrama.
El contenedor debajo de él, en la parte inferior derecha, proporciona el entorno de ejecución, que puede ser necesario para ejecutar pruebas en tiempo de ejecución, como pruebas unitarias o pruebas de nivel de sistema automatizadas.
Si pretendemos implementar solo análisis estático, lo más probable es que nuestra configuración incluya solo un tipo de contenedor con la cadena de herramientas de compilación y la prueba Parasoft C / C ++.
Crear una imagen de contenedor con la prueba de Parasoft C / C ++
Si aún no lo ha hecho, por favor instale la última versión de la prueba Parasoft C / C ++ 2020.1 para Linux.
Para simplificar el proceso de creación de una imagen de contenedor con la prueba C / C ++, la última versión se envía con un ejemplo de Dockerfile. Puede encontrar este Dockerfile en la siguiente ubicación:
/ integración / docker / Dockerfile
Este simple Dockerfile se enfoca solo en los pasos de prueba C / C ++ requeridos para construir la imagen. En la mayoría de los casos del mundo real, deberá fusionar este archivo con su Dockerfile.
Antes de analizar el contenido en el Dockerfile de ejemplo, veamos cómo funciona. Mi ejemplo asume la siguiente estructura de archivo simple:
style = ”tamaño de fuente: 13px;”>$ HOME / sandbox / parasoft_cpptest_standard-2020.1.0-linux.x86_64.tar.gz
1. Descomprima la distribución de prueba C / C ++.
- cd $ HOME / caja de arena
- tar xzf parasoft_cpptest_standard-2020.1.0-linux.x86_64.tar.gz
2. Copie el Dockerfile de ejemplo de la distribución
- cp cpptest / integration / docker
3. Prepare un archivo de propiedades para la prueba C / C ++ con la información sobre la licencia. Usaremos el archivo cpptestcli.properties predeterminado como base, así que lo copiaremos a nuestro directorio de trabajo:
- cp cpptest / cpptestcli.properties
Edítelo para insertar la información sobre la ubicación del servidor de licencias. Utilice su editor favorito para configurar la información de licencia. Guarde el archivo cuando haya terminado.
4. Edite el Dockerfile y elimine el comentario de la línea número 13 (en la que se copia el archivo cpptestcli.properties del directorio local a la ubicación en los contenedores). La línea en el Dockerfile debería verse así:
- COPIA cpptestcli.properties / opt / parasoft / cpptest
5. Ahora, estamos listos para crear la imagen de Docker. Ejecute el comando para construir la primera imagen con la prueba C / C ++. El nombre de la imagen es "cpptest_ci_image".
- ventana acoplable construir -t cpptest_ci_image
Docker tardará un tiempo en analizar su caché y descargar la imagen base requerida. Una vez hecho esto, la distribución de prueba de C / C ++ se copia e instala en la imagen. Después de uno o dos minutos, la imagen debería estar lista. Confirme ejecutando el comando para listar todas las imágenes:
- Docker image -list
En la salida, debería ver "cpptest_ci_image" en la parte superior. Genial, tenemos una imagen construida y lista. ¡Ahora es el momento de probarlo!
Prueba la imagen del contenedor
Para una prueba simple, use una de las líneas de comando auxiliares / ejemplares proporcionadas dentro del Dockerfile.
Use su editor favorito para abrir el Dockerfile y desplácese hacia abajo hasta la parte inferior de los archivos. Debería ver un par de líneas de comando de ejemplo como esta:
Usemos la línea de comando de la línea 26 para ejecutar un análisis estático en el contenedor en uno de los ejemplos de prueba de C / C ++ enviados con la distribución.
Dado que decidimos compilar el archivo cpptestcli.properties con la información de la licencia en el contenedor, podemos simplificar la línea de comandos y eliminar la opción -settings. La línea de comando para la prueba debería tener este aspecto:
- docker run –rm -v $ PWD: $ PWD -w / opt / parasoft / cpptest / examples / ATM cpptestcli -compiler gcc_9-64 -module. -traza limpiar todo
¡Voila! El análisis estático se ejecutó en el contenedor. Los resultados se informaron en la consola.
Podríamos configurar aún más la herramienta para producir el informe HTML en el sistema de archivos local, pero esta es una historia diferente. Nuestro objetivo principal era crear el contenedor con la prueba C / C ++ dentro y configurarlo para ejecutar análisis estáticos. Logramos la meta.
Configurar un servidor CI con análisis estático
Si necesita configurar un servidor CI con análisis estático como parte del proceso, su tarea es mucho más sencilla. Simplemente acceda al contenedor. Lo mismo ocurre si los desarrolladores de su equipo desean ejecutar un análisis estático.
Necesita actualizar la prueba de Parasoft C / C ++ a la último lanzamiento? Simplemente descargue la distribución, reconstruya la imagen de su contenedor y ¡listo! El equipo y la infraestructura automatizada ni siquiera notarán esta operación. Suave, fácil y reversible, si es necesario.
Acerca del contenido de Dockerfile
Antes de terminar, veamos el contenido del Dockerfile enviado con la prueba Parasoft C / C ++ que se usó para crear nuestra imagen. La siguiente imagen muestra el contenido de / integración / docker / Dockerfile.
Aquí están los detalles:
- Línea 2 especifica el centro de Docker de la imagen GCC, en el que se basa la imagen del contenedor.
- Línea 3 configura el directorio de trabajo para los comandos subsiguientes que se ejecutarán en este script.
- Línea 7, estamos copiando la distribución de prueba de C / C ++ (archivo) en la imagen del contenedor.
- Línea 10 extrae la distribución en la ubicación del contenedor: / opt / parasoft (observe el comando WORKDIR de la línea 4)
- Línea 13 copia el archivo cpptestcli.properties personalizado del directorio local en la instalación en el contenedor de la prueba C / C ++. Este paso es opcional y por defecto está comentado. En la mayoría de los casos, querrá tener algunas propiedades integradas en la instalación de la prueba C / C ++. El escenario más típico es la configuración de la licencia, que incluirá la ubicación del servidor de licencias, las credenciales, etc.
- Línea 16 elimina el archivo de distribución. Esto es solo una limpieza.
- Línea 18 restablece el workdir a / home (opcional)
- Línea 19 especifica el ejecutable que se ejecutará cuando se inicie el contenedor.
Esto es todo lo que se necesita para crear un contenedor simple con la prueba Parasoft C / C ++ que esté listo para ejecutar análisis estáticos.
Como mencioné, este es un simple Dockerfile. Se agregó a la distribución para darle un ejemplo de lo que puede necesitar para crear una imagen de contenedor para su entorno. Deberá adaptarlo a sus necesidades o fusionarlo con Dockerfiles existentes.
Vea cómo los contenedores y la prueba de Parasoft C/C++ se adaptan a su proceso de CI/CD y aumentan la productividad.