Webinaire en vedette : MISRA C++ 2023 : tout ce que vous devez savoir | Voir le séminaire

Déploiement de l'analyse statique et des tests unitaires dans des environnements conteneurisés, partie 2

Portrait de Miroslaw Zielinski, directeur de la gestion des produits chez Parasoft
9 juin 2023
6 min lire

Vous avez peut-être lu dans un article précédent comment appliquer SAST et les tests unitaires dans un environnement conteneurisé. Voici une suite sur la façon dont vous pouvez déployer correctement l'analyse statique et les tests unitaires à l'aide de Parasoft C/C++test Standard dans un conteneur Docker.

Importance de la conteneurisation pour les tests et l'analyse statique

Les conteneurs sont une technologie d'emballage évolutive, standardisée et portable qui est déployée directement dans les workflows de développement Agile modernes d'aujourd'hui comme DevOps/DevSecOps. Les conteneurs ont d'abord été introduits pour le développement et le déploiement d'applications Web et de microservices, où ils ont été largement adoptés dans l'industrie informatique. Aujourd'hui, l'industrie embarquée utilise largement les conteneurs.

Les conteneurs offrent une reproduction rapide d'environnements identiques pour le développement intégré, les tests de logiciels, la mise en scène et la production à n'importe quelle phase du SDLC.

Le déploiement de conteneurs offre plusieurs avantages.

  • Accélère le délai de mise sur le marché du développement logiciel.
  • Améliore la sûreté, la sécurité et la fiabilité du code.
  • Aide à gérer la complexité croissante des écosystèmes de développement.
  • Offre la possibilité de répondre de manière dynamique aux essais de livraison de logiciels dans un marché en évolution rapide et continue.

Explication des images Docker et conteneur

Il est important de comprendre l'architecture du conteneur. Passons en revue une description rapide. Un conteneur est une application associée à d'autres composants ou dépendances tels que des fichiers binaires ou des bibliothèques d'exécution de langage spécifiques et des fichiers de configuration. Les conteneurs ont leurs propres processus, leurs propres interfaces réseau et montages.

Les conteneurs sont également isolés les uns des autres et exécutés sur un moteur de conteneur, tel que Docker, pour une portabilité et une flexibilité simplifiées. En outre, les conteneurs partagent un système d'exploitation et s'exécutent sur l'un des éléments suivants :

  • Systèmes d'exploitation Linux, Windows et Mac
  • Machines virtuelles ou serveurs physiques
  • Machines des développeurs ou dans les centres de données sur site
  • Le cloud public

