Personnaliser les pipelines DevSecOps pour les débutants

Apprenez les bases de l'adoption de DevSecOps et mettez en place votre première application ou microservice.

A propos des chaînes d'outils DevSecops

Vous avez découvert et testé IBM Cloud Les chaînes d'outils DevSecOps d'intégration continue (CI), de déploiement continu (CD) et de conformité continue (CC) qui mettent en œuvre les meilleures pratiques DevSecOps et les outils de sécurité.

Vous êtes maintenant prêt à embarquer votre propre application ou microservice et à adopter DevSecOps.

Avant de commencer

Vous avez besoin des ressources suivantes pour intégrer une application dans une chaîne d'outils DevSecOps:

  • Un référentiel Git de code source d'application qui contient le code de votre application, souvent appelé "référentiel d'application".
  • Un fichier .pipeline-config.yaml. Ce fichier est le fichier de configuration principal qui est utilisé par les pipelines d'EC, de CD et de CC pour personnaliser les étapes du processus d'exécution de pipeline. Commencez avec un exemple de fichier .pipeline-config.yaml, que vous pouvez télécharger et personnaliser en fonction de vos besoins. Toutes les étapes, à l'exception de l'étape de démarrage, peuvent être personnalisées à l'aide du fichier .pipeline-config.yaml. Le fichier déclenche et exécute vos scripts personnalisés pour générer, tester et déployer votre application. Vous pouvez modifier le nom du fichier .pipeline-config.yaml ou utiliser des fichiers différents pour différents pipelines ou déclencheurs. Vérifiez que les valeurs de paramètre de votre pipeline ou déclencheur correspondent à votre fichier de configuration. Pour plus d'informations, voir Paramètres de pipeline.

IBM Cloud propose les modèles DevSecOps suivants pour vous aider à démarrer :

Comment les pipelines DevSecOps utilisent les référentiels

Pour construire, tester et déployer votre application, les pipelines DevSecOps utilisent deux référentiels :

  • app-repo: référentiel d'application, qui contient le code source de votre application.
  • config-repo: référentiel de configuration, qui contient vos fichiers YAML de configuration de pipeline et vos scripts.

Dans l'exemple d'applicationDevSecOps, ces deux référentiels sont les mêmes. La plupart des adeptes de DevSecOps commencent par ce modèle. Cependant, à mesure que vous intégrez d'autres microservices, un référentiel de configuration de pipeline dédié et distinct peut être nécessaire. Etant donné que le référentiel d'application et le référentiel de configuration sont identiques dans l'exemple d'application, le référentiel est cloné deux fois lors de l'exécution des pipelines, ce qui peut entraîner des erreurs. C'est pourquoi la meilleure pratique consiste à disposer d'un référentiel de configuration distinct pour héberger les fichiers de configuration et les scripts qui peuvent être partagés et réutilisés entre les différentes chaînes d'outils et pipelines DevSecOps. Pour plus d'informations sur la personnalisation du référentiel de configuration, voir les étapes de personnalisation avancées.

DevSecOps les scripts considèrent le app-repo et le config-repo comme deux référentiels distincts. Les scripts clonent les référentiels deux fois lors de la phase de démarrage du pipeline. Ces clones sont appelés app-repo et one-pipeline-config-repo. Chaque étape est exécutée dans le contexte de config repo.

Activation d'une application

Pour plus de simplicité, créez et testez une chaîne d'outils DevSecOps CI avec l'exemple d'application Node avant de continuer.

Il existe trois façons principales d'intégrer votre première application dans une chaîne d'outils DevSecOps CI existante :

  • Option 1: Ajoutez votre référentiel d'application à la chaîne d'outils et utilisez l'exemple de référentiel d'application comme référentiel de configuration.
  • Option 2: Remplacez l'exemple de référentiel d'application par votre référentiel d'application.
  • Option 3: Ajoutez votre référentiel d'application à la chaîne d'outils et utilisez un référentiel de configuration dédié. Pour plus d'informations sur cette option, voir les étapes de personnalisation avancées.

Les chaînes d'outils DevSecOps utilisent des dépôts Gitlab qui sont gérés par IBM, également connu sous le nom de GRIT. D'autres fournisseurs Git peuvent être utilisés à la place. Votre référentiel d'applications peut être hébergé sur GitHub ou Gitlab, par exemple.

Option 1: Ajoutez votre référentiel d'application et utilisez le modèle de référentiel d'application comme référentiel de configuration

