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é.

Note

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"
Note

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

  1. Pour configurer un GitHub Webhook :

    1. 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

    2. Copiez et collez cette URL dans GitHub, à partir de la console web de GitHub.
    3. Dans votre dépôt GitHub, sélectionnez Add Webhook à partir de Settings → Webhooks.
    4. Collez l'URL dans le champ Payload URL.
    5. Changez le Content Type de la valeur par défaut de GitHub application/x-www-form-urlencoded à application/json.
    6. 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.

      Note

      Gogs 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.

  2. Avec un fichier contenant une charge utile JSON valide, tel que payload.json, vous pouvez déclencher manuellement le webhook avec curl:

    $ 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

  1. Pour configurer un GitLab Webhook :

    1. Décrire le site BuildConfig pour obtenir l'URL du webhook :

      $ oc describe bc <name>
    2. Copiez l'URL du webhook en remplaçant <secret> par votre valeur secrète.
    3. Suivez les instructions d'installation de GitLab pour coller l'URL du webhook dans les paramètres de votre dépôt GitLab.
  2. Avec un fichier contenant une charge utile JSON valide, tel que payload.json, vous pouvez déclencher manuellement le webhook avec curl:

    $ 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

  1. Pour configurer un Webhook Bitbucket :

    1. Décrivez le "BuildConfig" pour obtenir l'URL du webhook :

      $ oc describe bc <name>
    2. Copiez l'URL du webhook en remplaçant <secret> par votre valeur secrète.
    3. Suivez les instructions de configuration de Bitbucket pour coller l'URL du webhook dans les paramètres de votre référentiel Bitbucket.
  2. Avec un fichier contenant une charge utile JSON valide, tel que payload.json, vous pouvez déclencher manuellement le webhook avec curl:

    $ 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

  1. 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.

  2. 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 de BuildConfig, ces dernières sont prioritaires. Par défaut, les variables d'environnement transmises par webhook sont ignorées. Définissez le champ allowEnv à true dans la définition du webhook pour activer ce comportement.
  3. 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ête Content-Type en application/yaml ou application/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ête POST.

Note

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.

Note

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

  1. 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 nom docker-registry et fonctionnant dans OpenShift Container Platform.

  2. 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'image ImageStream:

    strategy:
      sourceStrategy:
        from:
          kind: "ImageStreamTag"
          name: "ruby-20-centos7:latest"

    Dans ce cas, la définition sourceStrategy consomme la balise latest du flux d'images nommé ruby-20-centos7 situé dans cet espace de noms.

  3. 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 et Tag tels que définis par le champ from de la stratégie de construction. L'objet imageChange 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 champ from qui fait référence au ImageStreamTag à 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

Note

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

  1. Dans buildConfig.status.imageChangeTriggers pour identifier le site lastTriggerTime 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`.
  2. 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 le ImageStreamTag lorsque le dernier build a été déclenché à partir de ce BuildConfig.
  • 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 site ImageStreamTag 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"
Note

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
Note

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, utilisez command et/ou args.

    Note

    Le 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 de script peut être plus pratique.

  • Commande avec arguments :

    postCommit:
      command: ["bundle", "exec", "rake", "test"]
      args: ["--verbose"]

    Cette forme est équivalente à l'ajout des arguments à command.

Note

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

  1. 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
  2. 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"