Il est également important de comprendre le rôle du moteur de conteneur, car il fournit des fonctionnalités cruciales, notamment :

  • Virtualisation au niveau du système d'exploitation
  • Le runtime du conteneur, qui gère le cycle de vie du conteneur (exécution, supervision, transfert d'images, stockage et attachements réseau)
  • Espaces de noms du noyau utilisés pour isoler les ressources

Une image de conteneur est un fichier statique avec un code exécutable et comprend tout ce dont un conteneur a besoin pour s'exécuter. Par conséquent, un conteneur est une instance en cours d'exécution d'une image de conteneur. C/C++test est livré avec un exemple d'image de conteneur, mais pour être plus précis, il s'agit d'un fichier Docker.

Comment créer une image de conteneur

Partie 1 de cet article discutait des avantages de l'utilisation de conteneurs pour déployer des chaînes d'outils de développement intégrées. Il a montré comment configurer Parasoft C / C ++ test Professional pour qu'il fonctionne avec la chaîne d'outils de compilation et l'environnement d'exécution de test déployés dans un conteneur.

Maintenant, regardons la création d'une image de conteneur avec Parasoft C / C ++ test Standard. Je vais vous montrer un exemple simple avec une exécution d'analyse statique dans le conteneur.

Déployer la norme de test Parasoft C / C ++ dans un conteneur Docker

En tant qu'outil basé sur la ligne de commande, Parasoft C/C++test Standard convient aux déploiements en conteneur. Il peut être empaqueté avec le compilateur et le système de construction dans une image de conteneur et utilisé pour CI/CD et déployé sur les bureaux des développeurs pour les analyses de ligne de commande locales. L'image ci-dessous montre la vue d'ensemble de haut niveau de cette configuration :

Le diagramme montre Jenkins utilisant un test C / C ++ conteneurisé pour exécuter une analyse statique. Dans cette configuration spécifique, le test Parasoft C / C ++, la chaîne d'outils de compilation et les outils de construction sont déployés dans le conteneur affiché dans le coin supérieur droit du diagramme.

Le conteneur situé en dessous, en bas à droite, fournit l'environnement d'exécution, qui peut être nécessaire pour exécuter des tests d'exécution, tels que des tests unitaires ou des tests automatisés au niveau du système.

Si nous avons l'intention de n'implémenter que l'analyse statique, notre configuration n'inclura probablement qu'un seul type de conteneur avec la chaîne d'outils de compilation et le test Parasoft C / C ++.

Créer une image de conteneur avec le test Parasoft C / C ++

Si vous ne l'avez pas déjà fait, veuillez installer la dernière version du test Parasoft C/C++ pour Linux.

Pour simplifier le processus de création d'une image de conteneur avec le test C / C ++, la dernière version est livrée avec un exemple de Dockerfile. Vous pouvez trouver ce Dockerfile à l'emplacement suivant:

/ intégration / docker / Dockerfile

Ce Dockerfile simple se concentre uniquement sur les étapes de test C / C ++ requises pour créer l'image. Dans la plupart des cas réels, vous devrez fusionner ce fichier avec votre Dockerfile.

Avant d'analyser le contenu de l'exemple Dockerfile, voyons comment cela fonctionne. Mon exemple suppose la structure de fichiers simple suivante:

style = "taille de la police: 13px;">$ HOME / sandbox / parasoft_cpptest_standard-2020.1.0-linux.x86_64.tar.gz

1. Décompressez la distribution de test C / C ++.

  • cd $ HOME / bac à sable
  • tar xzf parasoft_cpptest_standard-2020.1.0-linux.x86_64.tar.gz

2. Copiez l'exemple Dockerfile de la distribution

  • cp cpptest / intégration / docker

3. Préparez un fichier de propriétés pour le test C / C ++ avec les informations sur la licence. Nous utiliserons le fichier par défaut cpptestcli.properties comme base, nous allons donc le copier dans notre répertoire de travail:

  • cp cpptest / cpptestcli.properties

Modifiez-le pour insérer les informations sur l'emplacement de votre serveur de licences. Utilisez votre éditeur préféré pour configurer les informations de licence. Enregistrez le fichier lorsque vous avez terminé.

4. Modifiez le Dockerfile et supprimez le commentaire de la ligne numéro 13 (celle où le fichier cpptestcli.properties est copié du répertoire local vers l'emplacement dans les conteneurs). La ligne dans le Dockerfile devrait ressembler à ceci:

  • COPIER cpptestcli.properties / opt / parasoft / cpptest

5. Maintenant, nous sommes prêts à créer l'image Docker. Exécutez la commande pour créer la première image avec le test C / C ++. Le nom de l'image est «cpptest_ci_image».

  • docker build -t cpptest_ci_image

Docker prendra un certain temps pour analyser son cache et télécharger l'image de base requise. Une fois que cela est fait, la distribution de test C / C ++ est copiée et installée dans l'image. Après une minute ou deux, l'image devrait être prête. Confirmez-le en exécutant la commande pour lister toutes les images:

  • liste d'images Docker

Dans la sortie, vous devriez voir le «cpptest_ci_image» répertorié en haut. Génial, nous avons donc une image construite et prête. Il est maintenant temps de le tester!

Tester l'image du conteneur

Pour un test simple, utilisez l'une des lignes de commande d'assistance / d'exemple fournies dans le Dockerfile.

Utilisez votre éditeur préféré pour ouvrir le Dockerfile et faites défiler vers le bas des fichiers. Vous devriez voir quelques exemples de lignes de commande comme ceci:

Utilisons la ligne de commande de la ligne 26 pour exécuter une analyse statique dans le conteneur sur l'un des exemples de test C / C ++ fournis avec la distribution.

Puisque nous avons décidé de créer le fichier cpptestcli.properties avec les informations de licence dans le conteneur, nous pouvons simplifier la ligne de commande et supprimer l'option -settings. La ligne de commande du test devrait ressembler à ceci :

  • docker run –rm -v $ PWD: $ PWD -w / opt / parasoft / cpptest / examples / ATM cpptestcli -compiler gcc_9-64 -module. -trace faire tout nettoyer

Voilà! L'analyse statique a été exécutée dans le conteneur. Les résultats ont été rapportés sur la console.

Nous pourrions configurer davantage l'outil pour produire le rapport HTML sur le système de fichiers local, mais c'est une autre histoire. Notre objectif principal était de créer le conteneur avec C/C++test à l'intérieur et de le configurer pour exécuter une analyse statique. Nous avons atteint l'objectif.

Configurer un serveur CI avec une analyse statique

Si vous devez configurer un serveur CI avec analyse statique dans le cadre du processus, votre tâche est beaucoup plus simple. Accédez simplement au conteneur. Il en va de même si les développeurs de votre équipe souhaitent exécuter une analyse statique.

Besoin de mettre à niveau Parasoft C/C++test vers la dernière version ? Téléchargez simplement la distribution, reconstruisez votre image de conteneur et le tour est joué ! L'équipe et l'infrastructure automatisée ne remarqueront même pas cette opération. Lisse, facile et réversible, si nécessaire.

À propos du contenu Dockerfile

Avant de terminer, examinons le contenu du Dockerfile livré avec le test Parasoft C / C ++ qui vient d'être utilisé pour créer notre image. L'image ci-dessous montre le contenu de / intégration / docker / Dockerfile.

Voici les détails:

  • Ligne 2 spécifie le hub Docker de l'image GCC, sur lequel l'image du conteneur est basée.
  • Ligne 4 configure le répertoire de travail pour les commandes suivantes qui seront exécutées dans ce script.
  • Ligne 7, nous copions la distribution de test C / C ++ (archive) dans l'image du conteneur.
  • Ligne 10 extrait la distribution dans l'emplacement du conteneur: / opt / parasoft (notez la commande WORKDIR de la ligne 4)
  • Ligne 13 copie le fichier personnalisé cpptestcli.properties du répertoire local dans l'installation dans le conteneur du test C / C ++. Cette étape est facultative et par défaut, elle est commentée. Dans la plupart des cas, vous souhaiterez que certaines propriétés soient intégrées dans l'installation du test C / C ++. Le scénario le plus typique est la configuration de la licence, qui comprendra l'emplacement du serveur de licences, les informations d'identification, etc.
  • Ligne 16 supprime l'archive de distribution. C'est juste un nettoyage.
  • Ligne 18 réinitialise le répertoire de travail dans / home (facultatif)
  • Ligne 19 spécifie l'exécutable à exécuter au démarrage du conteneur.

C'est tout ce dont vous avez besoin pour créer un conteneur simple avec le test Parasoft C / C ++ prêt à exécuter une analyse statique.

Comme je l'ai mentionné, il s'agit d'un simple Dockerfile. Il a été ajouté à la distribution du produit pour vous donner un exemple de ce dont vous pourriez avoir besoin pour créer une image de conteneur pour votre environnement. Vous devrez l'adapter à vos besoins ou le fusionner avec des Dockerfiles existants.

Découvrez comment les conteneurs et le test Parasoft C/C++ s'intègrent dans votre pipeline CI/CD et augmentez la productivité.