5 votes

AWS CodeBuild - Les variables d'environnement spécifiées dans la configuration de l'action ne correspondent pas au format attendu.

J'essaie d'ajouter une variable d'environnement à une action Pipeline qui utilise AWS Codebuild. Cependant, peu importe ce que j'ajoute, si je choisis un type de gestionnaire de secrets, l'étape échoue avec l'erreur suivante :

Configuration d'action invalide

EnvironmentVariables spécifié dans l'action config ne correspond pas au format attendu, le format attendu est un tableau JSON adhérant au format suivant : [{"name" : "string", "type" : "string", "value" : "string"}]

C'est ce que je saisis dans l'interface utilisateur :

enter image description here

Et le JSON que CodePipeline génère ressemble à ceci :

[{"name":"SERVICE_CREDS","value":"my-secret:service_creds","type":"SECRETS_MANAGER"}]

Qu'est-ce qui se passe ici ? Je ne sais pas ce que je peux faire de mal de mon côté. Je saisis du texte dans les cases qu'ils fournissent. Le JSON que Pipelines produit à partir de ces champs de saisie me semble valide. Je ne sais donc pas pourquoi il me dit que les variables d'environnement ne correspondent pas au format attendu !

3voto

shariqmaws Points 5298

Si quelqu'un arrive sur cette page après avoir cherché l'erreur :

EnvironmentVariables spécifié dans l'action config ne correspond pas au format attendu, le format attendu est un tableau JSON adhérant au format suivant

Il s'agit d'un problème récurrent lorsque vous avez un CodePipeline qui alimente une variable d'environnement "#{SourceVariables.CommitMessage}" de l'action Source à l'action CodeBuild et si le CommitMessage contient une citation ou est multi-ligne, alors l'action échouera en raison de l'échec de l'analyseur json interne.

Note : CodeCommit ajoute toujours un ' \n Ce problème se produira donc toujours avec CodeCommit. Pour GitHub, il ne se produira que si vous utilisez le message de validation étendu.

Pour l'instant, afin de contourner ce problème sans perdre la variable d'environnement 'COMMIT_MESSAGE', veuillez suivre les étapes suivantes :

Solution :

  • Supprimer la variable d'environnement 'COMMIT_MESSAGE' de la configuration de CodePipeline sur l'action CodeBuild.

  • Assurez-vous que le rôle de service de votre projet CodeBuild a la permission de faire 'ListPipelineExecutions' sur le Pipeline.

  • Ajoutez ce qui suit dans la phase Buildspec 'Install' pour installer l'utilitaire 'jq' [1] :

    - apt-get install jq
  • Ajoutez ce qui suit dans Buildspec à l'endroit où vous avez besoin d'obtenir le message de validation (veuillez mettre à jour le nom du pipeline) :

    - COMMIT_MESSAGE=$(aws codepipeline list-pipeline-executions  --pipeline-name <Pipeline_Name> --max-items 1 | jq -r '.pipelineExecutionSummaries[0].sourceRevisions[0].revisionSummary')
    - export COMMIT_MESSAGE
    - echo $COMMIT_MESSAGE # debug command only
    - printenv # debug command only

Avec cette méthode, nous utilisons l'appel AWS CLI 'list-pipeline-executions' [2] pour récupérer l'exécution récente du pipeline et analyser le message de livraison de cette exécution. La variable 'COMMIT_MESSAGE' comprendra le message de livraison complet avec les guillemets et les nouvelles lignes.

Références :

[1] jq - https://stedolan.github.io/jq/

[2] list-pipeline-executions - https://docs.aws.amazon.com/cli/latest/reference/codepipeline/list-pipeline-executions.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X