You're on your way to the next level! Join the Kudos program to earn points and save your progress.
Level 1: Seed
25 / 150 points
1 badge earned
Challenges come and go, but your rewards stay with you. Do more to earn more!
What goes around comes around! Share the love by gifting kudos to your peers.
Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!
Join now to unlock these features and more
Hello! I have a Ruby on Rails app that I'm using bitbucket pipelines to deploy to Heroku. I have tests in the app that use minitest, capybara, selenium, and webdrivers. For system tests, I have an application_system_test_case.rb file with this class that specifies the headless chrome browser and the system test files inherit from it:
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by :selenium, using: :headless_chrome, screen_size: [1400, 1400]
I've gotten the normal tests (model, controller, helper, etc) to successfully run in the pipeline, but if I try to run the system tests, I get errors related to the chrome browser not running properly. I've tried various ideas, but haven't been able to get it to work. Here is my bitbucket-pipelines.yml:
name: Deploy dev branch
# install nodejs & yarn
- apt-get update && apt-get install -y build-essential nodejs
- curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
- echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
- apt-get update
- apt-get install -y yarn
- yarn install
# install gems
- gem install rails
- bundle install --path vendor/bundle
# set up postgres
- export DATABASE_URL=postgresql://test_user:test_user_password@localhost/pipelines
- bundle exec rake db:create db:migrate --trace RAILS_ENV=test
- bundle exec rails test
- git push [to server]
Anyone know how to get this to work?
I stumbled upon this post looking for an answer to this exact question.
I have spent the last two days trying and debugging various techniques to get this working for me, and I’m happy to say it finally works.
The issue with Chrome is that it crashes when run with a root user.
How I solved it was to use the following Dockerfile, push it to Docker and use it as the pipeline image
# Set the TERM environment variable
# Install dependencies
RUN apt-get update -qq && apt-get install -y \
# Install Chrome
RUN curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
RUN apt-get update && apt-get install -y google-chrome-stable
# Install Yarn
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
&& apt-get update && apt-get install -y yarn
# Clean up
RUN apt-get autoremove -y && apt-get clean
# Set work directory in container
# Copy the rest of the application into the work directory
COPY . /myapp
# Install Bundler
RUN gem install bundler -v 2.3.7
RUN bundle config set --global path "vendor/bundle"
# Change user
RUN useradd -ms /bin/bash appuser
RUN chown -R appuser:appuser /myapp /usr/local/bundle
This was useful to me because I was running many tests in parallel, so the Docker image saved me load times.
You may be able to run "useradd" and "chown" and set the user as steps in your bitbucket-pipeline.yml, but I haven't tried that myself.
EDIT: You may also note the "# Install Chrome" section that may be necessary to make sure it's present in your build.