AWS CLI 2.1.24集成Jenkins更新Sagemaker Pipeline报错排查
解决AWS CLI 2.1.24中Sagemaker Pipeline更新的JSON传递问题
问题分析
你遇到的ValidationException报错本质是传递给--pipeline-definition的JSON内容不完整或格式无效,而非JSON文件本身无步骤。原命令的问题出在xargs的参数搭配错误:
xargs -0要求输入内容以**空字符(\0)**分隔,但jq -c .输出的紧凑JSON是以换行符结尾,不满足-0的输入要求,导致xargs无法正确识别完整的JSON字符串,传递给AWS CLI的内容被截断或拆分。- 另外原命令中存在拼写错误:
pipeine_definition.json应为pipeline_definition.json,需先修正避免文件读取失败。
解决方案
方案1:使用命令替换(最简洁)
直接通过$()将S3文件内容读取并传递给--pipeline-definition,无需管道和xargs:
aws sagemaker update-pipeline \ --pipeline-name "pipelinename" \ --role-arn "arn:aws:iam::<account_id>:role/sagemaker-role" \ --pipeline-definition "$(aws s3 cp s3://some_bucket/folder1/pipeline_definition.json - | jq -c .)"
- 双引号
"包裹命令替换结果,确保JSON中的空格、特殊字符被完整保留。 jq -c .用于压缩JSON,避免换行符导致的格式问题。
方案2:修复原管道命令的xargs参数
如果坚持使用管道,需确保输入给xargs的内容以空字符分隔,并调整xargs的使用方式:
aws s3 cp s3://some_bucket/folder1/pipeline_definition.json - | \ jq -c . | \ tee /dev/stderr | \ tr '\n' '\0' | \ xargs -0 aws sagemaker update-pipeline --pipeline-name "pipelinename" --role-arn "arn:aws:iam::<account_id>:role/sagemaker-role" --pipeline-definition
tr '\n' '\0'将换行符替换为空字符,满足xargs -0的输入要求。- 移除
-I{},让xargs直接将完整的JSON字符串作为--pipeline-definition的参数值传递。
验证步骤
- 先单独执行
aws s3 cp s3://some_bucket/folder1/pipeline_definition.json - | jq -c .,确认输出的是完整且格式正确的JSON。 - 再执行上述修正后的命令,验证是否成功更新Pipeline。
内容的提问来源于stack exchange,提问作者OnTheWheels
相关产品推荐
相关产品推荐

