Personnalisation des pipelines à l'aide de scripts personnalisés
Les scripts personnalisés sont des personnalisations ajoutées dans le pipeline. Les utilisateurs, les équipes et les utilisateurs fournissent des scripts pour exécuter des tâches personnalisées afin de garantir une intégration et un déploiement continus des stratégies.
Les scripts personnalisés contrôlent les étapes de pipeline. Vous pouvez utiliser un fichier de configuration (.pipeline-config.yaml) pour configurer le comportement des étapes, le contenu des scripts et l'image de base qui exécute
les scripts. Les scripts et la configuration des étapes de pipeline sont chargés à partir d'un référentiel Git, que ce soit un référentiel d'application (semblable à .travis.yml ou Jenkinsfile) ou un référentiel personnalisé.
Lorsque l'un des scripts personnalisés est lancé, l'adresse URL complète du fichier de script personnalisé, y compris le nom du fichier et le hachage de validation, est imprimée au début des journaux du pipeline de la manière suivante : The custom script can be viewed using the following link: 'https://<source repo url>/<organization name>/<repository name>/blob/<commit hash>/.pipeline-config.yaml'.
Ce positionnement améliore la traçabilité.
Pour plus d'informations, voir Personnaliser les pipelines DevSecOps pour les débutants.
Configuration dans .pipeline-config.yaml
Utilisez un fichier de configuration .pipeline-config.yaml pour étendre les fonctionnalités du pipeline.
Emplacement de fichier
Pour les pull requests et les pipelines d'intégration continue, stockez le fichier de configuration .pipeline-config.yaml dans un référentiel d'application .travis.yml, de la même manière que les Jenkinsfile fichiers ou. Pour les pipelines de déploiement continu, enregistrez ce fichier dans un référentiel dédié.
Pour tous les pipelines, vous pouvez personnaliser l'emplacement et la source du fichier .pipeline-config.yaml à l'aide des paramètres de l'interface utilisateur de pipeline suivants :
pipeline-config, pour définir le chemin d'accès au fichier de configuration. La valeur par défaut est.pipeline-config.yaml.pipeline-config-repopour définir le référentiel à partir duquel extraire la configuration et les scripts. La valeur par défaut est le référentiel d'applications d'intégration continue.pipeline-config-branchÀ utiliser comme branche pour la configuration dans le référentiel de configuration. La valeur par défaut correspond à la branche du référentiel de l'application en intégration continue, et à la branchemasteren déploiement continu.
Paramètres de configuration
La configuration dans le fichier .pipeline-config.yaml prend en charge les paramètres suivants :
Il ne s'agit pas de paramètres de pipeline ; ils doivent faire partie de votre fichier .pipeline-config.yaml.
-
image: vous pouvez utiliser n'importe quelle image Docker accessible par le noeud worker de pipeline comme image de base pour la tâche. -
script: script d'exécution dans l'étape. Ce champ étant utilisé comme fichier de script, assurez-vous que son contenu se comporte comme un fichier de script dans l’image de base que vous avez fournie. Vous pouvez inclure d'autres scripts en regard de ce fichier de configuration et y faire référence à partir de ce point d'entrée. Exemple :
test:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
script: |
#!/bin/sh
scripts/lint.sh
scripts/unit-test.sh
-
dind: spécifiez s'il convient d'activer ou nondocker-in-dockerdans le contexte de script. Le paramétrage par défaut estfalse. -
abort_on_failure: par défaut, le pipeline s'arrête lorsque le script échoue. La définition de cette valeur surfalsemarque l'étape dans un avertissement (état ambre) (passé avec avertissement), permet au pipeline de continuer et le travail ayant échoué est référencé dans les informations collectées. -
image_pull_policy: Définissez le paramètreImagePullPolicyde pod fourni dans l'image pour l'image de base. Les valeurs possibles sont les mêmes que les valeurs valides pour Kubernetes :AlwaysouIfNotPresent. La valeur par défaut estIfNotPresent. -
configmap: extrayez des paires clé-valeur d'une mappe de configuration fournie qui est accessible parPipelineRun. Les valeurs suivantes sont prises en charge :config-name: syntaxe de nom de mappe de configuration directe. Le module d'exécution de l'étape tente d'accéder à la mappe de configurationconfig-nameet de la monter.$prop-name: syntaxe de nom de mappe de configuration indirecte. Le nom de mappe de configuration est recherché dans la mappe de configuration environment-properties, qui contient chaque valeur d'environnement définie sur l'interface utilisateur de pipeline. Par exemple, s'il existe unemy-configentrée prop dans les propriétés de l'environnement, alorsmy-configest utilisé pour$prop.
-
secret: extrayez des paires clé-valeur d'une mappe de configuration fournie qui est accessible parPipelineRun. Les valeurs suivantes sont prises en charge :-
secret-name: syntaxe de nom de secret directe. Le module d'exécution de l'étape tente d'accéder au secretsecret-nameet de le monter. -
$prop-name: syntaxe de nom de secret indirecte. Le nom Secret se trouve dans la carte de configuration environment-properties qui contient toutes les valeurs d'environnement définies dans l'interface utilisateur du pipeline. Par exemple, si la mappe de configuration environment-properties contient la propriétémy-secret,my-secretest utilisé pour$prop.
-
-
runAfter: Exécutez l'étape en cours une fois l'étape spécifiée dans cette propriété terminée. Définissez la valeur avec le nom d'étape que vous avez utilisé dans.pipeline-config.yaml. Utilisez cette propriété avec parcimonie et confirmez que l'étape spécifiée par cette propriété existe dans le pipeline. Si l'étape n'existe pas, le pipeline peut entrer dans un interblocage. -
skip: si la valeur esttrue, ignorez l'étape en cours, si possible, dans les pipelines v10. Toutes les étapes ne peuvent pas être ignorées. Le tableau suivant répertorie les étapes qui peuvent être ignorées lors de l'exécution du pipeline.
| Pipeline | Etapes |
|---|---|
| Pipeline PR | code-unit-tests, code-compliance-tests et code-pr-finish |
| Pipeline CI | code-unit-tests, code-static-scan, code-compliance-checks, build-scan-artifact, code-dynamic-scan, deploy-acceptance-tests, deploy-release et code-ci-finish |
| pipeline CD | prod-verify-artifact, prod-acceptance-tests et prod-finish |
| Pipeline CC | cc-static-scan, cc-dynamic-scan, cc-compliance-checks, cc-scan-artifact et cc-finish |
| Pipeline PR d'aperçu d'application | code-unit-tests, code-static-scan, code-compliance-checks, build-scan-artifact, deploy-acceptance-tests et app-preview-pr-finish |
| Pipeline d'EC en mode développement | code-unit-tests, code-static-scan, deploy-release et code-ci-finish |
| Pipeline CD en mode développement | prod-acceptance-tests et prod-finish |
Exemple de configuration
version: '1' # fixed, this value is used to track schema changes
# `setup` runs right after the app repo is cloned
setup:
# the pipeline will break in case setup fails (default is true)
abort_on_failure: true
# any docker image can be used which is accessible by the private worker
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
# you can reference configmaps, each key in the configmap is going to be available as `/config/{key}`
configmap: my-config
# `$prop` is the indirect config map syntax, the concrete configmap is looked
# up from the `environment-properties` configmap
#
# Eg. if there's a `prop: my-config` entry in the environment properties,
# then `my-config` is going to be used for `$prop`
configmap: $prop
# the mechanism described works for secrets as well!
secret: $my-secrets
# the script is executed inside the checked out app repo
script: |
#!/bin/sh
...
# `test` runs after `setup`, but before building the docker image
test:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
script: |
#!/bin/sh
...
# `static-scan` runs after `test`, but before building the docker image
static-scan:
image: ibmcom/pipeline-base-image:2.12
script: |
#!/bin/sh
...
# `deploy` runs after building the docker image
deploy:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
# the script has access to the built docker image, which is available at `/config/image`
script: |
#!/bin/sh
cat /config/image
# `dynamic-scan` runs after `deploy`, but before the acceptance test run
dynamic-scan:
image: ibmcom/pipeline-base-image:2.12
script: |
#!/bin/sh
...
# `acceptance-test` runs after `deploy`
acceptance-test:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
script: |
#!/bin/sh
...