Pour ajouter votre référentiel d'application à la chaîne d'outils et utiliser le référentiel d'application exemple comme référentiel de configuration, procédez comme suit:

  1. Dans la console " IBM Cloud, cliquez sur l'icône " Menu, " Icône de menu > " Automatisation de la plate-forme > " Chaînes d'outils, et sélectionnez la chaîne d'outils que vous souhaitez modifier.
  2. Cliquez sur Ajouter.
  3. Sélectionnez l'emplacement où votre référentiel d'applications est hébergé, Gitlab ou GitHub.
  4. Utilisez le serveur par défaut ou ajoutez-en un nouveau.
  5. Saisissez l' URL e du serveur personnalisé et le jeton d'accès personnel.
  6. Cliquez sur Créer une intégration.
  7. Entrez le référentiel de code source de votre application URL.
  8. Cliquez sur Créer une intégration.

Ensuite, spécifiez l'exemple de référentiel d'application comme référentiel de configuration en procédant comme suit:

  1. Dans la console " IBM Cloud, cliquez sur l'icône " Menu, " Icône de menu > " Automatisation de la plate-forme > " Chaînes d'outils, et sélectionnez la chaîne d'outils que vous souhaitez modifier.
  2. Cliquez sur pr-pipeline.
  3. Cliquez sur Paramètres et accédez à l'onglet Propriétés d'environnement.
  4. Modifier la valeur de la propriété ' pipeline-config-repo ' pour qu'elle pointe vers le référentiel d'applications d'exemple URL.
  5. Revenez à votre chaîne d'outils d'EC.
  6. Cliquez sur ci-pipeline.
  7. Cliquez sur Paramètres et accédez à l'onglet Propriétés d'environnement.
  8. Modifier la valeur de la propriété ' pipeline-config-repo ' pour qu'elle pointe vers le référentiel d'applications d'exemple URL.

Vos pipelines d'EC utilisent désormais le modèle de référentiel d'application pipeline-config comme référentiel de configuration.

Option 2: Remplacez l'exemple de référentiel d'application par votre propre référentiel d'application

Pour remplacer l'exemple de référentiel d'application par votre propre référentiel d'application, procédez comme suit:

  1. Dans la console 'IBM Cloud, cliquez sur l'icône 'Menu 'Icône de menu > 'Automatisation de la plate-forme > 'Chaînes d'outils, et sélectionnez la chaîne d'outils CI que vous souhaitez modifier.
  2. Recherchez le référentiel de code source de l'exemple d'application et sélectionnez Configurer.
  3. Remplacez le référentiel URL par le référentiel de votre code source d'application URL.
  4. Cliquez sur Save integration.

Après avoir remplacé l'exemple de référentiel d'application, assurez-vous que le nouveau référentiel d'application contient un fichier .pipeline-config.yaml et les scripts correspondants. Copiez le fichier .pipeline-config.yaml et les scripts du référentiel de l'exemple d'application dans votre référentiel d'application ou utilisez cet exemple de fichier de configuration.

Configuration des pipelines d'EC

Après avoir ajouté votre référentiel d'application, vous devez configurer les pipelines d'EC pour qu'ils fonctionnent avec le nouveau référentiel.

Configuration des déclencheurs de pipeline

Les déclencheurs par défaut utilisent le référentiel d'application exemple, vous devez donc les mettre à jour pour utiliser votre référentiel d'application. Vérifiez les paramètres du déclencheur et modifiez-les si nécessaire pour vous assurer que tous les déclencheurs pointent vers votre référentiel d'application. Procédez comme suit :

  1. Dans la console 'IBM Cloud, cliquez sur l'icône 'Menu 'Icône de menu > 'Automatisation de la plate-forme > 'Chaînes d'outils, et sélectionnez la chaîne d'outils CI que vous souhaitez modifier.
  2. Cliquez sur pr-pipeline.
  3. Modifiez le déclencheur PR ( Git ) et fournissez l' URL et la branche de votre référentiel d'applications.
  4. Cliquez sur Sauvegarder.
  5. Revenez à votre chaîne d'outils d'EC et cliquez sur ci-pipeline.
  6. Modifiez le déclencheur CI ( Git ) et fournissez l' URL et la branche de votre référentiel d'applications. Assurez-vous que le nom de l'application est correct dans la section Propriétés.
  7. Cliquez sur Sauvegarder.
  8. Editez le déclencheur manuel. Dans la section Propriétés, vérifiez que le nom de l'application est correct.
  9. Assurez-vous que les propriétés de référentiel et de branche sont correctes et pointent vers votre référentiel d'application.

Configuration du fichier .pipeline-config.yaml

Copiez le fichier .pipeline-config.yaml du modèle de référentiel d'application dans votre référentiel d'application ou utilisez cet exemple de fichier de configuration.

