如何通过Bitbucket Pipeline将Python包上传至AWS CodeArtifact?
实现Bitbucket Pipeline自动上传Python包到AWS CodeArtifact
前置准备
- 你的Python项目已包含
setup.py或pyproject.toml(用于构建包) - 拥有AWS IAM凭证,且该凭证具备以下权限:
codeartifact:GetRepositoryEndpointcodeartifact:PutPackageVersioncodeartifact:UploadPackageVersionAsset
- 在Bitbucket仓库的Settings > Repository variables中添加以下环境变量:
AWS_ACCESS_KEY_ID:AWS访问密钥IDAWS_SECRET_ACCESS_KEY:AWS秘密访问密钥AWS_REGION:CodeArtifact所在区域(如us-east-1)CODEARTIFACT_DOMAIN:你的CodeArtifact域名CODEARTIFACT_DOMAIN_OWNER:域名所属的AWS账户ID(可选,若域名属于当前账户可省略)CODEARTIFACT_REPO:目标CodeArtifact仓库名称
编写Bitbucket Pipeline配置
在项目根目录创建bitbucket-pipelines.yml文件,内容如下:
image: python:3.10-slim pipelines: default: - step: name: Build and upload Python package to AWS CodeArtifact script: # 安装构建与依赖工具 - pip install --upgrade pip setuptools wheel twine awscli # 配置AWS CodeArtifact作为pip源(若构建时需从私有仓库拉取依赖则保留) - aws codeartifact login --tool pip --domain $CODEARTIFACT_DOMAIN --domain-owner $CODEARTIFACT_DOMAIN_OWNER --repository $CODEARTIFACT_REPO --region $AWS_REGION # 构建Python包(使用pyproject.toml时替换为python -m build,需先pip install build) - python setup.py sdist bdist_wheel # 获取CodeArtifact的PyPI端点 - export REPO_ENDPOINT=$(aws codeartifact get-repository-endpoint --domain $CODEARTIFACT_DOMAIN --domain-owner $CODEARTIFACT_DOMAIN_OWNER --repository $CODEARTIFACT_REPO --format=pypi --region $AWS_REGION --query repositoryEndpoint --output text) # 上传包到CodeArtifact - twine upload --repository-url $REPO_ENDPOINT dist/* artifacts: - dist/**
关键步骤说明
- AWS CLI登录CodeArtifact:
aws codeartifact login会自动配置pip的私有仓库访问权限,若构建无需拉取私有依赖可跳过此步。 - 构建包:
setup.py sdist bdist_wheel生成源码包和wheel包;使用pyproject.toml的项目推荐用python -m build命令。 - 上传包:通过
get-repository-endpoint动态获取仓库地址,避免硬编码URL导致的维护问题。
注意事项
- 版本号唯一性:CodeArtifact不允许重复上传同一版本的包,建议结合Git标签、提交哈希或日期自动生成版本号。
- 权限最小化:给IAM凭证分配仅必要的CodeArtifact操作权限,避免使用管理员权限。
- 镜像适配:根据项目Python版本选择对应Docker镜像(如
python:3.9-alpine),减少构建时间和镜像体积。
内容的提问来源于stack exchange,提问作者Marek
相关产品推荐
相关产品推荐

