3.8. Utiliser les pipelines comme du code

Avec Pipelines as Code, les administrateurs de clusters et les utilisateurs disposant des privilèges requis peuvent définir des modèles de pipelines dans le cadre de dépôts Git de code source. Lorsqu'elle est déclenchée par un push de code source ou une pull request pour le dépôt Git configuré, la fonctionnalité exécute le pipeline et signale son état.

3.8.1. Caractéristiques principales

Pipelines as Code prend en charge les fonctionnalités suivantes :

  • Statut et contrôle des pull requests sur la plateforme hébergeant le dépôt Git.
  • API GitHub Checks pour définir le statut d'une exécution de pipeline, y compris les rechecks.
  • Événements GitHub relatifs aux demandes d'extraction et aux livraisons.
  • Actions de demande d'extraction dans les commentaires, telles que /retest.
  • Filtrage des événements Git et pipeline séparé pour chaque événement.
  • Résolution automatique des tâches dans OpenShift Pipelines, y compris les tâches locales, Tekton Hub et les URL distantes.
  • Récupération des configurations à l'aide de l'API GitHub blobs et objets.
  • Liste de contrôle d'accès (ACL) sur une organisation GitHub, ou en utilisant un fichier de type Prow OWNER.
  • Le plugin tkn pac CLI pour gérer le bootstrapping et les pipelines en tant que dépôts de code.
  • Prise en charge de GitHub App, GitHub Webhook, Bitbucket Server et Bitbucket Cloud.

3.8.2. Installation de Pipelines as Code sur une plateforme de conteneurs OpenShift

Pipelines as Code est installé dans l'espace de noms openshift-pipelines lorsque vous installez l'opérateur Red Hat OpenShift Pipelines. Pour plus de détails, voir Installing OpenShift Pipelines dans la section Additional resources.

Pour désactiver l'installation par défaut des pipelines en tant que code avec l'opérateur, définissez la valeur du paramètre enable sur false dans la ressource personnalisée TektonConfig.

...
 spec:
    platforms:
      openshift:
        pipelinesAsCode:
          enable: false
          settings:
            application-name: Pipelines as Code CI
            auto-configure-new-github-repo: "false"
            bitbucket-cloud-check-source-ip: "true"
            hub-catalog-name: tekton
            hub-url: https://api.hub.tekton.dev/v1
            remote-tasks: "true"
            secret-auto-create: "true"
...

En option, vous pouvez exécuter la commande suivante :

$ oc patch tektonconfig config --type="merge" -p '{"spec": {"platforms": {"openshift":{"pipelinesAsCode": {"enable": false}}}}}'

Pour activer l'installation par défaut de Pipelines as Code avec Red Hat OpenShift Pipelines Operator, définissez la valeur du paramètre enable sur true dans la ressource personnalisée TektonConfig:

...
 spec:
    platforms:
      openshift:
        pipelinesAsCode:
          enable: true
          settings:
            application-name: Pipelines as Code CI
            auto-configure-new-github-repo: "false"
            bitbucket-cloud-check-source-ip: "true"
            hub-catalog-name: tekton
            hub-url: https://api.hub.tekton.dev/v1
            remote-tasks: "true"
            secret-auto-create: "true"
...

En option, vous pouvez exécuter la commande suivante :

$ oc patch tektonconfig config --type="merge" -p '{"spec": {"platforms": {"openshift":{"pipelinesAsCode": {"enable": true}}}}}'

3.8.3. Installation de Pipelines as Code CLI

Les administrateurs de clusters peuvent utiliser les outils CLI tkn pac et opc sur des machines locales ou en tant que conteneurs pour les tests. Les outils tkn pac et opc CLI sont installés automatiquement lorsque vous installez tkn CLI pour Red Hat OpenShift Pipelines.

Vous pouvez installer les binaires tkn pac et opc version 1.10.0 pour les plateformes supportées :

3.8.4. Utiliser Pipelines as Code avec un hébergeur de dépôts Git

Après avoir installé Pipelines as Code, les administrateurs de clusters peuvent configurer un fournisseur de services d'hébergement de dépôts Git. Actuellement, les services suivants sont pris en charge :

  • Application GitHub
  • GitHub Webhook
  • GitLab
  • Serveur Bitbucket
  • Bitbucket Cloud
Note

GitHub App est le service recommandé pour l'utilisation de Pipelines as Code.

3.8.5. Utiliser les pipelines comme du code avec une application GitHub

Les GitHub Apps agissent comme un point d'intégration avec Red Hat OpenShift Pipelines et apportent l'avantage des flux de travail basés sur Git à OpenShift Pipelines. Les administrateurs de cluster peuvent configurer une seule application GitHub pour tous les utilisateurs du cluster. Pour que les applications GitHub fonctionnent avec Pipelines as Code, assurez-vous que le webhook de l'application GitHub pointe vers la route d'écoute d'événements de Pipelines as Code (ou le point d'arrivée) qui écoute les événements GitHub.

3.8.5.1. Configuration d'une application GitHub

Les administrateurs de cluster peuvent créer une application GitHub en exécutant la commande suivante :

$ tkn pac bootstrap github-app

Si le plugin tkn pac CLI n'est pas installé, vous pouvez créer l'application GitHub manuellement.

Procédure

Pour créer et configurer manuellement une application GitHub pour Pipelines as Code, procédez comme suit :

  1. Connectez-vous à votre compte GitHub.
  2. Allez sur SettingsDeveloper settingsGitHub Apps, et cliquez sur New GitHub App.
  3. Fournissez les informations suivantes dans le formulaire de l'application GitHub :

    • GitHub Application Name: OpenShift Pipelines
    • Homepage URL: URL de la console OpenShift
    • Webhook URL: La route ou l'URL d'entrée de Pipelines as Code. Vous pouvez la trouver en exécutant la commande echo https://$(oc get route -n openshift-pipelines pipelines-as-code-controller -o jsonpath='{.spec.host}').
    • Webhook secret: Un secret arbitraire. Vous pouvez générer un secret en exécutant la commande openssl rand -hex 20.
  4. Sélectionnez le site suivant : Repository permissions:

    • Checks: Read & Write
    • Contents: Read & Write
    • Issues: Read & Write
    • Metadata: Read-only
    • Pull request: Read & Write
  5. Sélectionnez le site suivant : Organization permissions:

    • Members: Readonly
    • Plan: Readonly
  6. Sélectionnez le site suivant : User permissions:

    • Check run
    • Issue comment
    • Pull request
    • Push
  7. Cliquez sur Create GitHub App.
  8. Sur la page Details de l'application GitHub nouvellement créée, notez l'adresse App ID affichée en haut.
  9. Dans la section Private keys, cliquez sur Generate Private key pour générer et télécharger automatiquement une clé privée pour l'application GitHub. Conservez la clé privée en toute sécurité afin de pouvoir la consulter et l'utiliser ultérieurement.
  10. Installez l'application créée sur un référentiel que vous souhaitez utiliser avec Pipelines as Code.

3.8.5.2. Configurer Pipelines as Code pour accéder à une application GitHub

Pour configurer Pipelines as Code afin d'accéder à l'application GitHub nouvellement créée, exécutez la commande suivante :

$ oc -n openshift-pipelines create secret generic pipelines-as-code-secret \
        --from-literal github-private-key="$(cat <PATH_PRIVATE_KEY>)" \ 1
        --from-literal github-application-id="<APP_ID>" \ 2
        --from-literal webhook.secret="<WEBHOOK_SECRET>" 3
1
Le chemin d'accès à la clé privée que vous avez téléchargée lors de la configuration de l'application GitHub.
2
Le site App ID de l'application GitHub.
3
Le secret du webhook fourni lors de la création de l'application GitHub.
Note

Pipelines as Code fonctionne automatiquement avec GitHub Enterprise en détectant le jeu d'en-têtes de GitHub Enterprise et en l'utilisant pour l'URL d'autorisation de l'API de GitHub Enterprise.

3.8.5.3. Créer une application GitHub dans une perspective d'administrateur

En tant qu'administrateur de cluster, vous pouvez configurer votre application GitHub avec le cluster OpenShift Container Platform pour utiliser Pipelines as Code. Cette configuration vous permet d'exécuter un ensemble de tâches nécessaires au déploiement de la construction.

Conditions préalables

Vous avez installé l'opérateur Red Hat OpenShift Pipelines pipelines-1.9 à partir du Operator Hub.

Procédure

  1. Dans la perspective de l'administrateur, accédez à Pipelines à l'aide du volet de navigation.
  2. Cliquez sur Setup GitHub App sur la page Pipelines.
  3. Saisissez le nom de votre application GitHub. Par exemple, pipelines-ci-clustername-testui.
  4. Cliquez sur Setup.
  5. Saisissez votre mot de passe Git lorsque le navigateur vous le demande.
  6. Cliquez sur Create GitHub App for <username>, où <username> est votre nom d'utilisateur GitHub.

