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

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访问密钥ID
    • AWS_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

关键细节说明

  1. 测试阶段:如果测试失败,后续的构建和部署会自动终止,完美符合你"通过所有测试后再部署"的要求。
  2. 压缩规则:zip命令里的-x参数用来排除不需要打包的文件,你可以根据自己的项目调整(比如排除.env配置文件、临时目录等)。
  3. AWS权限:确保你用来部署的AWS用户拥有S3的PutObject权限,权限策略可以参考这样:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::your-s3-bucket-name/*"
        }
      ]
    }
    
  4. 分支控制:only: main保证只有主分支的代码才会部署,如果你想在其他分支测试流程,可以去掉这行或者改成对应的分支名。

这样配置好之后,每次你往main分支推送代码,GitLab就会自动执行测试→压缩→上传S3的全流程啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:13:27