我试图将一个环境变量添加到一个使用AWS Codebuild的Pipeline操作中。然而,无论我添加什么,如果我选择秘密管理器的类型,该步骤都会失败,出现以下错误。
无效的动作配置
在action config中指定的环境变量与预期的格式不一致,预期的格式是遵循以下格式的JSON数组。[{"name": "string", "type": "string", "value": "string"}]
这是我在UI中输入的内容。
CodePipeline生成的JSON是这样的。
[{"name":"SERVICE_CREDS","value":"my-secret:service_creds","type":"SECRETS_MANAGER"}]
这到底是怎么回事?我不知道我到底哪里出错了。我在他们提供的方框中输入文本。Pipeline从输入框中生成的JSON在我看来是有效的。所以,我不知道为什么它说环境变量不符合预期的格式!我试图添加一个环境变量。
如果有人搜索到这个错误后,来到这个页面。
动作配置中指定的环境变量与预期的格式不匹配,预期的格式是JSON数组,坚持以下格式。
这是一个反复出现的问题,当你的CodePipeline将环境变量 "#{SourceVariables.CommitMessage}"从Source操作馈送到CodeBuild操作时,如果CommitMessage包含一个引号或多行,那么该操作将由于内部json解析器失败而失败。
注意:CodeCommit总是会添加一个'\n',所以这个问题总是会在CodeCommit中发生。对于GitHub来说,只有当你使用扩展提交消息时才会出现这种情况。
现在,为了解决这个问题而不丢失'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。