You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python脚本中的取值传入buildspec.yml文件的变量中

解决方案

核心思路是在buildspec的执行阶段先运行Python脚本获取版本号,将值导出为环境变量后,后续构建流程直接调用该变量即可。

步骤1:调整Python脚本输出格式

确保你的Python脚本运行时仅输出版本号,无多余日志输出,例如脚本命名为get_version.py,示例内容如下:

def generate_version():
    # 此处替换为你自己的版本号生成逻辑,比如读取配置文件、按规则生成版本等
    return "1.0.1"

if __name__ == "__main__":
    print(generate_version())

运行python get_version.py时仅会输出1.0.1,方便后续捕获值。

步骤2:在buildspec.yml中捕获版本号并复用

在pre_build阶段执行Python脚本,把输出的版本号赋值给环境变量,后续打镜像标签、推送到ECR的环节都可以直接调用该变量,完整buildspec示例如下:

version: 0.2

env:
  variables:
    # 替换为你自己的ECR仓库地址
    ECR_REPO_URI: "123456789012.dkr.ecr.cn-north-1.amazonaws.com.cn/my-image-repo"
    IMAGE_PREFIX: "image"

phases:
  install:
    runtime-versions:
      python: 3.x # 声明使用Python3运行环境
    commands:
      # 如果你的Python脚本有依赖包,在这里安装,例如:pip install pyyaml
      - echo "安装Python依赖完成"
  pre_build:
    commands:
      # 登录ECR,海外区域请把域名后缀改为amazonaws.com,区域替换为你使用的区域
      - aws ecr get-login-password --region cn-north-1 | docker login --username AWS --password-stdin $ECR_REPO_URI
      # 运行Python脚本获取版本号,导出为环境变量
      - export IMAGE_VERSION=$(python get_version.py)
      # 打印版本号用于调试,避免后续打标签出错
      - echo "获取到的镜像版本为 $IMAGE_VERSION"
      # 拼接完整的镜像标签
      - export FULL_IMAGE_TAG="$ECR_REPO_URI/$IMAGE_PREFIX:$IMAGE_VERSION"
  build:
    commands:
      # 构建Docker镜像,使用刚才拼接的标签
      - docker build -t $FULL_IMAGE_TAG .
  post_build:
    commands:
      # 推送镜像到ECR
      - docker push $FULL_IMAGE_TAG
      # 可选:生成部署配置文件供ECS/EKS使用
      - printf '[{"name":"你的业务容器名","imageUri":"%s"}]' $FULL_IMAGE_TAG > imagedefinitions.json

artifacts:
  files: imagedefinitions.json

注意事项

  • 同一次CodeBuild构建过程中,导出的环境变量在所有后续阶段都生效,你可以在任意位置直接用$IMAGE_VERSION调用版本号
  • 确保Python脚本没有多余的打印内容,否则多余内容会被一起赋值给环境变量,导致镜像标签格式错误
  • 如果脚本运行报错,需要提前在install阶段安装所有依赖的Python包

内容的提问来源于stack exchange,提问作者Shubham Dalwani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:54:02