Pour pr-pipeline et ci-pipeline, vérifiez que les paramètres pipeline-config, pipeline-config-branch et pipeline-config-repo sont correctement définis et correspondent à votre configuration. Si ces paramètres ne sont pas définis correctement, vous pouvez valider les modifications dans la branche incorrecte, ce qui entraîne une erreur avec votre pipeline.

Si la variable pipeline-config-repo n'est pas définie, les pipelines DevSecOps supposent qu'il s'agit du même référentiel que celui du code source de votre application.

Utiliser des scripts personnalisés avec DevSecOps

Le fichier " pipeline-config.yaml est le composant clé qui orchestre et personnalise le comportement du pipeline DevSecOps. Le fichier utilise des scripts pour générer, tester et déployer votre application. Le fichier définit comment les étapes sont configurées et quels scripts sont exécutés. Pour plus d'informations, voir Scripts personnalisés.

Il existe deux grandes catégories de scripts utilisés dans les pipelines DevSecOps:

  • Scripts liés à l'application qui sont utilisés pour générer, tester et déployer votre application. Ces scripts relèvent de votre propre responsabilité et sont hors de portée de l'assistance DevSecOps. Comme ces scripts n'ont pas d'implémentation par défaut, vous devez les ajouter à votre application ou à votre référentiel de configuration. Vous devrez peut-être extraire les scripts de Jenkins ou d'une autre source.
  • Des scripts de sécurité et de conformité qui exécutent des analyses de sécurité et de conformité. La plupart sont fournis avec des scripts par défaut que vous pouvez remplacer pour utiliser votre propre implémentation personnalisée.

A l'exception de l'étape de démarrage, chaque étape d'un pipeline CI, CD ou CC peut être personnalisée avec vos propres scripts pour remplacer l'implémentation par défaut de l'étape. L'étape de démarrage ne peut pas être personnalisée avec vos propres scripts.

Bien que les scripts Bash soient fournis en tant qu'exemples, vous pouvez générer, tester et déployer votre application à l'aide d'autres langages tels que Python ou Go. Veillez à utiliser le image approprié pour chaque étape. Reportez-vous aux imagesDocker dans la section Pipelines DevSecOps.

Reportez-vous au tableau Etapes et tâches qui récapitule les différentes étapes du pipeline d'EC. Le tableau fournit également des informations consolidées indiquant si l'étape possède une implémentation de référence par défaut, si elle peut être personnalisée ou ignorée, ou si une collecte d'informations collectées explicite est requise par l'exécution de l'étape.

Migrer de Jenkins ou Travis vers DevSecOps

La plupart des adeptes de DevSecOps ne partent pas de rien. La plupart des utilisateurs ont déjà mis en place des processus d'intégration et de distribution continues, ainsi qu'une bibliothèque de scripts correspondante. Ces processus sont généralement implémentés à l'aide de Jenkins, Travis ou d'une autre plateforme.

Points clés de la migration vers DevSecOps::

  • Le fichier de configuration pipeline-config.yaml doit indiquer comment les pipelines d'EC et de CD sont actuellement orchestrés. Les phases et les étapes doivent être mises en correspondance avec les étapes du pipelineDevSecOps.
  • Vous devez utiliser les mêmes scripts, images de base et variables qui sont déjà en place.
  • Les propriétés de secret doivent être migrées vers un magasin de secrets.
  • Les propriétés non secrètes doivent être ajoutées en tant que propriétés de pipeline ou de déclencheur.

Travail en mode développement

Vous pouvez utiliser le mode de développement pour les pipelines CI et CD afin de tester l'implémentation de votre fichier et de vos scripts .pipeline-config.yaml. Le pipeline en mode développement n'exécute aucune tâche liée à la sécurité ou à la conformité, ce qui réduit l'exécution du pipeline. Pour plus d'informations, voir exécution de pipelines en mode développement.

Utilisez le mode de développement à des fins de développement uniquement. Le mode développement ne remplace pas les pipelines CI et CD officiels de DevSecOps, qui restent les implémentations de référence.

Configuration du pipeline CD

Dans le flux de travailDevSecOps d'intégration et de déploiement continus, le pipeline d'intégration continue envoie des mises à jour au référentiel d'inventaire au cours de l'étape " deploy-release du pipeline d'intégration continue. Pour plus d'informations, voir l'exemple de script release.sh.

Dans ce flux de travail, plusieurs déclencheurs de CI et différentes chaînes d'outils de CI DevSecOps peuvent contribuer au même référentiel d'inventaire.