Vérification

Après la création réussie de l'application GitHub, la console web d'OpenShift Container Platform s'ouvre et affiche les détails de l'application.

Github app details

Les détails de l'application GitHub sont enregistrés en tant que secret dans l'espace de noms openShift-pipelines.

Pour afficher les détails tels que le nom, le lien et le secret associés aux applications GitHub, naviguez jusqu'à Pipelines et cliquez sur View GitHub App.

3.8.6. Utiliser les pipelines comme du code avec GitHub Webhook

Utilisez Pipelines as Code avec GitHub Webhook sur votre dépôt si vous ne pouvez pas créer une application GitHub. Cependant, l'utilisation de Pipelines as Code avec GitHub Webhook ne vous donne pas accès à l'API GitHub Check Runs. Le statut des tâches est ajouté en tant que commentaires sur la demande d'extraction et n'est pas disponible sous l'onglet Checks.

Note

Pipelines as Code avec GitHub Webhook ne prend pas en charge les commentaires GitOps tels que /retest et /ok-to-test. Pour redémarrer l'intégration continue (CI), créez un nouveau commit dans le dépôt. Par exemple, pour créer un nouveau commit sans aucune modification, vous pouvez utiliser la commande suivante :

git --amend -a --no-edit && git push --force-with-lease <origin> <branchname>

Conditions préalables

  • Assurez-vous que Pipelines as Code est installé sur le cluster.
  • Pour l'autorisation, créez un jeton d'accès personnel sur GitHub.

    • Pour générer un jeton sécurisé et précis, limitez son champ d'application à un référentiel spécifique et accordez les autorisations suivantes :

      Tableau 3.7. Permissions pour les jetons à granularité fine

      NomAccès

      Administration

      Lecture seule

      Métadonnées

      Lecture seule

      Contenu

      Lecture seule

      Statuts d'engagement

      Lire et écrire

      Demande de retrait

      Lire et écrire

      Crochets Web

      Lire et écrire

    • Pour utiliser des jetons classiques, définissez la portée comme public_repo pour les dépôts publics et repo pour les dépôts privés. En outre, prévoyez une courte période d'expiration du jeton et notez le jeton dans un autre emplacement.

      Note

      Si vous souhaitez configurer le webhook à l'aide du CLI tkn pac, ajoutez la portée admin:repo_hook.

