如何配置.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_js、python),完美适配不同子项目的技术栈差异。 - 加密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




