You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何配置.travis.yml以构建并部署仓库中子文件夹内的多项目?

如何用.travis.yml构建并部署仓库内的多个独立子项目到Heroku

当然可行!Travis CI的多Job配置完全能适配你这种场景——每个子项目作为独立Job,各自设置专属的技术栈、构建脚本和Heroku部署目标,互不干扰。下面是具体的实现方案和示例:

核心思路

通过jobs: include字段定义多个独立的Job,每个Job对应一个子项目:

  • 为每个Job指定专属的工作目录(子文件夹)
  • 单独配置该项目的编程语言及版本
  • 编写对应项目的构建/测试脚本
  • 设置独立的Heroku部署参数

完整配置示例

# 顶层语言设为generic,因为每个Job会单独指定语言
language: generic

jobs:
  include:
    # Job 1: 前端子项目(Node.js技术栈)
    - name: "构建并部署前端到Heroku"
      language: node_js
      node_js: 18 # 指定Node.js版本
      working_directory: ./frontend # 切换到前端子文件夹
      script:
        - npm install # 前端依赖安装
        - npm run build # 前端构建命令
      deploy:
        provider: heroku
        app: your-heroku-frontend-app # 你的Heroku前端应用名称
        api_key:
          secure: YOUR_ENCRYPTED_HEROKU_KEY # 加密后的Heroku API密钥
        on:
          branch: main # 仅在main分支触发部署

    # Job 2: 后端子项目(Python技术栈)
    - name: "构建并部署后端到Heroku"
      language: python
      python: 3.10 # 指定Python版本
      working_directory: ./backend # 切换到后端子文件夹
      script:
        - pip install -r requirements.txt # 后端依赖安装
        - pytest # 后端测试脚本(按需调整)
      deploy:
        provider: heroku
        app: your-heroku-backend-app # 你的Heroku后端应用名称
        api_key:
          secure: YOUR_ENCRYPTED_HEROKU_KEY
        on:
          branch: main

    # 可继续添加更多子项目的Job...

关键配置说明

  • working_directory: 替代手动cd subfolder的最佳方式,Travis会自动切换到指定目录执行后续所有步骤,确保每个Job的操作都局限在对应子项目内。
  • 独立语言配置: 每个Job可以单独设置language及对应版本(比如node_jspython),完美适配不同子项目的技术栈差异。
  • 加密Heroku API密钥: 绝对不要明文写API密钥!用Travis CLI生成加密字符串:
    travis encrypt HEROKU_API_KEY=你的真实API密钥 --add deploy.api_key
    
    执行后会自动把加密后的内容写入.travis.yml
  • 条件触发优化: 可以给Job添加if条件,只在对应子项目有代码变更时运行,节省构建资源:
    - name: "构建并部署前端到Heroku"
      if: branch = main AND changes include frontend/**/*
      # 其他配置...
    
  • 并行/串行执行: 默认所有Job并行运行,若需要串行执行,可在jobs下添加fast_finish: true,并结合条件控制实现串行逻辑。

注意事项

  • 每个子项目的根目录需包含对应技术栈的配置文件(比如Node.js的package.json、Python的requirements.txt),Travis会在working_directory下读取这些文件。
  • 如果某个子项目只需要构建测试无需部署,直接去掉该Job的deploy部分即可。

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

火山引擎 最新活动