Gitlab.com CI/CD部署至AWS S3前如何压缩文件?
嘿,作为GitLab CI/CD新手,这个需求其实用一份简洁的.gitlab-ci.yml就能搞定,我给你梳理最简的实现步骤:
核心思路
我们要把流程拆成3个阶段:运行测试 → 压缩项目文件 → 上传到S3桶,只有测试全部通过后,才会执行后续的构建和部署操作。
第一步:配置GitLab项目变量
首先你需要把AWS的访问凭证存到GitLab的项目保密变量里,避免硬编码到配置文件:
- 打开你的GitLab项目,进入
Settings → CI/CD → Variables - 添加两个变量:
AWS_ACCESS_KEY_ID:你的AWS访问密钥IDAWS_SECRET_ACCESS_KEY:你的AWS秘密访问密钥(记得勾选"Protect variable"和"Mask variable")
- 还可以加个
AWS_REGION变量存S3桶所在区域,比如us-east-1
第二步:编写.gitlab-ci.yml配置文件
在项目根目录创建这个文件,内容如下,我会逐段解释:
# 定义CI流程的三个阶段,顺序执行 stages: - test - build - deploy # 测试阶段:运行Python应用的所有测试 test: stage: test # 使用官方Python镜像,版本换成你项目用的版本 image: python:3.9 before_script: # 安装项目依赖 - pip install -r requirements.txt script: # 替换成你实际的测试命令,比如pytest/unittest - pytest -v # 构建阶段:压缩需要上传的项目文件 build: stage: build # 用轻量的Alpine镜像,自带zip命令,节省资源 image: alpine:latest script: # 压缩项目根目录的所有文件,排除不需要的内容(比如.git、虚拟环境、缓存文件等) - zip -r app_deploy.zip . -x ".git/*" ".gitlab-ci.yml" "venv/*" "__pycache__/*" "*.log" # 把压缩包作为产物传递给下一个部署阶段 artifacts: paths: - app_deploy.zip # 部署阶段:上传压缩包到S3桶 deploy: stage: deploy # 使用官方AWS CLI镜像,不用自己装依赖 image: amazon/aws-cli:latest # 依赖build阶段的压缩包产物 dependencies: - build before_script: # 配置AWS CLI凭证 - aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID - aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY - aws configure set region $AWS_REGION script: # 把压缩包上传到你的S3桶,替换成实际的桶名和目标路径 - aws s3 cp app_deploy.zip s3://your-s3-bucket-name/deploy-packages/ # 只在main分支更新时触发部署(可根据需求改成其他分支或标签) only: - main
关键细节说明
- 测试阶段:如果测试失败,后续的构建和部署会自动终止,完美符合你"通过所有测试后再部署"的要求。
- 压缩规则:
zip命令里的-x参数用来排除不需要打包的文件,你可以根据自己的项目调整(比如排除.env配置文件、临时目录等)。 - AWS权限:确保你用来部署的AWS用户拥有S3的
PutObject权限,权限策略可以参考这样:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::your-s3-bucket-name/*" } ] } - 分支控制:
only: main保证只有主分支的代码才会部署,如果你想在其他分支测试流程,可以去掉这行或者改成对应的分支名。
这样配置好之后,每次你往main分支推送代码,GitLab就会自动执行测试→压缩→上传S3的全流程啦!
内容的提问来源于stack exchange,提问作者user1544500
相关产品推荐
相关产品推荐

