AWS CodeBuild - переменные среды, указанные в конфигурации действий, не соответствуют ожидаемому формату - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь добавить переменную среды в действие конвейера, которое использует AWS Codebuild. Однако, независимо от того, что я добавляю, если я выбираю тип Secret Manager, этот шаг завершается с ошибкой:

Недопустимая конфигурация действия

EnvironmentVariables, указанные в конфигурации действия, не соответствует ожидаемому формату, ожидаемый формат - JSON массив, придерживающийся следующего формата: [{"name": "string", "type": "string", "value": "string"}]

Вот что я ввожу в пользовательском интерфейсе:

enter image description here

И JSON, который генерирует CodePipeline, выглядит следующим образом:

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

Что здесь происходит ?? Я не знаю, что я могу ошибаться с моей стороны. Я ввожу текст в поля, которые они предоставляют. JSON, который конвейеры производят из окон ввода, выглядит на мой взгляд. Итак, я понятия не имею, почему говорится, что переменные среды не соответствуют ожидаемому формату!

1 Ответ

0 голосов
/ 07 мая 2020

Если кто-то заходит на эту страницу после поиска ошибки:

EnvironmentVariables, указанные в конфигурации действий, не соответствуют ожидаемому формату, ожидаемый формат - JSON массив, придерживающийся следующего формата

Это повторяющаяся проблема, когда у вас есть CodePipeline, который передает переменную среды '# {SourceVariables.CommitMessage}' из действия Source в действие CodeBuild, и если CommitMessage содержит кавычку или является многострочным, то действие не будет выполнено из-за внутренней ошибки синтаксического анализатора json.

Чтобы обойти эту проблему без потери переменной среды 'COMMIT_MESSAGE', выполните следующие действия:

Обходной путь:

  • Удалите переменную среды 'COMMIT_MESSAGE' из конфигурации CodePipeline в действии CodeBuild.

  • Убедитесь, что служебная роль вашего проекта CodeBuild имеет разрешение на выполнение ListPipelineExecutions в Трубопровод.

  • Добавить следующее в Buildspe c фаза 'Install' для установки утилиты 'jq' [1]:

    - apt-get install jq
    
  • Добавьте следующее в Buildspe c, где вам нужно получить коммит сообщение (пожалуйста, обновите имя конвейера):

    - 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
    

Используя этот метод, мы используем 'CLIP-конвейер-исполнения' [2] AWS вызов CLI чтобы получить недавнее выполнение конвейера и проанализировать сообщение фиксации из этого выполнения. Переменная 'COMMIT_MESSAGE' будет включать в себя полное сообщение фиксации с любыми кавычками или символами новой строки.

Ссылки:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...