Travis CI中Ruby进程退出码为1的问题排查求助
我帮你梳理下可能导致构建失败的几个关键问题,咱们一个个来解决:
1. Node.js配置语法错误
你的.travis.yml里Node.js的配置格式写错了:
node_js: - 12 # 错误格式
正确的写法应该是直接指定版本号,或者用数组格式(如果需要多个版本):
node_js: 12 # 或者多个版本的话: # node_js: ["12"]
这个语法错误会让Travis无法正确解析配置文件,直接触发构建失败,这大概率是首要原因。
2. 多余的bundle install执行
Travis默认会自动检测Gemfile并执行bundle install,而且你已经配置了bundler: true的缓存,手动在script里再写bundle install完全没必要,甚至可能因为缓存的依赖和当前Gemfile.lock不匹配引发冲突。建议删掉这一行。
3. 废弃的db:test:prepare命令
在Rails 5及之后的版本,rake db:test:prepare已经被废弃了——你已经执行了bundle exec rake db:schema:load,这一步已经会自动初始化测试数据库,重复执行db:test:prepare反而可能导致数据库状态混乱,直接删掉这一行即可。
4. 系统测试缺少ChromeDriver
你安装了google-chrome-stable,但没安装对应的ChromeDriver,系统测试启动Chrome时会找不到驱动,导致失败。可以在before_install里添加ChromeDriver的安装步骤:
before_install: - sudo apt-get update - sudo apt-get install google-chrome-stable # 新增ChromeDriver安装 - wget -N https://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip - unzip chromedriver_linux64.zip - sudo mv chromedriver /usr/local/bin/ - sudo chmod +x /usr/local/bin/chromedriver
另外,也可以用Travis的官方Chrome addon来简化安装,替换手动apt-get的步骤:
addons: postgresql: '9.6' chrome: stable # 用这个代替手动安装Chrome
5. 优化资产预编译步骤
在production环境预编译资产时,确保yarn依赖已经安装完整,你可以在before_install里加上yarn install(虽然Travis可能自动处理,但手动加更保险)。另外,也可以考虑在测试环境预编译?不过如果你需要验证生产环境的预编译,当前的写法没问题,但要确保所有依赖都到位。
修改后的完整.travis.yml示例
language: ruby node_js: 12 cache: bundler: true yarn: true services: - redis-server sudo: required addons: postgresql: '9.6' chrome: stable before_install: - yarn install # 安装ChromeDriver - wget -N https://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip - unzip chromedriver_linux64.zip - sudo mv chromedriver /usr/local/bin/ - sudo chmod +x /usr/local/bin/chromedriver before_script: - psql -c 'create database product_hunt_clone_test;' -U postgres script: - bundle exec rake db:schema:load - SECRET_KEY_BASE=a RAILS_ENV=production bundle exec rake assets:precompile - bundle exec rake test - bundle exec rake test:system
按照上面的修改调整后,重新触发Travis构建,应该能解决大部分问题。如果还是失败,可以把控制台的具体错误信息贴出来,咱们再进一步排查。
内容的提问来源于stack exchange,提问作者problems