Procédure

  1. Configurez le webhook et créez une ressource personnalisée (CR) Repository.

    • Pour configurer un webhook et créer un CR Repository automatically à l'aide de l'outil CLI tkn pac, utilisez la commande suivante :

      $ tkn pac create repo

      Exemple de sortie interactive

      ? Enter the Git repository url (default: https://github.com/owner/repo):
      ? Please enter the namespace where the pipeline should run (default: repo-pipelines):
      ! Namespace repo-pipelines is not found
      ? Would you like me to create the namespace repo-pipelines? Yes
      ✓ Repository owner-repo has been created in repo-pipelines namespace
      ✓ Setting up GitHub Webhook for Repository https://github.com/owner/repo
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ? Please enter the secret to configure the webhook for payload validation (default: sJNwdmTifHTs):  sJNwdmTifHTs
      ℹ ️You now need to create a GitHub personal access token, please checkout the docs at https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token for the required scopes
      ? Please enter the GitHub access token:  ****************************************
      ✓ Webhook has been created on repository owner/repo
      🔑 Webhook Secret owner-repo has been created in the repo-pipelines namespace.
      🔑 Repository CR owner-repo has been updated with webhook secret in the repo-pipelines namespace
      ℹ Directory .tekton has been created.
      ✓ We have detected your repository using the programming language Go.
      ✓ A basic template has been created in /home/Go/src/github.com/owner/repo/.tekton/pipelinerun.yaml, feel free to customize it.

    • Pour configurer un webhook et créer un Repository CR manually, procédez comme suit :

      1. Sur votre cluster OpenShift, extrayez l'URL publique du contrôleur Pipelines as Code.

        $ echo https://$(oc get route -n pipelines-as-code pipelines-as-code-controller -o jsonpath='{.spec.host}')
      2. Sur votre dépôt ou organisation GitHub, effectuez les étapes suivantes :

        1. Allez sur Settings -> Webhooks et cliquez sur Add webhook.
        2. Définissez l'adresse Payload URL sur l'URL publique du contrôleur Pipelines as Code.
        3. Sélectionnez le type de contenu application/json.
        4. Ajoutez un secret pour le webhook et notez-le dans un autre emplacement. Avec openssl installé sur votre machine locale, générez un secret aléatoire.

          $ openssl rand -hex 20
        5. Cliquez sur Let me select individual events et sélectionnez les événements suivants : Commit comments, Issue comments, Pull request, et Pushes.
        6. Cliquez sur Add webhook.
      3. Sur votre cluster OpenShift, créez un objet Secret avec le jeton d'accès personnel et le secret du webhook.

        $ oc -n target-namespace create secret generic github-webhook-config \
          --from-literal provider.token="<GITHUB_PERSONAL_ACCESS_TOKEN>" \
          --from-literal webhook.secret="<WEBHOOK_SECRET>"
      4. Créer un CR Repository.

        Exemple : Repository CR

        apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
        kind: Repository
        metadata:
          name: my-repo
          namespace: target-namespace
        spec:
          url: "https://github.com/owner/repo"
          git_provider:
            secret:
              name: "github-webhook-config"
              key: "provider.token" # Set this if you have a different key in your secret
            webhook_secret:
              name: "github-webhook-config"
              key: "webhook.secret" # Set this if you have a different key for your secret

        Note

        Pipelines as Code suppose que l'objet OpenShift Secret et le CR Repository sont dans le même espace de noms.

  2. Facultatif : Pour un CR Repository existant, ajoutez plusieurs secrets GitHub Webhook ou fournissez un substitut pour un secret supprimé.

    1. Ajoutez un webhook à l'aide de l'outil CLI tkn pac.

      Exemple : Webhook supplémentaire à l'aide de la CLI de tkn pac

      $ tkn pac webhook add -n repo-pipelines

      Exemple de sortie interactive

      ✓ Setting up GitHub Webhook for Repository https://github.com/owner/repo
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ? Please enter the secret to configure the webhook for payload validation (default: AeHdHTJVfAeH):  AeHdHTJVfAeH
      ✓ Webhook has been created on repository owner/repo
      🔑 Secret owner-repo has been updated with webhook secert in the repo-pipelines namespace.

    2. Mettre à jour la clé webhook.secret dans l'objet OpenShift Secret existant.
  3. Facultatif : Pour un CR Repository existant, mettez à jour le jeton d'accès personnel.

    • Mettez à jour le jeton d'accès personnel à l'aide de l'outil CLI tkn pac.

      Exemple : Mise à jour du jeton d'accès personnel à l'aide du CLI tkn pac

      $ tkn pac webhook update-token -n repo-pipelines

      Exemple de sortie interactive

      ? Please enter your personal access token:  ****************************************
      🔑 Secret owner-repo has been updated with new personal access token in the repo-pipelines namespace.

    • Vous pouvez également mettre à jour le jeton d'accès personnel en modifiant le CR Repository.

      1. Trouvez le nom du secret sur le site Repository CR.

        ...
        spec:
          git_provider:
            secret:
              name: "github-webhook-config"
        ...
      2. Utilisez la commande oc patch pour mettre à jour les valeurs de $NEW_TOKEN dans l'espace de noms $target_namespace.

        $ oc -n $target_namespace patch secret github-webhook-config -p "{\"data\": {\"provider.token\": \"$(echo -n $NEW_TOKEN|base64 -w0)\"}}"

3.8.7. Utiliser les pipelines comme du code avec GitLab

Si votre organisation ou votre projet utilise GitLab comme plateforme préférée, vous pouvez utiliser Pipelines as Code pour votre référentiel avec un webhook sur GitLab.

Conditions préalables

  • Assurez-vous que Pipelines as Code est installé sur le cluster.
  • Pour l'autorisation, générez un jeton d'accès personnel en tant que responsable du projet ou de l'organisation sur GitLab.

    Note
    • Si vous souhaitez configurer le webhook à l'aide du CLI tkn pac, ajoutez la portée admin:repo_hook au jeton.
    • L'utilisation d'un jeton pour un projet spécifique ne peut pas fournir un accès API à une demande de fusion (MR) envoyée à partir d'un dépôt forké. Dans de tels cas, Pipelines as Code affiche le résultat d'un pipeline en tant que commentaire sur la MR.

Procédure

  1. Configurez le webhook et créez une ressource personnalisée (CR) Repository.

    • Pour configurer un webhook et créer un CR Repository automatically à l'aide de l'outil CLI tkn pac, utilisez la commande suivante :

      $ tkn pac create repo

      Exemple de sortie interactive

      ? Enter the Git repository url (default: https://gitlab.com/owner/repo):
      ? Please enter the namespace where the pipeline should run (default: repo-pipelines):
      ! Namespace repo-pipelines is not found
      ? Would you like me to create the namespace repo-pipelines? Yes
      ✓ Repository repositories-project has been created in repo-pipelines namespace
      ✓ Setting up GitLab Webhook for Repository https://gitlab.com/owner/repo
      ? Please enter the project ID for the repository you want to be configured,
        project ID refers to an unique ID (e.g. 34405323) shown at the top of your GitLab project : 17103
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ? Please enter the secret to configure the webhook for payload validation (default: lFjHIEcaGFlF):  lFjHIEcaGFlF
      ℹ ️You now need to create a GitLab personal access token with `api` scope
      ℹ ️Go to this URL to generate one https://gitlab.com/-/profile/personal_access_tokens, see https://is.gd/rOEo9B for documentation
      ? Please enter the GitLab access token:  **************************
      ? Please enter your GitLab API URL::  https://gitlab.com
      ✓ Webhook has been created on your repository
      🔑 Webhook Secret repositories-project has been created in the repo-pipelines namespace.
      🔑 Repository CR repositories-project has been updated with webhook secret in the repo-pipelines namespace
      ℹ Directory .tekton has been created.
      ✓ A basic template has been created in /home/Go/src/gitlab.com/repositories/project/.tekton/pipelinerun.yaml, feel free to customize it.

    • Pour configurer un webhook et créer un Repository CR manually, procédez comme suit :

      1. Sur votre cluster OpenShift, extrayez l'URL publique du contrôleur Pipelines as Code.

        $ echo https://$(oc get route -n pipelines-as-code pipelines-as-code-controller -o jsonpath='{.spec.host}')
      2. Sur votre projet GitLab, effectuez les étapes suivantes :

        1. Utilisez la barre latérale gauche pour aller à Settings -> Webhooks.
        2. Définissez l'adresse URL sur l'URL publique du contrôleur Pipelines as Code.
        3. Ajoutez un secret pour le webhook et notez-le dans un autre emplacement. Avec openssl installé sur votre machine locale, générez un secret aléatoire.

          $ openssl rand -hex 20
        4. Cliquez sur Let me select individual events et sélectionnez les événements suivants : Commit comments, Issue comments, Pull request, et Pushes.
        5. Cliquez sur Save changes.
      3. Sur votre cluster OpenShift, créez un objet Secret avec le jeton d'accès personnel et le secret du webhook.

        $ oc -n target-namespace create secret generic gitlab-webhook-config \
          --from-literal provider.token="<GITLAB_PERSONAL_ACCESS_TOKEN>" \
          --from-literal webhook.secret="<WEBHOOK_SECRET>"
      4. Créer un CR Repository.

        Exemple : Repository CR

        apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
        kind: Repository
        metadata:
          name: my-repo
          namespace: target-namespace
        spec:
          url: "https://gitlab.com/owner/repo" 1
          git_provider:
            secret:
              name: "gitlab-webhook-config"
              key: "provider.token" # Set this if you have a different key in your secret
            webhook_secret:
              name: "gitlab-webhook-config"
              key: "webhook.secret" # Set this if you have a different key for your secret

        1
        Actuellement, Pipelines as Code ne détecte pas automatiquement les instances privées pour GitLab. Dans ce cas, spécifiez l'URL de l'API sous la spécification git_provider.url. En général, vous pouvez utiliser la spécification git_provider.url pour remplacer manuellement l'URL de l'API.
    Note
    • Pipelines as Code suppose que l'objet OpenShift Secret et le CR Repository sont dans le même espace de noms.
  2. Facultatif : Pour un CR Repository existant, ajoutez plusieurs secrets GitLab Webhook ou fournissez un substitut pour un secret supprimé.

    1. Ajoutez un webhook à l'aide de l'outil CLI tkn pac.

      Exemple : Ajout d'un webhook supplémentaire à l'aide du CLI tkn pac

      $ tkn pac webhook add -n repo-pipelines

      Exemple de sortie interactive

      ✓ Setting up GitLab Webhook for Repository https://gitlab.com/owner/repo
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ? Please enter the secret to configure the webhook for payload validation (default: AeHdHTJVfAeH):  AeHdHTJVfAeH
      ✓ Webhook has been created on repository owner/repo
      🔑 Secret owner-repo has been updated with webhook secert in the repo-pipelines namespace.

    2. Mettre à jour la clé webhook.secret dans l'objet OpenShift Secret existant.
  3. Facultatif : Pour un CR Repository existant, mettez à jour le jeton d'accès personnel.

    • Mettez à jour le jeton d'accès personnel à l'aide de l'outil CLI tkn pac.

      Exemple : Mise à jour du jeton d'accès personnel à l'aide du CLI tkn pac

      $ tkn pac webhook update-token -n repo-pipelines

      Exemple de sortie interactive

      ? Please enter your personal access token:  ****************************************
      🔑 Secret owner-repo has been updated with new personal access token in the repo-pipelines namespace.

    • Vous pouvez également mettre à jour le jeton d'accès personnel en modifiant le CR Repository.

      1. Trouvez le nom du secret sur le site Repository CR.

        ...
        spec:
          git_provider:
            secret:
              name: "gitlab-webhook-config"
        ...
      2. Utilisez la commande oc patch pour mettre à jour les valeurs de $NEW_TOKEN dans l'espace de noms $target_namespace.

        $ oc -n $target_namespace patch secret gitlab-webhook-config -p "{\"data\": {\"provider.token\": \"$(echo -n $NEW_TOKEN|base64 -w0)\"}}"

Ressources complémentaires

3.8.8. Utiliser les pipelines comme du code avec Bitbucket Cloud

Si votre organisation ou votre projet utilise Bitbucket Cloud comme plateforme préférée, vous pouvez utiliser Pipelines as Code pour votre référentiel avec un webhook sur Bitbucket Cloud.

Conditions préalables

  • Assurez-vous que Pipelines as Code est installé sur le cluster.
  • Créer un mot de passe pour l'application sur Bitbucket Cloud.

    • Cochez les cases suivantes pour ajouter les autorisations appropriées au jeton :

      • Compte : Email, Read
      • Adhésion à l'espace de travail : Read, Write
      • Projets : Read, Write
      • Questions : Read, Write
      • Demandes d'extension : Read, Write

        Note
        • Si vous souhaitez configurer le webhook à l'aide du CLI tkn pac, ajoutez les autorisations Webhooks: Read et Write au jeton.
        • Une fois généré, sauvegardez une copie du mot de passe ou du jeton dans un autre endroit.

Procédure

  1. Configurez le webhook et créez un CR Repository.

    • Pour configurer un webhook et créer un CR Repository automatically à l'aide de l'outil CLI tkn pac, utilisez la commande suivante :

      $ tkn pac create repo

      Exemple de sortie interactive

      ? Enter the Git repository url (default: https://bitbucket.org/workspace/repo):
      ? Please enter the namespace where the pipeline should run (default: repo-pipelines):
      ! Namespace repo-pipelines is not found
      ? Would you like me to create the namespace repo-pipelines? Yes
      ✓ Repository workspace-repo has been created in repo-pipelines namespace
      ✓ Setting up Bitbucket Webhook for Repository https://bitbucket.org/workspace/repo
      ? Please enter your bitbucket cloud username:  <username>
      ℹ ️You now need to create a Bitbucket Cloud app password, please checkout the docs at https://is.gd/fqMHiJ for the required permissions
      ? Please enter the Bitbucket Cloud app password:  ************************************
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ✓ Webhook has been created on repository workspace/repo
      🔑 Webhook Secret workspace-repo has been created in the repo-pipelines namespace.
      🔑 Repository CR workspace-repo has been updated with webhook secret in the repo-pipelines namespace
      ℹ Directory .tekton has been created.
      ✓ A basic template has been created in /home/Go/src/bitbucket/repo/.tekton/pipelinerun.yaml, feel free to customize it.

    • Pour configurer un webhook et créer un Repository CR manually, procédez comme suit :

      1. Sur votre cluster OpenShift, extrayez l'URL publique du contrôleur Pipelines as Code.

        $ echo https://$(oc get route -n pipelines-as-code pipelines-as-code-controller -o jsonpath='{.spec.host}')
      2. Sur Bitbucket Cloud, effectuez les étapes suivantes :

        1. Utilisez le volet de navigation gauche de votre référentiel Bitbucket Cloud pour aller sur Repository settings -> Webhooks et cliquez sur Add webhook.
        2. Définir un site Title. Par exemple, "Pipelines as Code".
        3. Définissez l'adresse URL sur l'URL publique du contrôleur Pipelines as Code.
        4. Sélectionnez ces événements : Repository: Push, Pull Request: Created, Pull Request: Updated, et Pull Request: Comment created.
        5. Cliquez sur Save.
      3. Sur votre cluster OpenShift, créez un objet Secret avec le mot de passe de l'application dans l'espace de noms cible.

        $ oc -n target-namespace create secret generic bitbucket-cloud-token \
          --from-literal provider.token="<BITBUCKET_APP_PASSWORD>"
      4. Créer un CR Repository.

        Exemple : Repository CR

        apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
        kind: Repository
        metadata:
          name: my-repo
          namespace: target-namespace
        spec:
          url: "https://bitbucket.com/workspace/repo"
          branch: "main"
          git_provider:
            user: "<BITBUCKET_USERNAME>" 1
            secret:
              name: "bitbucket-cloud-token" 2
              key: "provider.token" # Set this if you have a different key in your secret

        1
        Vous ne pouvez faire référence à un utilisateur que par l'adresse ACCOUNT_ID dans un fichier propriétaire.
        2
        Pipelines as Code suppose que le secret mentionné dans la spécification git_provider.secret et la CR Repository se trouve dans le même espace de noms.
    Note
    • Les commandes tkn pac create et tkn pac bootstrap ne sont pas prises en charge sur Bitbucket Cloud.
    • Bitbucket Cloud ne prend pas en charge les secrets des webhooks. Pour sécuriser la charge utile et empêcher le détournement de l'IC, Pipelines as Code récupère la liste des adresses IP de Bitbucket Cloud et s'assure que les réceptions de webhook proviennent uniquement de ces adresses IP.

      • Pour désactiver le comportement par défaut, définissez bitbucket-cloud-check-source-ip key comme false dans la carte de configuration de Pipelines as Code pour l'espace de noms pipelines-as-code.
      • Pour autoriser d'autres adresses IP ou réseaux sûrs, ajoutez-les sous forme de valeurs séparées par des virgules à la clé bitbucket-cloud-additional-source-ip dans la carte de configuration Pipelines as Code pour l'espace de noms pipelines-as-code.
  2. Facultatif : Pour un CR Repository existant, ajoutez plusieurs secrets Bitbucket Cloud Webhook ou fournissez un substitut pour un secret supprimé.

    1. Ajoutez un webhook à l'aide de l'outil CLI tkn pac.

      Exemple : Ajout d'un webhook supplémentaire à l'aide du CLI tkn pac

      $ tkn pac webhook add -n repo-pipelines

      Exemple de sortie interactive

      ✓ Setting up Bitbucket Webhook for Repository https://bitbucket.org/workspace/repo
      ? Please enter your bitbucket cloud username:  <username>
      👀 I have detected a controller url: https://pipelines-as-code-controller-openshift-pipelines.apps.example.com
      ? Do you want me to use it? Yes
      ✓ Webhook has been created on repository workspace/repo
      🔑 Secret workspace-repo has been updated with webhook secret in the repo-pipelines namespace.

      Note

      Utilisez l'option [-n <namespace>] avec la commande tkn pac webhook add uniquement lorsque le CR Repository existe dans un espace de noms autre que l'espace de noms par défaut.

    2. Mettre à jour la clé webhook.secret dans l'objet OpenShift Secret existant.
  3. Facultatif : Pour un CR Repository existant, mettez à jour le jeton d'accès personnel.

    • Mettez à jour le jeton d'accès personnel à l'aide de l'outil CLI tkn pac.

      Exemple : Mise à jour du jeton d'accès personnel à l'aide du CLI tkn pac

      $ tkn pac webhook update-token -n repo-pipelines

      Exemple de sortie interactive

      ? Please enter your personal access token:  ****************************************
      🔑 Secret owner-repo has been updated with new personal access token in the repo-pipelines namespace.

      Note

      Utilisez l'option [-n <namespace>] avec la commande tkn pac webhook update-token uniquement lorsque le CR Repository existe dans un espace de noms autre que l'espace de noms par défaut.

    • Vous pouvez également mettre à jour le jeton d'accès personnel en modifiant le CR Repository.

      1. Trouvez le nom du secret sur le site Repository CR.

        ...
        spec:
          git_provider:
            user: "<BITBUCKET_USERNAME>"
            secret:
              name: "bitbucket-cloud-token"
              key: "provider.token"
        ...
      2. Utilisez la commande oc patch pour mettre à jour les valeurs de $password dans l'espace de noms $target_namespace.

        $ oc -n $target_namespace patch secret bitbucket-cloud-token -p "{\"data\": {\"provider.token\": \"$(echo -n $NEW_TOKEN|base64 -w0)\"}}"

3.8.9. Utiliser les pipelines comme du code avec Bitbucket Server

Si votre organisation ou votre projet utilise Bitbucket Server comme plateforme préférée, vous pouvez utiliser Pipelines as Code pour votre référentiel avec un webhook sur Bitbucket Server.

Conditions préalables

  • Assurez-vous que Pipelines as Code est installé sur le cluster.
  • Générer un jeton d'accès personnel en tant que gestionnaire du projet sur le serveur Bitbucket, et enregistrer une copie de ce jeton dans un autre emplacement.

    Note
    • Le jeton doit avoir les autorisations PROJECT_ADMIN et REPOSITORY_ADMIN.
    • Le token doit avoir accès aux dépôts forkés dans les pull requests.

Procédure

  1. Sur votre cluster OpenShift, extrayez l'URL publique du contrôleur Pipelines as Code.

    $ echo https://$(oc get route -n pipelines-as-code pipelines-as-code-controller -o jsonpath='{.spec.host}')
  2. Sur le serveur Bitbucket, effectuez les étapes suivantes :

    1. Utilisez le volet de navigation gauche de votre référentiel Bitbucket Data Center pour aller sur Repository settings -> Webhooks et cliquez sur Add webhook.
    2. Définir un site Title. Par exemple, "Pipelines as Code".
    3. Définissez l'adresse URL sur l'URL publique du contrôleur Pipelines as Code.
    4. Ajoutez un secret pour le webhook et sauvegardez-en une copie dans un autre emplacement. Si openssl est installé sur votre machine locale, générez un secret aléatoire à l'aide de la commande suivante :

      $ openssl rand -hex 20
    5. Sélectionnez les événements suivants :

      • Repository: Push
      • Repository: Modified
      • Pull Request: Opened
      • Pull Request: Source branch updated
      • Pull Request: Comment added
    6. Cliquez sur Save.
  3. Sur votre cluster OpenShift, créez un objet Secret avec le mot de passe de l'application dans l'espace de noms cible.

    $ oc -n target-namespace create secret generic bitbucket-server-webhook-config \
      --from-literal provider.token="<PERSONAL_TOKEN>" \
      --from-literal webhook.secret="<WEBHOOK_SECRET>"
  4. Créer un CR Repository.

    Exemple : Repository CR

    ---
      apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
      kind: Repository
      metadata:
        name: my-repo
        namespace: target-namespace
      spec:
        url: "https://bitbucket.com/workspace/repo"
        git_provider:
          url: "https://bitbucket.server.api.url/rest" 1
          user: "<BITBUCKET_USERNAME>" 2
          secret: 3
            name: "bitbucket-server-webhook-config"
            key: "provider.token" # Set this if you have a different key in your secret
          webhook_secret:
            name: "bitbucket-server-webhook-config"
            key: "webhook.secret" # Set this if you have a different key for your secret

    1
    Assurez-vous que vous avez la bonne URL de l'API du serveur Bitbucket sans le suffixe /api/v1.0. En général, l'installation par défaut a un suffixe /rest.
    2
    Vous ne pouvez faire référence à un utilisateur que par l'adresse ACCOUNT_ID dans un fichier propriétaire.
    3
    Pipelines as Code suppose que le secret mentionné dans la spécification git_provider.secret et la CR Repository se trouve dans le même espace de noms.
    Note

    Les commandes tkn pac create et tkn pac bootstrap ne sont pas prises en charge par le serveur Bitbucket.

3.8.10. Interfacer Pipelines as Code avec des certificats personnalisés

Pour configurer Pipelines as Code avec un dépôt Git accessible avec un certificat personnalisé ou signé de manière privée, vous pouvez exposer le certificat à Pipelines as Code.

Procédure

  • Si vous avez installé Pipelines as Code à l'aide de l'Opérateur Red Hat OpenShift Pipelines, vous pouvez ajouter votre certificat personnalisé au cluster à l'aide de l'objet Proxy. L'Opérateur expose le certificat dans tous les composants et charges de travail de Red Hat OpenShift Pipelines, y compris Pipelines as Code.

3.8.11. Utilisation de Repository CRD avec Pipelines as Code

La ressource personnalisée (CR) Repository a les fonctions principales suivantes :

  • Informer Pipelines as Code sur le traitement d'un événement à partir d'une URL.
  • Informer Pipelines as Code de l'espace de noms pour l'exécution des pipelines.
  • Référence un secret d'API, un nom d'utilisateur ou une URL d'API nécessaire pour les plates-formes du fournisseur Git lors de l'utilisation des méthodes webhook.
  • Fournit le dernier état d'exécution du pipeline pour un référentiel.

Vous pouvez utiliser le CLI tkn pac ou d'autres méthodes alternatives pour créer un CR Repository dans l'espace de noms cible. Par exemple, vous pouvez créer un CR à l'intérieur de l'espace de noms cible :

cat <<EOF|kubectl create -n my-pipeline-ci -f- 1

apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
kind: Repository
metadata:
  name: project-repository
spec:
  url: "https://github.com/<repository>/<project>"
EOF
1
my-pipeline-ci est l'espace de noms cible.

Chaque fois qu'il y a un événement provenant de l'URL tel que https://github.com/<repository>/<project>pipelines as Code l'identifie et commence à vérifier le contenu du référentiel <repository>/<project> pour que l'exécution des pipelines corresponde au contenu du répertoire .tekton/.

Note
  • Vous devez créer le CRD Repository dans le même espace de noms que celui où les pipelines associés au référentiel de code source seront exécutés ; il ne peut pas cibler un espace de noms différent.
  • Si plusieurs CRD Repository correspondent au même événement, Pipelines as Code ne traitera que le plus ancien. Si vous avez besoin de faire correspondre un espace de noms spécifique, ajoutez l'annotation pipelinesascode.tekton.dev/target-namespace: "<mynamespace>". Ce ciblage explicite empêche un acteur malveillant d'exécuter un pipeline dans un espace de noms auquel il n'a pas accès.

3.8.11.1. Fixer des limites de concurrence dans le CRD Repository

Vous pouvez utiliser la spécification concurrency_limit dans le CRD Repository pour définir le nombre maximum d'exécutions simultanées du pipeline pour un référentiel.

...
spec:
  concurrency_limit: <number>
  ...

Si plusieurs séries de pipelines correspondent à un événement, les séries de pipelines qui correspondent à l'événement commencent dans l'ordre alphabétique.

Par exemple, si vous avez trois projets de pipeline dans le répertoire .tekton et que vous créez une demande d'extraction avec un concurrency_limit de 1 dans la configuration du référentiel, tous les projets de pipeline sont exécutés dans l'ordre alphabétique. À tout moment, un seul pipeline est en cours d'exécution, tandis que les autres sont en file d'attente.

3.8.12. Utiliser les pipelines comme résolveur de code

Le résolveur de Pipelines as Code permet de s'assurer qu'un pipeline en cours d'exécution n'entre pas en conflit avec d'autres.

Pour diviser votre pipeline et votre cycle de pipeline, stockez les fichiers dans le répertoire .tekton/ ou ses sous-répertoires.

Si Pipelines as Code observe une exécution de pipeline avec une référence à une tâche ou à un pipeline dans un fichier YAML situé dans le répertoire .tekton/, Pipelines as Code résout automatiquement la tâche référencée pour fournir une exécution de pipeline unique avec une spécification intégrée dans un objet PipelineRun.

Si Pipelines as Code ne peut pas résoudre les tâches référencées dans la définition Pipeline ou PipelineSpec, l'exécution échoue avant d'appliquer tout changement au cluster. Vous pouvez voir le problème sur votre plateforme Git et dans les événements de l'espace de noms cible où se trouve le CR Repository.

Le résolveur passe à la résolution s'il observe les types de tâches suivants :

  • Une référence à une tâche de cluster.
  • Une tâche ou un ensemble de tâches.
  • Une tâche personnalisée avec une version de l'API qui n'a pas de préfixe tekton.dev/.

Le résolveur utilise ces tâches littéralement, sans aucune transformation.

Pour tester votre pipeline en local avant de l'envoyer dans une pull request, utilisez la commande tkn pac resolve.

Vous pouvez également référencer des pipelines et des tâches à distance.

3.8.12.1. Utiliser les annotations de tâches à distance avec Pipelines as Code

Pipelines as Code prend en charge la récupération de tâches ou de pipelines distants en utilisant des annotations dans l'exécution d'un pipeline. Si vous faites référence à une tâche distante dans une exécution de pipeline, ou à un pipeline dans un objet PipelineRun ou PipelineSpec, le résolveur de Pipelines as Code l'inclut automatiquement. S'il y a une erreur lors de la récupération des tâches distantes ou de leur analyse, Pipelines as Code arrête le traitement des tâches.

Pour inclure des tâches à distance, reportez-vous aux exemples d'annotation suivants :

Référencement des tâches à distance dans Tekton Hub

  • Référencer une seule tâche à distance dans Tekton Hub.

    ...
      pipelinesascode.tekton.dev/task: "git-clone" 1
    ...
    1
    Pipelines as Code inclut la dernière version de la tâche du Tekton Hub.
  • Référencement de plusieurs tâches à distance à partir de Tekton Hub

    ...
      pipelinesascode.tekton.dev/task: "[git-clone, golang-test, tkn]"
    ...
  • Référencez plusieurs tâches à distance à partir du Tekton Hub en utilisant le suffixe -<NUMBER>.

    ...
      pipelinesascode.tekton.dev/task: "git-clone"
      pipelinesascode.tekton.dev/task-1: "golang-test"
      pipelinesascode.tekton.dev/task-2: "tkn" 1
    ...
    1
    Par défaut, Pipelines as Code interprète la chaîne comme la dernière tâche à récupérer dans le Tekton Hub.
  • Référence une version spécifique d'une tâche à distance à partir du Tekton Hub.

    ...
      pipelinesascode.tekton.dev/task: "[git-clone:0.1]" 1
    ...
    1
    Se réfère à la version 0.1 de la tâche à distance git-clone du Tekton Hub.

Tâches à distance à l'aide d'URL

...
  pipelinesascode.tekton.dev/task: "<https://remote.url/task.yaml>" 1
...

1
L'URL publique de la tâche distante.
Note
  • Si vous utilisez GitHub et que l'URL de la tâche distante utilise le même hôte que le CRD Repository, Pipelines as Code utilise le jeton GitHub et récupère l'URL à l'aide de l'API GitHub.

    Par exemple, si vous avez une URL de dépôt similaire à https://github.com/<organization>/<repository> et que l'URL HTTP distante fait référence à un blob GitHub similaire à https://github.com/<organization>/<repository>/blob/<mainbranch>/<path>/<file>pipelines as Code récupère les fichiers de définition de tâches de ce référentiel privé avec le jeton GitHub App.

    Lorsque vous travaillez sur un dépôt public GitHub, Pipelines as Code agit de la même manière pour une URL brute GitHub telle que https://raw.githubusercontent.com/<organization>/<repository>/<mainbranch>/<path>/<file>.

  • Les jetons GitHub App sont limités au propriétaire ou à l'organisation où se trouve le dépôt. Lorsque vous utilisez la méthode GitHub webhook, vous pouvez récupérer n'importe quel dépôt privé ou public dans n'importe quelle organisation où le jeton personnel est autorisé.

Référencer une tâche à partir d'un fichier YAML dans votre référentiel

...
pipelinesascode.tekton.dev/task: "<share/tasks/git-clone.yaml>" 1
...

1
Chemin relatif vers le fichier local contenant la définition de la tâche.

3.8.12.2. Utiliser des annotations de pipeline à distance avec Pipelines as Code

Vous pouvez partager une définition de pipeline entre plusieurs référentiels en utilisant l'annotation de pipeline distant.

...
    pipelinesascode.tekton.dev/pipeline: "<https://git.provider/raw/pipeline.yaml>" 1
...
1
À la définition du pipeline distant. Vous pouvez également fournir des emplacements pour des fichiers à l'intérieur du même référentiel.
Note

Vous ne pouvez faire référence qu'à une seule définition de pipeline à l'aide de l'annotation.

3.8.13. Création d'un pipeline à l'aide de Pipelines as Code

Pour exécuter des pipelines en utilisant Pipelines as Code, vous pouvez créer des définitions ou des modèles de pipelines sous forme de fichiers YAML dans le répertoire .tekton/ du référentiel. Vous pouvez référencer des fichiers YAML dans d'autres référentiels à l'aide d'URL distantes, mais l'exécution des pipelines n'est déclenchée que par des événements dans le référentiel contenant le répertoire .tekton/.

Le résolveur Pipelines as Code regroupe les exécutions de pipelines avec toutes les tâches en une seule exécution de pipeline sans dépendances externes.

Note
  • Pour les pipelines, utilisez au moins un pipeline exécuté avec une spécification ou un objet Pipeline séparé.
  • Pour les tâches, intégrer la spécification de la tâche dans un pipeline ou la définir séparément en tant qu'objet "tâche".

Paramétrer les commits et les URL

Vous pouvez spécifier les paramètres de votre livraison et de votre URL en utilisant des variables dynamiques et extensibles au format {{<var>}}. Actuellement, vous pouvez utiliser les variables suivantes :

  • {{repo_owner}}: Le propriétaire du référentiel.
  • {{repo_name}}: Le nom du référentiel.
  • {{repo_url}}: L'URL complète du dépôt.
  • {{revision}}: Révision SHA complète d'un commit.
  • {{sender}}: Le nom d'utilisateur ou l'identifiant du compte de l'expéditeur du commit.
  • {{source_branch}}: Le nom de la branche d'où provient l'événement.
  • {{target_branch}}: Le nom de la branche ciblée par l'événement. Pour les événements "push", c'est la même chose que source_branch.
  • {{pull_request_number}}: Le numéro de la demande de retrait ou de fusion, défini uniquement pour un type d'événement pull_request.
  • {{git_auth_secret}}: Le nom secret qui est généré automatiquement avec le jeton du fournisseur Git pour l'extraction des dépôts privés.

Correspondance entre un événement et une exécution de pipeline

Vous pouvez faire correspondre différents événements du fournisseur Git avec chaque pipeline en utilisant des annotations spéciales sur l'exécution du pipeline. S'il y a plusieurs pipelines correspondant à un événement, Pipelines as Code les exécute en parallèle et envoie les résultats au fournisseur Git dès qu'un pipeline se termine.

Correspondance entre un événement "pull" et une exécution de pipeline

Vous pouvez utiliser l'exemple suivant pour faire correspondre le pipeline pipeline-pr-main avec un événement pull_request qui cible la branche main:

...
  metadata:
    name: pipeline-pr-main
  annotations:
    pipelinesascode.tekton.dev/on-target-branch: "[main]" 1
    pipelinesascode.tekton.dev/on-event: "[pull_request]"
...
1
Vous pouvez spécifier plusieurs branches en ajoutant des entrées séparées par des virgules. Par exemple, "[main, release-nightly]". En outre, vous pouvez spécifier ce qui suit :
  • Références complètes à des branches telles que "refs/heads/main"
  • Globs avec pattern matching tels que "refs/heads/\*"
  • Tags tels que "refs/tags/1.\*"

Correspondance entre un événement "push" et une exécution du pipeline

Vous pouvez utiliser l'exemple suivant pour faire correspondre le pipeline pipeline-push-on-main avec un événement push ciblant la branche refs/heads/main:

...
  metadata:
    name: pipeline-push-on-main
  annotations:
    pipelinesascode.tekton.dev/on-target-branch: "[refs/heads/main]" 1
    pipelinesascode.tekton.dev/on-event: "[push]"
...
1
Vous pouvez spécifier plusieurs branches en ajoutant des entrées séparées par des virgules. Par exemple, "[main, release-nightly]". En outre, vous pouvez spécifier ce qui suit :
  • Références complètes à des branches telles que "refs/heads/main"
  • Globs avec pattern matching tels que "refs/heads/\*"
  • Tags tels que "refs/tags/1.\*"

Correspondance avancée des événements

Pipelines as Code prend en charge l'utilisation du filtrage basé sur le langage d'expression commun (CEL) pour une correspondance avancée des événements. Si vous avez l'annotation pipelinesascode.tekton.dev/on-cel-expression dans votre pipeline, Pipelines as Code utilise l'expression CEL et saute l'annotation on-target-branch. Par rapport à la simple correspondance de l'annotation on-target-branch, les expressions CEL permettent un filtrage complexe et la négation.

Pour utiliser le filtrage basé sur la CEL avec Pipelines as Code, examinez les exemples d'annotations suivants :

  • Correspondre à un événement pull_request ciblant la branche main et provenant de la branche wip:

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && target_branch == "main" && source_branch == "wip"
    ...
  • Pour n'exécuter un pipeline que si le chemin d'accès a changé, vous pouvez utiliser la fonction suffixe de .pathChanged avec un motif global :

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && "docs/\*.md".pathChanged() 1
    ...
    1
    Correspond à tous les fichiers markdown du répertoire docs.
  • Pour correspondre à toutes les pull requests commençant par le titre [DOWNSTREAM]:

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request && event_title.startsWith("[DOWNSTREAM]")
    ...
  • Pour lancer un pipeline sur un événement pull_request, mais ignorer la branche experimental:

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && target_branch != experimental"
    ...

Pour un filtrage avancé basé sur la CEL lors de l'utilisation de Pipelines as Code, vous pouvez utiliser les champs et les fonctions de suffixe suivants :

  • event: Un événement push ou pull_request.
  • target_branch: La branche cible.
  • source_branch: La branche d'origine d'un événement pull_request. Pour les événements push, c'est la même chose que target_branch.
  • event_title: Correspond au titre de l'événement, tel que le titre du commit pour un événement push, et le titre d'une demande d'extraction ou de fusion pour un événement pull_request. Actuellement, seuls GitHub, Gitlab et Bitbucket Cloud sont des fournisseurs pris en charge.
  • .pathChanged: Une fonction de suffixe à une chaîne de caractères. La chaîne peut être un glob d'un chemin pour vérifier si le chemin a changé. Actuellement, seuls GitHub et Gitlab sont pris en charge en tant que fournisseurs.

Utilisation du jeton temporaire de l'application GitHub pour les opérations de l'API Github

Vous pouvez utiliser le jeton d'installation temporaire généré par Pipelines as Code from GitHub App pour accéder à l'API GitHub. La valeur du jeton est stockée dans la variable dynamique temporaire {{git_auth_secret}} générée pour les dépôts privés dans la clé git-provider-token.

Par exemple, pour ajouter un commentaire à une pull request, vous pouvez utiliser la tâche github-add-comment de Tekton Hub en utilisant une annotation Pipelines as Code :

...
  pipelinesascode.tekton.dev/task: "github-add-comment"
...

Vous pouvez ensuite ajouter une tâche à la section tasks ou aux tâches finally dans la définition de l'exécution du pipeline :

[...]
tasks:
  - name:
      taskRef:
        name: github-add-comment
      params:
        - name: REQUEST_URL
          value: "{{ repo_url }}/pull/{{ pull_request_number }}" 1
        - name: COMMENT_OR_FILE
          value: "Pipelines as Code IS GREAT!"
        - name: GITHUB_TOKEN_SECRET_NAME
          value: "{{ git_auth_secret }}"
        - name: GITHUB_TOKEN_SECRET_KEY
          value: "git-provider-token"
...
1
En utilisant les variables dynamiques, vous pouvez réutiliser ce modèle de snippet pour n'importe quelle demande d'extraction de n'importe quel dépôt.
Note

Sur GitHub Apps, le jeton d'installation généré est disponible pendant 8 heures et limité au dépôt d'où proviennent les événements, sauf configuration différente sur le cluster.

Ressources complémentaires

3.8.14. Exécution d'un pipeline à l'aide de Pipelines as Code

Avec la configuration par défaut, Pipelines as Code exécute tout pipeline exécuté dans le répertoire .tekton/ de la branche par défaut du référentiel, lorsque des événements spécifiés tels que pull request ou push se produisent sur le référentiel. Par exemple, si un pipeline exécuté sur la branche par défaut a l'annotation pipelinesascode.tekton.dev/on-event: "[pull_request]", il sera exécuté à chaque fois qu'un événement de demande d'extraction (pull request) se produit.

Dans le cas d'une pull request ou d'une merge request, Pipelines as Code exécute également des pipelines à partir de branches autres que la branche par défaut, si les conditions suivantes sont remplies par l'auteur de la pull request :

  • L'auteur est le propriétaire du dépôt.
  • L'auteur est un collaborateur du dépôt.
  • L'auteur est un membre public de l'organisation du dépôt.
  • L'auteur de la demande d'extraction est listé dans un fichier OWNER situé dans la racine du dépôt de la branche main comme défini dans la configuration GitHub pour le dépôt. De plus, l'auteur de la demande d'extraction est ajouté à la section approvers ou reviewers. Par exemple, si un auteur est listé dans la section approvers, alors une demande d'extraction soulevée par cet auteur démarre l'exécution du pipeline.
...
  approvers:
    - approved
...

Si l'auteur de la demande d'extraction ne répond pas aux exigences, un autre utilisateur qui répond aux exigences peut commenter /ok-to-test sur la demande d'extraction et lancer l'exécution du pipeline.

Exécution du pipeline

Une exécution de pipeline s'exécute toujours dans l'espace de noms du CRD Repository associé au référentiel qui a généré l'événement.

Vous pouvez observer l'exécution de votre pipeline à l'aide de l'outil CLI tkn pac.

  • Pour suivre l'exécution de la dernière opération de pipeline, utilisez l'exemple suivant :

    $ tkn pac logs -n <my-pipeline-ci> -L 1
    1
    my-pipeline-ci est l'espace de noms pour le CRD Repository.
  • Pour suivre l'exécution d'un pipeline de manière interactive, utilisez l'exemple suivant :

    $ tkn pac logs -n <my-pipeline-ci> 1
    1
    my-pipeline-ci est l'espace de noms pour le CRD Repository. Si vous souhaitez visualiser un pipeline autre que le dernier, vous pouvez utiliser la commande tkn pac logs pour sélectionner un PipelineRun attaché au référentiel :

Si vous avez configuré Pipelines as Code avec une application GitHub, Pipelines as Code affiche une URL dans l'onglet Checks de l'application GitHub. Vous pouvez cliquer sur l'URL et suivre l'exécution du pipeline.

Redémarrage d'un pipeline

Vous pouvez redémarrer un pipeline qui n'a pas connu d'événements, comme l'envoi d'un nouveau commit sur votre branche ou l'ouverture d'une pull request. Sur une application GitHub, allez dans l'onglet Checks et cliquez sur Re-run.

Si vous ciblez une demande d'extraction ou de fusion, utilisez les commentaires suivants à l'intérieur de votre demande d'extraction pour redémarrer toutes les exécutions du pipeline ou certaines d'entre elles :

  • Le commentaire /retest redémarre toutes les exécutions du pipeline.
  • Le commentaire /retest <pipelinerun-name> permet de redémarrer l'exécution d'un pipeline spécifique.
  • Le commentaire /cancel annule toutes les exécutions du pipeline.
  • Le commentaire /cancel <pipelinerun-name> permet d'annuler une opération de pipeline spécifique.

Les résultats des commentaires sont visibles sous l'onglet Checks d'une application GitHub.

3.8.15. Suivi de l'état d'exécution des pipelines à l'aide de Pipelines as Code

Selon le contexte et les outils pris en charge, vous pouvez surveiller l'état d'un pipeline de différentes manières.

Statut des applications GitHub

À la fin de l'exécution d'un pipeline, l'état est ajouté dans les onglets Check avec des informations limitées sur la durée de chaque tâche de votre pipeline et la sortie de la commande tkn pipelinerun describe.

Extrait d'erreur du journal

Lorsque Pipelines as Code détecte une erreur dans l'une des tâches d'un pipeline, un petit extrait constitué des 3 dernières lignes de la décomposition de la première tâche défaillante est affiché.

Note

Pipelines as Code évite les fuites de secrets en examinant l'exécution du pipeline et en remplaçant les valeurs secrètes par des caractères cachés. Cependant, Pipelines as Code ne peut pas cacher les secrets provenant des espaces de travail et de la source envFrom.

Annotations pour les extraits d'erreurs du journal

Dans la carte de configuration de Pipelines as Code, si vous définissez le paramètre error-detection-from-container-logs à true, Pipelines as Code détecte les erreurs à partir des journaux du conteneur et les ajoute en tant qu'annotations sur la demande d'extraction où l'erreur s'est produite.

Important

Cette fonctionnalité est en avant-première technologique.

Actuellement, Pipelines as Code ne prend en charge que les cas simples où l'erreur ressemble à une sortie makefile ou grep du format suivant :

<filename>:<line>:<column> : <error message>

Vous pouvez personnaliser l'expression régulière utilisée pour détecter les erreurs dans le champ error-detection-simple-regexp. L'expression régulière utilise des groupes nommés pour donner de la flexibilité sur la façon de spécifier la correspondance. Les groupes nécessaires à la correspondance sont le nom de fichier, la ligne et l'erreur. Vous pouvez voir la carte de configuration de Pipelines as Code pour l'expression régulière par défaut.

Note

Par défaut, Pipelines as Code analyse uniquement les 50 dernières lignes des journaux de conteneurs. Vous pouvez augmenter cette valeur dans le champ error-detection-max-number-of-lines ou définir -1 pour un nombre illimité de lignes. Cependant, de telles configurations peuvent augmenter l'utilisation de la mémoire de l'observateur.

Statut du webhook

Pour le webhook, lorsque l'événement est une demande d'extraction, le statut est ajouté en tant que commentaire sur la demande d'extraction ou de fusion.

Défaillances

Si un espace de noms correspond à un CRD Repository, Pipelines as Code émet ses messages de journal d'échec dans les événements Kubernetes à l'intérieur de l'espace de noms.

Statut associé au référentiel CRD

Les 5 derniers messages d'état d'un pipeline sont stockés dans la ressource personnalisée Repository.

$ oc get repo -n <pipelines-as-code-ci>
NAME                  URL                                                        NAMESPACE             SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME
pipelines-as-code-ci   https://github.com/openshift-pipelines/pipelines-as-code   pipelines-as-code-ci   True        Succeeded   59m         56m

En utilisant la commande tkn pac describe, vous pouvez extraire l'état des exécutions associées à votre référentiel et à ses métadonnées.

Notifications

Pipelines as Code ne gère pas les notifications. Si vous avez besoin de notifications, utilisez la fonctionnalité finally de Pipelines.

3.8.16. Utiliser des dépôts privés avec Pipelines as Code

Pipelines as Code prend en charge les dépôts privés en créant ou en mettant à jour un secret dans l'espace de noms cible avec le jeton d'utilisateur. La tâche git-clone de Tekton Hub utilise le jeton d'utilisateur pour cloner les dépôts privés.

Chaque fois que Pipelines as Code crée un nouveau pipeline dans l'espace de noms cible, il crée ou met à jour un secret au format pac-gitauth-<REPOSITORY_OWNER>-<REPOSITORY_NAME>-<RANDOM_STRING>.

Vous devez référencer le secret avec l'espace de travail basic-auth dans vos définitions d'exécution et de pipeline, qui est ensuite transmis à la tâche git-clone.

...
  workspace:
  - name: basic-auth
    secret:
      secretName: "{{ git_auth_secret }}"
...

Dans le pipeline, vous pouvez faire référence à l'espace de travail basic-auth pour réutiliser la tâche git-clone:

...
workspaces:
  - name basic-auth
params:
    - name: repo_url
    - name: revision
...
tasks:
  workspaces:
    - name: basic-auth
      workspace: basic-auth
  ...
  tasks:
  - name: git-clone-from-catalog
      taskRef:
        name: git-clone 1
      params:
        - name: url
          value: $(params.repo_url)
        - name: revision
          value: $(params.revision)
...
1
La tâche git-clone récupère l'espace de travail basic-auth et l'utilise pour cloner le dépôt privé.

Vous pouvez modifier cette configuration en attribuant à l'indicateur secret-auto-create la valeur false ou true, comme indiqué dans la carte de configuration Pipelines as Code.

3.8.17. Nettoyage de l'exécution d'un pipeline à l'aide de Pipelines as Code

Il peut y avoir de nombreuses exécutions de pipelines dans un espace de noms d'utilisateurs. En définissant l'annotation max-keep-runs, vous pouvez configurer Pipelines as Code pour qu'il conserve un nombre limité d'exécutions de pipelines correspondant à un événement. Par exemple :

...
  pipelinesascode.tekton.dev/max-keep-runs: "<max_number>" 1
...
1
Pipelines as Code commence à faire le ménage dès la fin d'une exécution réussie, en ne conservant que le nombre maximum d'exécutions du pipeline configuré à l'aide de l'annotation.
Note
  • Pipelines as Code ne nettoie pas les pipelines en cours d'exécution mais nettoie les pipelines en cours d'exécution dont l'état est inconnu.
  • Pipelines as Code ne nettoie pas une demande d'extraction qui a échoué.

3.8.18. Utiliser un webhook entrant avec Pipelines as Code

En utilisant une URL de webhook entrant et un secret partagé, vous pouvez lancer l'exécution d'un pipeline dans un référentiel.

Pour utiliser les webhooks entrants, spécifiez ce qui suit dans la section spec du CRD Repository:

  • L'URL du webhook entrant qui correspond à Pipelines as Code.
  • Le fournisseur Git et le jeton d'utilisateur. Actuellement, Pipelines as Code prend en charge github, gitlab, et bitbucket-cloud.

    Note

    Lors de l'utilisation d'URLs de webhooks entrants dans le contexte de l'application GitHub, vous devez spécifier le jeton.

  • Les branches cibles et un secret pour l'URL du webhook entrant.

Exemple : Repository CRD avec webhook entrant

apiVersion: "pipelinesascode.tekton.dev/v1alpha1"
kind: Repository
metadata:
  name: repo
  namespace: ns
spec:
  url: "https://github.com/owner/repo"
  git_provider:
    type: github
    secret:
      name: "owner-token"
  incoming:
    - targets:
      - main
      secret:
        name: repo-incoming-secret
      type: webhook-url

Exemple : Le secret repo-incoming-secret pour le webhook entrant

apiVersion: v1
kind: Secret
metadata:
  name: repo-incoming-secret
  namespace: ns
type: Opaque
stringData:
  secret: <very-secure-shared-secret>

Pour déclencher l'exécution d'un pipeline situé dans le répertoire .tekton d'un dépôt Git, utilisez la commande suivante :

$ curl -X POST 'https://control.pac.url/incoming?secret=very-secure-shared-secret&repository=repo&branch=main&pipelinerun=target_pipelinerun'

Pipelines as Code fait correspondre l'URL entrant et le traite comme un événement push. Cependant, Pipelines as Code ne signale pas l'état des exécutions du pipeline déclenchées par cette commande.

Pour obtenir un rapport ou une notification, ajoutez-les directement à votre pipeline à l'aide d'une tâche finally. Vous pouvez également inspecter le CRD Repository à l'aide de l'outil CLI tkn pac.

3.8.19. Personnaliser la configuration de Pipelines as Code

Pour personnaliser Pipelines as Code, les administrateurs de clusters peuvent configurer les paramètres suivants à l'aide de la carte de configuration pipelines-as-code dans l'espace de noms pipelines-as-code:

Tableau 3.8. Personnaliser la configuration de Pipelines as Code

ParamètresDescriptionDéfaut

application-name

Le nom de l'application. Par exemple, le nom affiché dans les étiquettes GitHub Checks.

"Pipelines as Code CI"

max-keep-days

Le nombre de jours pendant lesquels les exécutions du pipeline sont conservées dans l'espace de noms pipelines-as-code.

Notez que ce paramètre ConfigMap n'affecte pas les nettoyages des exécutions de pipeline d'un utilisateur, qui sont contrôlés par les annotations sur la définition de l'exécution de pipeline dans le référentiel GitHub de l'utilisateur.

NA

secret-auto-create

Indique si un secret doit être automatiquement créé à l'aide du jeton généré dans l'application GitHub. Ce secret peut ensuite être utilisé avec des dépôts privés.

enabled

remote-tasks

Lorsque cette option est activée, elle autorise les tâches à distance à partir des annotations d'exécution du pipeline.

enabled

hub-url

L'URL de base pour l'API Tekton Hub.

https://hub.tekton.dev/

hub-catalog-name

Le nom du catalogue Tekton Hub.

tekton

tekton-dashboard-url

L'URL du tableau de bord Tekton Hub. Pipelines as Code utilise cette URL pour générer une URL PipelineRun sur le tableau de bord Tekton Hub.

NA

bitbucket-cloud-check-source-ip

Indique s'il faut sécuriser les demandes de service en interrogeant les plages d'IP pour un Bitbucket public. La modification de la valeur par défaut du paramètre peut entraîner un problème de sécurité.

enabled

bitbucket-cloud-additional-source-ip

Indique s'il faut fournir un ensemble supplémentaire de plages ou de réseaux IP, séparés par des virgules.

NA

max-keep-run-upper-limit

Limite maximale de la valeur max-keep-run pour un pipeline.

NA

default-max-keep-runs

Limite par défaut de la valeur de max-keep-run pour une série de pipelines. Si elle est définie, cette valeur est appliquée à tous les parcours de pipelines qui n'ont pas d'annotation max-keep-run.

NA

auto-configure-new-github-repo

Configure automatiquement les nouveaux dépôts GitHub. Pipelines as Code met en place un espace de noms et crée une ressource personnalisée pour votre dépôt. Ce paramètre n'est pris en charge qu'avec les applications GitHub.

disabled

auto-configure-repo-namespace-template

Configure un modèle pour générer automatiquement l'espace de noms pour votre nouveau dépôt, si auto-configure-new-github-repo est activé.

{repo_name}-pipelines

error-log-snippet

Active ou désactive l'affichage d'un extrait de journal pour les tâches qui ont échoué, avec une erreur dans un pipeline. Vous pouvez désactiver ce paramètre en cas de fuite de données de votre pipeline.

enabled

3.8.20. Référence de la commande Pipelines as Code

L'outil CLI tkn pac offre les possibilités suivantes :

  • Installation et configuration de Bootstrap Pipelines as Code.
  • Créer un nouveau dépôt Pipelines as Code.
  • Liste de tous les dépôts de Pipelines as Code.
  • Décrire un référentiel Pipelines as Code et les exécutions associées.
  • Générer un simple pipeline pour commencer.
  • Résoudre un pipeline comme s'il avait été exécuté par Pipelines as Code.
Astuce

Vous pouvez utiliser les commandes correspondant aux capacités à des fins de test et d'expérimentation, sans avoir à modifier le dépôt Git contenant le code source de l'application.

3.8.20.1. Syntaxe de base

$ tkn pac [command or options] [arguments]

3.8.20.2. Options globales

$ tkn pac --help

3.8.20.3. Commandes d'utilitaires

3.8.20.3.1. amorçage

Tableau 3.9. Bootstrapping Pipelines as Code : installation et configuration

CommandementDescription

tkn pac bootstrap

Installe et configure Pipelines as Code pour les fournisseurs de services d'hébergement de dépôts Git, tels que GitHub et GitHub Enterprise.

tkn pac bootstrap --nightly

Installe la version de nuit de Pipelines as Code.

tkn pac bootstrap --route-url <public_url_to_ingress_spec>

Remplace l'URL de la route OpenShift.

Par défaut, tkn pac bootstrap détecte la route OpenShift, qui est automatiquement associée au service contrôleur Pipelines as Code.

Si vous n'avez pas de cluster OpenShift Container Platform, il vous demande l'URL publique qui pointe vers le point d'entrée.

tkn pac bootstrap github-app

Créez une application GitHub et des secrets dans l'espace de noms pipelines-as-code.

3.8.20.3.2. dépôt

Tableau 3.10. Gérer les pipelines comme des dépôts de code

CommandementDescription

tkn pac create repository

Crée un nouveau référentiel Pipelines as Code et un espace de noms basé sur le modèle d'exécution du pipeline.

tkn pac list

Liste tous les Pipelines en tant que dépôts de code et affiche le dernier état des exécutions associées.

tkn pac repo describe

Décrit un référentiel Pipelines as Code et les exécutions associées.

3.8.20.3.3. générer

Tableau 3.11. Génération d'exécutions de pipelines à l'aide de Pipelines as Code

CommandementDescription

tkn pac generate

Génère une simple exécution de pipeline.

Lorsqu'il est exécuté à partir du répertoire contenant le code source, il détecte automatiquement les informations Git actuelles.

En outre, il utilise la capacité de détection de la langue de base et ajoute des tâches supplémentaires en fonction de la langue.

Par exemple, s'il détecte un fichier setup.py à la racine du référentiel, la tâche pylint est automatiquement ajoutée à l'exécution du pipeline généré.

3.8.20.3.4. résoudre

Tableau 3.12. Résolution et exécution d'un pipeline à l'aide de Pipelines as Code

CommandementDescription

tkn pac resolve

Exécute un pipeline comme s'il appartenait au service Pipelines as Code on.

tkn pac resolve -f .tekton/pull-request.yaml | oc apply -f -

Affiche l'état d'un pipeline en cours d'exécution qui utilise le modèle dans .tekton/pull-request.yaml.

Combiné à une installation Kubernetes fonctionnant sur votre machine locale, vous pouvez observer l'exécution du pipeline sans générer de nouveau commit.

Si vous exécutez la commande à partir d'un dépôt de code source, elle tente de détecter les informations Git actuelles et de résoudre automatiquement les paramètres tels que la révision ou la branche actuelle.

tkn pac resolve -f .tekton/pr.yaml -p revision=main -p repo_name=<repository_name>

Exécute un pipeline en remplaçant les valeurs par défaut des paramètres dérivés du référentiel Git.

L'option -f peut également accepter un chemin de répertoire et appliquer la commande tkn pac resolve à tous les fichiers .yaml ou .yml de ce répertoire. Vous pouvez également utiliser l'option -f plusieurs fois dans la même commande.

Vous pouvez remplacer les informations recueillies par défaut dans le référentiel Git en spécifiant des valeurs de paramètres à l'aide de l'option -p. Par exemple, vous pouvez utiliser une branche Git comme révision et un nom de dépôt différent.

3.8.21. Ressources complémentaires