AWS CodeBuild - 动作配置中指定的环境变量不符合预期格式

问题描述 投票:1回答:1

我试图将一个环境变量添加到一个使用AWS Codebuild的Pipeline操作中。然而,无论我添加什么,如果我选择秘密管理器的类型,该步骤都会失败,出现以下错误。

无效的动作配置

在action config中指定的环境变量与预期的格式不一致,预期的格式是遵循以下格式的JSON数组。[{"name": "string", "type": "string", "value": "string"}]

这是我在UI中输入的内容。

enter image description here

CodePipeline生成的JSON是这样的。

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

这到底是怎么回事?我不知道我到底哪里出错了。我在他们提供的方框中输入文本。Pipeline从输入框中生成的JSON在我看来是有效的。所以,我不知道为什么它说环境变量不符合预期的格式!我试图添加一个环境变量。

aws-codepipeline aws-codebuild
1个回答
0
投票

如果有人搜索到这个错误后,来到这个页面。

动作配置中指定的环境变量与预期的格式不匹配,预期的格式是JSON数组,坚持以下格式。

这是一个反复出现的问题,当你的CodePipeline将环境变量 "#{SourceVariables.CommitMessage}"从Source操作馈送到CodeBuild操作时,如果CommitMessage包含一个引号或多行,那么该操作将由于内部json解析器失败而失败。

注意:CodeCommit总是会添加一个'\n',所以这个问题总是会在CodeCommit中发生。对于GitHub来说,只有当你使用扩展提交消息时才会出现这种情况。

现在,为了解决这个问题而不丢失'COMMIT_MESSAGE'环境变量,请遵循以下步骤。

解决办法: 移除 "COMMIT_MESSAGE "环境变量

  • 从CodePipeline配置中删除 "COMMIT_MESSAGE "环境变量。

  • 确保你的CodeBuild项目的服务角色有权限在Pipeline上执行'ListPipelineExecutions'。

  • 在Buildspec的 "安装 "阶段添加以下内容来安装 "jq "工具[1]。

    - apt-get install jq
    
  • 在Buildspec中需要获取提交信息的地方添加以下内容(请更新为管道的名称)。

    - 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
    

使用这种方法,我们是使用'list-pipeline-executions'[2]AWS CLI调用来检索最近的管道执行,并从这个执行中解析提交消息。'COMMIT_MESSAGE'变量将包括完整的提交消息,并带有任何引号或换行符。

参考文献

[1] jq - https:/stedolan.github.iojq。

[2] 清单-管道执行-----。https:/docs.aws.amazon.comclilatestreferencecodepipelinist-pipeline-executions.html。

© www.soinside.com 2019 - 2024. All rights reserved.