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

如何配置Travis Matrix实现双部署至不同AWS S3存储桶?

问题:Travis Matrix实现双部署到不同AWS S3存储桶

我已经配置了Travis Matrix的构建逻辑,分两个环境分别执行不同的构建命令,但不知道怎么设置部署步骤,想把两个不同的构建产物推送到两个不同的AWS S3存储桶,现有配置如下:

node_js:
  - 8
cache:
  yarn: true
matrix:
  include:
    - env: MHTD=USER1
    - env: MHTD=USER2
install:
  - if [ "$MHTD" = "USER1" ]; then yarn build-web:"$BUILD_NAME"; fi
  - if [ "$MHTD" = "USER2" ]; then yarn build-web:"$BUILD_NAME1"; fi

解决方案

这里有两种清晰的实现方式,你可以根据自己的需求选择:

方式一:通过环境变量+条件判断统一管理部署

这种方式适合两个部署逻辑差异不大的场景,我们可以在环境变量里加入桶名,然后在deploy步骤里根据MHTD的值匹配对应的配置:

node_js:
  - 8
cache:
  yarn: true
matrix:
  include:
    # 给每个环境添加对应的桶名和构建命令变量
    - env: MHTD=USER1 BUCKET_NAME=user1-s3-bucket BUILD_NAME=web-user1
    - env: MHTD=USER2 BUCKET_NAME=user2-s3-bucket BUILD_NAME1=web-user2
install:
  - if [ "$MHTD" = "USER1" ]; then yarn build-web:"$BUILD_NAME"; fi
  - if [ "$MHTD" = "USER2" ]; then yarn build-web:"$BUILD_NAME1"; fi
deploy:
  provider: s3
  # 注意:这些AWS凭证需要提前在Travis的项目设置里加密配置
  access_key_id: $AWS_ACCESS_KEY_ID
  secret_access_key: $AWS_SECRET_ACCESS_KEY
  bucket: $BUCKET_NAME # 读取对应环境的桶名
  skip_cleanup: true # 关键!必须开启,否则Travis会清理构建产物
  local_dir: dist # 替换成你的构建产物实际目录,比如build、public等
  on:
    # 可以根据需要限制部署的分支,比如只在master分支触发
    branch: master
    # 确保只在我们定义的两个环境下执行部署
    condition: $MHTD = USER1 || $MHTD = USER2

方式二:在Matrix的每个条目里单独定义部署配置

如果两个部署的逻辑差异较大(比如用不同的AWS凭证、不同的产物目录),直接在每个matrix条目里写独立的deploy配置会更清晰:

node_js:
  - 8
cache:
  yarn: true
matrix:
  include:
    - env: MHTD=USER1 BUILD_NAME=web-user1
      # 单独定义这个环境的构建命令
      install: yarn build-web:"$BUILD_NAME"
      # 单独配置USER1的S3部署
      deploy:
        provider: s3
        access_key_id: $AWS_USER1_ACCESS_KEY_ID
        secret_access_key: $AWS_USER1_SECRET_ACCESS_KEY
        bucket: user1-s3-bucket
        skip_cleanup: true
        local_dir: dist-user1 # 如果USER1的产物目录不同,这里单独指定
        on:
          branch: master
    - env: MHTD=USER2 BUILD_NAME1=web-user2
      install: yarn build-web:"$BUILD_NAME1"
      # 单独配置USER2的S3部署
      deploy:
        provider: s3
        access_key_id: $AWS_USER2_ACCESS_KEY_ID
        secret_access_key: $AWS_USER2_SECRET_ACCESS_KEY
        bucket: user2-s3-bucket
        skip_cleanup: true
        local_dir: dist-user2
        on:
          branch: master

关键注意事项
  • skip_cleanup: true必须设置:Travis默认会在部署阶段清理所有构建生成的文件,不开启这个选项的话,你的产物会被删掉,导致部署空内容。
  • AWS凭证的安全处理:不要把AWS密钥直接写在配置文件里,用Travis的加密功能处理:
    • 终端执行travis encrypt AWS_ACCESS_KEY_ID=你的密钥ID --add,Travis会自动把加密后的变量加到你的.travis.yml里。
  • 产物目录要准确:local_dir必须指向你构建命令生成的文件所在的目录,比如如果yarn build-web把文件生成到build文件夹,就填build。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:51:25