2.8. Déclenchement et modification des constructions
Les sections suivantes décrivent comment déclencher des builds et modifier des builds à l'aide de crochets de build.
2.8.1. Construire des déclencheurs
Lors de la définition d'un site BuildConfig
, vous pouvez définir des déclencheurs pour contrôler les circonstances dans lesquelles le site BuildConfig
doit être exécuté. Les déclencheurs de construction suivants sont disponibles :
- Crochet Web
- Changement d'image
- Changement de configuration
2.8.1.1. Déclencheurs de webhook
Les déclencheurs Webhook vous permettent de déclencher une nouvelle construction en envoyant une demande au point d'extrémité API de OpenShift Container Platform. Vous pouvez définir ces déclencheurs en utilisant GitHub, GitLab, Bitbucket ou Generic webhooks.
Actuellement, les webhooks d'OpenShift Container Platform ne supportent que les versions analogues de l'événement push pour chacun des systèmes de gestion de code source (SCM) basés sur Git. Tous les autres types d'événements sont ignorés.
Lorsque les événements push sont traités, l'hôte du plan de contrôle d'OpenShift Container Platform confirme si la référence de la branche à l'intérieur de l'événement correspond à la référence de la branche dans le BuildConfig
correspondant. Si c'est le cas, il vérifie alors la référence exacte du commit noté dans l'événement webhook sur le build d'OpenShift Container Platform. S'ils ne correspondent pas, aucun build n'est déclenché.
oc new-app
et oc new-build
créent automatiquement les déclencheurs GitHub et Generic webhook, mais tous les autres déclencheurs webhook nécessaires doivent être ajoutés manuellement. Vous pouvez ajouter manuellement des déclencheurs en définissant des déclencheurs.
Pour tous les webhooks, vous devez définir un secret avec une clé nommée WebHookSecretKey
et la valeur à fournir lors de l'invocation du webhook. La définition du webhook doit ensuite faire référence au secret. Le secret garantit l'unicité de l'URL, empêchant ainsi d'autres personnes de déclencher la construction. La valeur de la clé est comparée au secret fourni lors de l'invocation du webhook.
Par exemple, voici un webhook GitHub avec une référence à un secret nommé mysecret
:
type: "GitHub" github: secretReference: name: "mysecret"
Le secret est alors défini comme suit. Notez que la valeur du secret est codée en base64, comme c'est le cas pour tout champ data
d'un objet Secret
.
- kind: Secret apiVersion: v1 metadata: name: mysecret creationTimestamp: data: WebHookSecretKey: c2VjcmV0dmFsdWUx
2.8.1.1.1. Utiliser les webhooks de GitHub
Les webhooks de GitHub gèrent l'appel fait par GitHub lorsqu'un dépôt est mis à jour. Lors de la définition du déclencheur, vous devez spécifier un secret, qui fait partie de l'URL que vous fournissez à GitHub lors de la configuration du webhook.
Exemple de définition d'un webhook GitHub :
type: "GitHub" github: secretReference: name: "mysecret"
Le secret utilisé dans la configuration du déclencheur du webhook n'est pas le même que le champ secret
que vous rencontrez lors de la configuration du webhook dans l'interface utilisateur de GitHub. Le premier sert à rendre l'URL du webhook unique et difficile à prédire, le second est un champ de chaîne optionnel utilisé pour créer un condensé hexagonal HMAC du corps, qui est envoyé en tant qu'en-tête X-Hub-Signature
.
L'URL du payload est renvoyée en tant qu'URL du Webhook GitHub par la commande oc describe
(voir Afficher les URL du Webhook), et est structurée comme suit :
Exemple de sortie
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
Conditions préalables
-
Créer un site
BuildConfig
à partir d'un dépôt GitHub.
Procédure
Pour configurer un GitHub Webhook :
Après avoir créé un site
BuildConfig
à partir d'un dépôt GitHub, exécutez :$ oc describe bc/<name-of-your-BuildConfig>
Cela génère un webhook GitHub URL qui ressemble à :
Exemple de sortie
<https://api.starter-us-east-1.openshift.com:443/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
- Copiez et collez cette URL dans GitHub, à partir de la console web de GitHub.
- Dans votre dépôt GitHub, sélectionnez Add Webhook à partir de Settings → Webhooks.
- Collez l'URL dans le champ Payload URL.
-
Changez le Content Type de la valeur par défaut de GitHub
application/x-www-form-urlencoded
àapplication/json
. Cliquez sur Add webhook.
Vous devriez voir un message de GitHub indiquant que votre webhook a été configuré avec succès.
Désormais, lorsque vous apportez une modification à votre dépôt GitHub, une nouvelle construction démarre automatiquement, et une fois la construction réussie, un nouveau déploiement démarre.
NoteGogs supporte le même format de charge utile de webhook que GitHub. Par conséquent, si vous utilisez un serveur Gogs, vous pouvez définir un déclencheur webhook GitHub sur votre
BuildConfig
et le déclencher également par votre serveur Gogs.
Avec un fichier contenant une charge utile JSON valide, tel que
payload.json
, vous pouvez déclencher manuellement le webhook aveccurl
:$ curl -H \N "X-GitHub-Event : push\N" -H "Content-Type : application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/github
L'argument
-k
n'est nécessaire que si votre serveur API ne dispose pas d'un certificat correctement signé.
Ressources complémentaires
2.8.1.1.2. Utiliser les webhooks de GitLab
Les webhooks de GitLab gèrent l'appel fait par GitLab lorsqu'un dépôt est mis à jour. Comme pour les déclencheurs GitHub, vous devez spécifier un secret. L'exemple suivant est une définition YAML d'un déclencheur dans le fichier BuildConfig
:
type: "GitLab" gitlab: secretReference: name: "mysecret"
L'URL de la charge utile est renvoyée en tant qu'URL de GitLab Webhook par la commande oc describe
, et est structurée comme suit :
Exemple de sortie
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/gitlab
Procédure
Pour configurer un GitLab Webhook :
Décrire le site
BuildConfig
pour obtenir l'URL du webhook :$ oc describe bc <name>
-
Copiez l'URL du webhook en remplaçant
<secret>
par votre valeur secrète. - Suivez les instructions d'installation de GitLab pour coller l'URL du webhook dans les paramètres de votre dépôt GitLab.
Avec un fichier contenant une charge utile JSON valide, tel que
payload.json
, vous pouvez déclencher manuellement le webhook aveccurl
:$ curl -H "X-GitLab-Event : Push Hook" -H "Content-Type : application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/gitlab
L'argument
-k
n'est nécessaire que si votre serveur API ne dispose pas d'un certificat correctement signé.
2.8.1.1.3. Utiliser les webhooks Bitbucket
Les webhooks Bitbucket gèrent l'appel fait par Bitbucket lorsqu'un référentiel est mis à jour. Comme pour les triggers précédents, vous devez spécifier un secret. L'exemple suivant est une définition YAML d'un déclencheur dans le fichier BuildConfig
:
type: "Bitbucket" bitbucket: secretReference: name: "mysecret"
L'URL de la charge utile est renvoyée en tant qu'URL de Bitbucket Webhook par la commande oc describe
, et est structurée comme suit :
Exemple de sortie
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/bitbucket
Procédure
Pour configurer un Webhook Bitbucket :
Décrivez le "BuildConfig" pour obtenir l'URL du webhook :
$ oc describe bc <name>
-
Copiez l'URL du webhook en remplaçant
<secret>
par votre valeur secrète. - Suivez les instructions de configuration de Bitbucket pour coller l'URL du webhook dans les paramètres de votre référentiel Bitbucket.
Avec un fichier contenant une charge utile JSON valide, tel que
payload.json
, vous pouvez déclencher manuellement le webhook aveccurl
:$ curl -H \N "X-Event-Key : repo:push" -H "Content-Type : application/json" -k -X POST --data-binary @payload.json https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/bitbucket
L'argument
-k
n'est nécessaire que si votre serveur API ne dispose pas d'un certificat correctement signé.
2.8.1.1.4. Utilisation de webhooks génériques
Les webhooks génériques sont invoqués à partir de n'importe quel système capable de faire une requête web. Comme pour les autres webhooks, vous devez spécifier un secret, qui fait partie de l'URL que l'appelant doit utiliser pour déclencher la compilation. Le secret garantit l'unicité de l'URL, empêchant ainsi d'autres personnes de déclencher la création. Voici un exemple de définition de déclencheur YAML dans BuildConfig
:
type: "Generic"
generic:
secretReference:
name: "mysecret"
allowEnv: true 1
- 1
- La valeur
true
permet à un webhook générique de transmettre des variables d'environnement.
Procédure
Pour configurer l'appelant, fournissez au système appelant l'URL du point de terminaison générique du webhook pour votre construction :
Exemple de sortie
https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
L'appelant doit invoquer le webhook en tant qu'opération
POST
.Pour invoquer manuellement le webhook, vous pouvez utiliser
curl
:$ curl -X POST -k https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
Le verbe HTTP doit être défini sur
POST
. L'indicateur insecure-k
est spécifié pour ignorer la validation du certificat. Ce deuxième indicateur n'est pas nécessaire si votre cluster dispose de certificats correctement signés.Le point d'accès peut accepter une charge utile facultative au format suivant :
git: uri: "<url to git repository>" ref: "<optional git reference>" commit: "<commit hash identifying a specific git commit>" author: name: "<author name>" email: "<author e-mail>" committer: name: "<committer name>" email: "<committer e-mail>" message: "<commit message>" env: 1 - name: "<variable name>" value: "<variable value>"
- 1
- Comme pour les variables d'environnement de
BuildConfig
, les variables d'environnement définies ici sont mises à la disposition de votre compilation. Si ces variables entrent en conflit avec les variables d'environnement deBuildConfig
, ces dernières sont prioritaires. Par défaut, les variables d'environnement transmises par webhook sont ignorées. Définissez le champallowEnv
àtrue
dans la définition du webhook pour activer ce comportement.
Pour transmettre cette charge utile à l'aide de
curl
, définissez-la dans un fichier nommépayload_file.yaml
et exécutez :$ curl -H "Content-Type : application/yaml" --data-binary @payload_file.yaml -X POST -k https://<openshift_api_host:port>/apis/build.openshift.io/v1/namespaces/<namespace>/buildconfigs/<name>/webhooks/<secret>/generic
Les arguments sont les mêmes que dans l'exemple précédent, avec l'ajout d'un en-tête et d'une charge utile. L'argument
-H
définit l'en-têteContent-Type
enapplication/yaml
ouapplication/json
en fonction du format de votre charge utile. L'argument--data-binary
est utilisé pour envoyer une charge utile binaire avec les nouvelles lignes intactes avec la requêtePOST
.
OpenShift Container Platform permet aux builds d'être déclenchées par le webhook générique même si une charge utile de requête invalide est présentée, par exemple, un type de contenu invalide, un contenu non analysable ou invalide, et ainsi de suite. Ce comportement est maintenu pour des raisons de compatibilité ascendante. Si une charge utile non valide est présentée, OpenShift Container Platform renvoie un avertissement au format JSON dans le cadre de sa réponse HTTP 200 OK
.
2.8.1.1.5. Affichage des URL des webhooks
Vous pouvez utiliser la commande suivante pour afficher les URL de webhook associées à une configuration de construction. Si la commande n'affiche aucune URL de webhook, aucun déclencheur de webhook n'est défini pour cette configuration.
Procédure
-
Pour afficher les URL des webhooks associés à un site
BuildConfig
, exécutez :
$ oc describe bc <name>
2.8.1.2. Utilisation des déclencheurs de changement d'image
En tant que développeur, vous pouvez configurer votre compilation pour qu'elle s'exécute automatiquement chaque fois qu'une image de base est modifiée.
Vous pouvez utiliser des déclencheurs de changement d'image pour lancer automatiquement votre compilation lorsqu'une nouvelle version d'une image en amont est disponible. Par exemple, si une compilation est basée sur une image RHEL, vous pouvez déclencher l'exécution de cette compilation chaque fois que l'image RHEL change. Ainsi, l'image de l'application s'exécute toujours sur la dernière image de base RHEL.
Les flux d'images qui pointent vers des images de conteneurs dans les registres de conteneurs v1 ne déclenchent une compilation qu'une seule fois, lorsque la balise du flux d'images devient disponible, et non lors des mises à jour ultérieures de l'image. Cela est dû à l'absence d'images identifiables de manière unique dans les registres de conteneurs v1.
Procédure
Définissez une adresse
ImageStream
qui pointe vers l'image en amont que vous souhaitez utiliser comme déclencheur :kind: "ImageStream" apiVersion: "v1" metadata: name: "ruby-20-centos7"
Cela définit le flux d'images lié à un référentiel d'images de conteneurs situé à l'adresse
<system-registry>/<namespace>/ruby-20-centos7
. Le site<system-registry>
est défini comme un service portant le nomdocker-registry
et fonctionnant dans OpenShift Container Platform.Si un flux d'images est l'image de base pour la compilation, définissez le champ
from
dans la stratégie de compilation pour qu'il pointe vers l'imageImageStream
:strategy: sourceStrategy: from: kind: "ImageStreamTag" name: "ruby-20-centos7:latest"
Dans ce cas, la définition
sourceStrategy
consomme la baliselatest
du flux d'images nomméruby-20-centos7
situé dans cet espace de noms.Définir une construction avec un ou plusieurs déclencheurs qui pointent vers
ImageStreams
:type: "ImageChange" 1 imageChange: {} type: "ImageChange" 2 imageChange: from: kind: "ImageStreamTag" name: "custom-image:latest"
- 1
- Un déclencheur de changement d'image qui surveille les objets
ImageStream
etTag
tels que définis par le champfrom
de la stratégie de construction. L'objetimageChange
doit être vide. - 2
- Un déclencheur de changement d'image qui surveille un flux d'images arbitraire. La partie
imageChange
, dans ce cas, doit inclure un champfrom
qui fait référence auImageStreamTag
à surveiller.
Lors de l'utilisation d'un déclencheur de changement d'image pour le flux d'image de la stratégie, le build généré est fourni avec un tag docker immuable qui pointe vers la dernière image correspondant à ce tag. Cette nouvelle référence d'image est utilisée par la stratégie lorsqu'elle s'exécute pour la construction.
Pour les autres déclencheurs de changement d'image qui ne font pas référence au flux d'images de la stratégie, une nouvelle construction est lancée, mais la stratégie de construction n'est pas mise à jour avec une référence d'image unique.
Comme cet exemple comporte un déclencheur de changement d'image pour la stratégie, la compilation résultante est la suivante :
strategy: sourceStrategy: from: kind: "DockerImage" name: "172.30.17.3:5001/mynamespace/ruby-20-centos7:<immutableid>"
Cela garantit que la construction déclenchée utilise la nouvelle image qui vient d'être poussée dans le dépôt, et que la construction peut être relancée à tout moment avec les mêmes données.
Vous pouvez mettre en pause un déclencheur de changement d'image pour permettre plusieurs changements sur le flux d'images référencé avant qu'une compilation ne soit lancée. Vous pouvez également attribuer la valeur true à l'attribut paused
lors de l'ajout initial d'un ImageChangeTrigger
à un BuildConfig
afin d'empêcher le déclenchement immédiat d'une compilation.
type: "ImageChange" imageChange: from: kind: "ImageStreamTag" name: "custom-image:latest" paused: true
En plus de définir le champ image pour tous les types Strategy
, pour les constructions personnalisées, la variable d'environnement OPENSHIFT_CUSTOM_BUILD_BASE_IMAGE
est vérifiée. Si elle n'existe pas, elle est créée avec la référence d'image immuable. Si elle existe, elle est mise à jour avec la référence d'image immuable.
Si une compilation est déclenchée par un webhook ou une demande manuelle, la compilation créée utilise le <immutableid>
résolu à partir du ImageStream
référencé par le Strategy
. Cela garantit que les compilations sont effectuées en utilisant des balises d'image cohérentes pour faciliter la reproduction.
Ressources complémentaires
2.8.1.3. Identifier l'élément déclencheur d'un changement d'image lors d'une construction
En tant que développeur, si vous avez des déclencheurs de changement d'image, vous pouvez identifier le changement d'image qui a déclenché la dernière compilation. Cela peut s'avérer utile pour le débogage ou le dépannage des constructions.
Exemple BuildConfig
apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: bc-ict-example namespace: bc-ict-example-namespace spec: # ... triggers: - imageChange: from: kind: ImageStreamTag name: input:latest namespace: bc-ict-example-namespace - imageChange: from: kind: ImageStreamTag name: input2:latest namespace: bc-ict-example-namespace type: ImageChange status: imageChangeTriggers: - from: name: input:latest namespace: bc-ict-example-namespace lastTriggerTime: "2021-06-30T13:47:53Z" lastTriggeredImageID: image-registry.openshift-image-registry.svc:5000/bc-ict-example-namespace/input@sha256:0f88ffbeb9d25525720bfa3524cb1bf0908b7f791057cf1acfae917b11266a69 - from: name: input2:latest namespace: bc-ict-example-namespace lastTriggeredImageID: image-registry.openshift-image-registry.svc:5000/bc-ict-example-namespace/input2@sha256:0f88ffbeb9d25525720bfa3524cb2ce0908b7f791057cf1acfae917b11266a69 lastVersion: 1
Cet exemple omet les éléments qui ne sont pas liés aux déclencheurs de changement d'image.
Conditions préalables
- Vous avez configuré plusieurs déclencheurs de changement d'image. Ces déclencheurs ont déclenché une ou plusieurs constructions.
Procédure
Dans
buildConfig.status.imageChangeTriggers
pour identifier le sitelastTriggerTime
qui a l'horodatage le plus récent.Le présent
ImageChangeTriggerStatus
Ensuite, vous utilisez le `name` et le `namespace` de cette compilation pour trouver le trigger de changement d'image correspondant dans `buildConfig.spec.triggers`.
-
Sous
imageChangeTriggers
, comparez les horodatages pour identifier le dernier
Déclencheurs de changement d'image
Dans votre configuration de construction, buildConfig.spec.triggers
est un tableau de politiques de déclenchement de construction, BuildTriggerPolicy
.
Chaque site BuildTriggerPolicy
possède un champ type
et un ensemble de champs pointeurs. Chaque champ pointeur correspond à l'une des valeurs autorisées pour le champ type
. Ainsi, vous ne pouvez attribuer à BuildTriggerPolicy
qu'un seul champ de pointeurs.
Pour les déclencheurs de changement d'image, la valeur de type
est ImageChange
. Ensuite, le champ imageChange
est le pointeur vers un objet ImageChangeTrigger
, qui possède les champs suivants :
-
lastTriggeredImageID
: Ce champ, qui n'apparaît pas dans l'exemple, est obsolète dans OpenShift Container Platform 4.8 et sera ignoré dans une prochaine version. Il contient la référence de l'image résolue pour leImageStreamTag
lorsque le dernier build a été déclenché à partir de ceBuildConfig
. -
paused
: Vous pouvez utiliser ce champ, qui n'apparaît pas dans l'exemple, pour désactiver temporairement ce déclencheur de changement d'image particulier. -
from
: Ce champ permet de référencer le siteImageStreamTag
qui pilote ce déclencheur de changement d'image. Son type est le type de base de Kubernetes,OwnerReference
.
The from
field has the following fields of note: kind
: For image change triggers, the only supported value is ImageStreamTag
. namespace
: You use this field to specify the namespace of the ImageStreamTag
. ** name
: You use this field to specify the ImageStreamTag
.
Statut du déclencheur de changement d'image
Dans votre configuration de construction, buildConfig.status.imageChangeTriggers
est un tableau d'éléments ImageChangeTriggerStatus
. Chaque élément ImageChangeTriggerStatus
comprend les éléments from
, lastTriggeredImageID
et lastTriggerTime
présentés dans l'exemple précédent.
Le site ImageChangeTriggerStatus
qui contient la version la plus récente de lastTriggerTime
a déclenché la version la plus récente. Vous utilisez ses name
et namespace
pour identifier le déclencheur de changement d'image dans buildConfig.spec.triggers
qui a déclenché la compilation.
Le site lastTriggerTime
dont l'horodatage est le plus récent correspond au site ImageChangeTriggerStatus
de la dernière version. Ce ImageChangeTriggerStatus
a les mêmes name
et namespace
que le déclencheur de changement d'image dans buildConfig.spec.triggers
qui a déclenché la construction.
Ressources complémentaires
2.8.1.4. Déclencheurs de changement de configuration
Un déclencheur de changement de configuration permet de lancer automatiquement une compilation dès qu'un nouveau site BuildConfig
est créé.
Voici un exemple de définition de déclencheur YAML dans la base de données BuildConfig
:
type: "ConfigChange"
Les déclencheurs de changement de configuration ne fonctionnent actuellement que lors de la création d'un nouveau site BuildConfig
. Dans une prochaine version, les déclencheurs de changement de configuration pourront également lancer une construction à chaque fois qu'un site BuildConfig
sera mis à jour.
2.8.1.4.1. Réglage manuel des déclencheurs
Les déclencheurs peuvent être ajoutés et supprimés des configurations de construction à l'aide de oc set triggers
.
Procédure
Pour définir un déclencheur GitHub webhook sur une configuration de construction, utilisez :
$ oc set triggers bc <name> --from-github
Pour définir un déclencheur de changement d'image, utilisez :
$ oc set triggers bc <name> --from-image='<image>'
Pour supprimer un déclencheur, ajoutez
--remove
:$ oc set triggers bc <name> --from-bitbucket --remove
Lorsqu'un déclencheur de webhook existe déjà, le fait de l'ajouter à nouveau régénère le secret du webhook.
Pour plus d'informations, consultez la documentation d'aide avec en exécutant :
$ oc set triggers --help
2.8.2. Construire des crochets
Les crochets de construction permettent d'injecter un comportement dans le processus de construction.
Le champ postCommit
d'un objet BuildConfig
exécute des commandes à l'intérieur d'un conteneur temporaire qui exécute l'image de sortie de la compilation. Le hook est exécuté immédiatement après que la dernière couche de l'image a été validée et avant que l'image ne soit poussée vers un registre.
Le répertoire de travail actuel est défini comme étant le répertoire de l'image WORKDIR
, qui est le répertoire de travail par défaut de l'image du conteneur. Pour la plupart des images, c'est là que se trouve le code source.
Le hook échoue si le script ou la commande renvoie un code de sortie non nul ou si le démarrage du conteneur temporaire échoue. Lorsque le hook échoue, il marque la compilation comme ayant échoué et l'image n'est pas poussée vers un registre. La raison de l'échec peut être vérifiée en consultant les journaux de construction.
Les crochets de construction peuvent être utilisés pour exécuter des tests unitaires afin de vérifier l'image avant que la construction ne soit considérée comme terminée et que l'image ne soit mise à disposition dans un registre. Si tous les tests réussissent et que le programme d'exécution des tests renvoie le code de sortie 0
, la compilation est considérée comme réussie. En cas d'échec d'un test, la compilation est considérée comme un échec. Dans tous les cas, le journal de construction contient la sortie du programme d'essai, qui peut être utilisée pour identifier les tests qui ont échoué.
Le hook postCommit
n'est pas seulement limité à l'exécution de tests, mais peut également être utilisé pour d'autres commandes. Comme il s'exécute dans un conteneur temporaire, les modifications apportées par le crochet ne persistent pas, ce qui signifie que l'exécution du crochet ne peut pas affecter l'image finale. Ce comportement permet, entre autres, l'installation et l'utilisation de dépendances de test qui sont automatiquement supprimées et ne sont pas présentes dans l'image finale.
2.8.2.1. Configurer les crochets de compilation après livraison
Il existe différentes façons de configurer le crochet de post-construction. Tous les formulaires des exemples suivants sont équivalents et s'exécutent à l'adresse bundle exec rake test --verbose
.
Procédure
Script shell :
postCommit: script: "bundle exec rake test --verbose"
La valeur
script
est un script shell à exécuter avec/bin/sh -ic
. Utilisez cette valeur lorsqu'un script shell est approprié pour exécuter le crochet de compilation. Par exemple, pour exécuter des tests unitaires comme ci-dessus. Pour contrôler le point d'entrée de l'image, ou si l'image n'a pas/bin/sh
, utilisezcommand
et/ouargs
.NoteLe drapeau supplémentaire
-i
a été introduit pour améliorer l'expérience de travail avec les images CentOS et RHEL, et pourrait être supprimé dans une prochaine version.Comme point d'entrée de l'image :
postCommit: command: ["/bin/bash", "-c", "bundle exec rake test --verbose"]
Dans cette forme,
command
est la commande à exécuter, qui remplace le point d'entrée de l'image dans la forme exec, comme documenté dans la référence Dockerfile. Ceci est nécessaire si l'image n'a pas/bin/sh
, ou si vous ne voulez pas utiliser un shell. Dans tous les autres cas, l'utilisation descript
peut être plus pratique.Commande avec arguments :
postCommit: command: ["bundle", "exec", "rake", "test"] args: ["--verbose"]
Cette forme est équivalente à l'ajout des arguments à
command
.
Fournir simultanément script
et command
crée un crochet de construction invalide.
2.8.2.2. Utiliser l'interface de commande pour définir les crochets de compilation après livraison
La commande oc set build-hook
peut être utilisée pour définir le crochet de compilation pour une configuration de compilation.
Procédure
Pour définir une commande comme crochet de construction post-commit :
$ oc set build-hook bc/mybc \ --post-commit \ --command \ -- bundle exec rake test --verbose
Pour définir un script comme crochet de compilation post-commit :
$ oc set build-hook bc/mybc --post-commit --script="bundle exec rake test --verbose"