Comment résoudre le problème d'AWS CodePipeline lorsqu'il s'exécute deux fois ?

Date de la dernière mise à jour : 15/02/2021

Mon service AWS CodePipeline s'exécute deux fois. Comment résoudre ce problème ?

Brève description

Il existe deux raisons courantes pour lesquelles AWS CodePipeline s'exécute plusieurs fois :

  • Le paramètre PollForSourceChanges est défini sur true, ce qui provoque un deuxième lancement du pipeline déclenché par l'interrogation.
  • Il existe une règle CloudWatch Events dupliquée avec la même cible que le pipeline, ce qui entraîne l'exécution du pipeline une deuxième fois.

Pour résoudre le problème, regardez d'abord l'historique du pipeline pour confirmer ce qui provoque l'exécution du pipeline une deuxième fois.

S'il existe plusieurs de lancements du même pipeline déclenchés par les règles CloudWatch Events, supprimez ou désactivez toutes les règles dupliquées.

S'il y a des lancements du pipeline déclenchés par l’interrogation, lisez la section Comprendre le comportement par défaut du paramètre PollForSourceChanges. Ensuite, en fonction de la situation, effectuez les étapes indiquées dans l'une des sections suivantes :

  • Si vous avez créé votre pipeline avec AWS CloudFormation, suivez les étapes de la section Mettre à jour votre modèle AWS CloudFormation.
  • Si vous avez créé votre pipeline avec l'interface de ligne de commande AWS (AWS CLI), suivez les étapes de la section Mettre à jour votre pipeline avec un fichier JSON.
  • Si vous avez créé votre pipeline avec le kit SDK AWS, suivez les étapes de la section Mettre à jour votre pipeline en fonction de la syntaxe de configuration de votre langage.

Important : Mettez à jour votre pipeline à l'aide de la même méthode que celle que vous avez utilisée pour le créer. Évitez d'apporter des modifications hors bande à votre pipeline et veillez à suivre les étapes de la section qui s'applique à votre scénario uniquement. Par exemple, si vous avez créé votre pipeline avec AWS CloudFormation, suivez uniquement la section Mettre à jour votre modèle AWS CloudFormation.

Résolution

Remarque : Si vous recevez des erreurs lors de l'exécution de commandes depuis AWS CLI, assurez-vous que vous utilisez la version la plus récente d'AWS CLI.

Confirmer ce qui provoque l'exécution du pipeline une deuxième fois

1.    Ouvrez la console CodePipeline.

2.    Dans Nom, choisissez le nom du pipeline.

3.    Choisissez Afficher l'historique.

4.    Dans la colonne Déclencheur , vérifiez s'il y a des lancements dupliquée déclenchés par une règle ou déclenchés par une interrogation du pipeline.

5.    S'il existe plusieurs lancements déclenchés par des règles CloudWatch Events, supprimez ou désactivez toutes les règles dupliquées.

-ou-

S'il existe des lancements du pipeline déclenchés par interrogation, effectuez les étapes de dépannage suivantes.

Comprendre le comportement par défaut du paramètre PollForSourceChanges

Tenez compte des éléments suivants :

  • Le comportement par défaut du paramètre PollForSourceChanges est déterminé par la méthode utilisée pour créer le pipeline.
  • Dans de nombreux cas, la valeur de PollForSourceChanges est définie sur true par défaut et doit être désactivée.
  • Si vous créez votre pipeline avec la console CodePipeline, alors la méthode de détection de source est automatiquement définie sur Amazon CloudWatch Events (le moyen recommandé de détecter les modifications apportées à votre source).
  • Si vous créez votre pipeline avec AWS CloudFormation, l'interface de ligne de commande AWS ou le kit SDK AWS et que vous ne spécifiez pas la méthode de détection des modifications, alors PollForSourceChanges est défini sur true par défaut (selon la méthode de création).
  • Si vous créez votre pipeline à l'aide d'une méthode autre que la console CodePipeline, puis que vous mettez à jour votre pipeline hors bande en utilisant la console, alors CodePipeline crée automatiquement une règle CloudWatch Events supplémentaire.
  • Si vous créez une règle CloudWatch Events dans votre modèle AWS CloudFormation ou si vous créez un webhook pour la version 1 de votre référentiel GitHub et que vous ne définissez pas le paramètre PollForSourceChanges, vous obtenez alors deux façons de détecter les modifications dans la source. Cela entraîne l'exécution de votre pipeline une deuxième fois.

Mettre à jour votre modèle AWS CloudFormation

Dans votre fichier de configuration de pipeline ou modèle AWS CloudFormation, définissez le paramètre PollForSourceChanges sur false.

Remarque : Le paramètre PollForSourceChanges est défini sur true par défaut.

Pour plus d'informations sur les webhooks de la version 1 de GitHub, consultez la section Utiliser des webhooks pour démarrer un pipeline.

Mettre à jour votre pipeline avec un fichier JSON

1.    Copiez la structure de votre pipeline dans un fichier JSON :

$ aws codepipeline get-pipeline --name NAME_OF_YOUR_PIPELINE  > pipeline.json

2.    Ouvrez le fichier pipeline.json dans un éditeur de texte, puis ajoutez le paramètre PollForSourceChanges à la section de configuration des actions source. Définissez le paramètre sur false.

3.    Retirez les champs de métadonnées suivants du fichier :
« métadonnées » : {}
« créé »
« pipelineARN »
« mis à jour »
Important :
Les lignes de métadonnées doivent être retirées du fichier pipeline.json afin que la commande update-pipeline suivante puisse l'utiliser.

4.    Enregistrez le fichier pipeline.json, puis exécutez la commande update-pipeline suivante pour appliquer les modifications au fichier :

$ aws codepipeline update-pipeline --cli-input-json file://pipeline.json

Pour plus d'informations, consultez la section Modifier un pipeline (AWS CLI).

Mettre à jour votre pipeline en fonction de la syntaxe de configuration de votre langage

Pour plus d'informations sur la mise à jour de votre pipeline, consultez la documentation du kit SDK correspondant à votre langage.

Par exemple, si vous avez déployé votre pipeline avec Python, vous pouvez définir PollForSourceChanges sur false dans la section de configuration de votre pipeline.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?