Contrairement au pipeline CI, le script de déploiement utilisé par le pipeline CD doit être adapté à partir de vos scripts en cours dans Jenkins, Travis ou sur une autre plateforme pour utiliser les entrées du référentiel d'inventaire.

Cet exemple de code montre comment extraire des informations de l'inventaire et l'utiliser pour exécuter un déploiement Kubernetes.

Emplacement des scripts DevSecOps

Les pipelines DevSecOps sont livrés avec des outils de sécurité et d'analyse par défaut et des scripts associés.

Par exemple, le début d'un journal d'étape fait référence au script par défaut:

scan-artifact:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
  dind: true
  dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
  abort_on_failure: false
  image_pull_policy: IfNotPresent
  script: |
    #!/bin/sh

    "/opt/commons/scan-artifact/scan.sh"

/opt/commons/scan-artifact/scan.sh est le script par défaut.

Le pipeline DevSecOps fournit le chemin d'accès au dossier racine de la bibliothèque commons dans une variable d'environnement appelée " COMMONS_PATH, qui est disponible dans toutes les tâches et étapes. Pour accéder à un script intégré à l'image de base de conformité, utilisez la variable COMMONS_PATH avec le dossier de script dont vous avez besoin:

source "${COMMONS_PATH}/<script folder in commons>/<script file name>

Consultez le tableau Etapes et tâches qui récapitule les différentes étapes du pipeline CD. La table fournit également des informations consolidées indiquant si l'étape possède une implémentation de référence par défaut, si elle peut être personnalisée ou ignorée ou si une collecte d'informations collectées explicite est requise par l'exécution de l'étape.

Propriétés d'environnement

Les pipelines DevSecOps sont livrés avec des propriétés d'environnement prédéfinies, mais vous pouvez ajouter autant de propriétés personnalisées que nécessaire. Vous pouvez accéder à ces valeurs de propriétés dans vos scripts à l'aide de la commande get_env.

Après avoir ajouté votre propriété et sa valeur par défaut facultative au pipeline ou au déclencheur, utilisez la commande get_env dans votre script pour extraire la valeur de la propriété. L'exemple suivant extrait la valeur de la propriété my-variable:

MY_VARIABLE=$(get_env my-variable "")

Vous pouvez également remplacer dynamiquement la valeur d'une propriété dans un script à l'aide de la commande set_env. L'exemple suivant remplace la valeur de la propriété my-variable:

set_env my-variable new-value

Ignorer les étapes

Certaines étapes peuvent ne pas être pertinentes. Par exemple, vous ne générez peut-être pas d'images Docker ou vous n'avez pas encore implémenté de tests d'acceptation. Si vous souhaitez ignorer une étape, vous pouvez éditer le fichier .pipeline-config.yaml pour inclure exit 0 ou définir la variable skip sur true.

L'exemple suivant ajoute exit 0 pour ignorer une étape:

scan-artifact:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
  dind: true
  dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
  abort_on_failure: false
  image_pull_policy: IfNotPresent
  skip: false
  runAfter: null
  script: |
    #!/bin/sh

    exit 0
    "/opt/commons/scan-artifact/scan.sh"

Les images Docker dans les pipelines DevSecOps

Par défaut, les pipelines DevSecOps utilisent IBM Les images de Continuous Delivery. Ces images contiennent certains des outils les plus courants, tels que Node et Java, pour exécuter vos scripts. Vous pouvez également utiliser les images d'un autre fournisseur ou vos propres images personnalisées qui contiennent vos outils préférés.

Les images Docker utilisées par les pipelines DevSecOps sont spécifiées dans le fichier " .pipeline-config.yaml. Chaque étape peut utiliser une image différente.

Modification de la version de l'image

En fonction de vos besoins, vous devrez peut-être utiliser une version différente d'une image. Pour modifier la version de l'image, éditez le fichier .pipeline-config.yaml. Par exemple, si vous avez référencé l'image suivante dans votre fichier YAML icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24, la modification en icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.27 entraîne l'utilisation de la version 3.27 de l'image.

De la même manière, modifiez le dind_image pour l'étape:

scan-artifact:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
  dind: true
  dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
(...)

Obtenir de l'aide

IBM Cloud IBM l'assistant IA de , qui est alimenté par l' watsonx de , est conçu pour vous aider à découvrir comment travailler dans l' IBM Cloud, et à créer des solutions avec le catalogue d'offres disponible. Voir Obtenir de l'aide de l'assistant IA.

Si vous n'arrivez toujours pas à résoudre le problème, ouvrez un cas de support. Pour plus d'informations, voir Création de cas de support. Et, si vous souhaitez faire part de vos commentaires, consultez la rubrique Soumettre des commentaires.