How do you set up a CI/CD pipeline for a Ruby on Rails application using GitHub Actions?

12 June 2024

In this ever-evolving world of software development, continuous integration and continuous delivery (CI/CD) practices have become a staple. They streamline the development process, offer faster and more frequent releases, and reduce the risk of introducing bugs. In particular, the powerful tool, GitHub Actions, can help you set up a CI/CD pipeline for your Rails application with ease and efficiency.

This detailed guide will walk you through how to install, create, and use a GitHub Actions workflow for your Ruby on Rails application. We will cover every step from the initial setup to pushing the final code to your GitHub repository.

Understanding GitHub Actions

In the heart of GitHub lies GitHub Actions - a helpful tool that allows you to automate various steps in your development lifecycle. It comes in handy when you want to build, test, and deploy your applications hosted on GitHub. You can even write individual tasks, called 'actions', and combine them to create a custom workflow.

Workflows are custom automated processes that you can set up in your repository to build, test, package, or deploy any code project on GitHub. These workflows are defined in YAML files and respond to specific events such as a code push, pull request, or issue creation.

Setting Up the GitHub Actions Runner

To get started, you need to install a GitHub Actions runner. The runner is a piece of software that runs on your server or local machine and executes the jobs defined in your workflow.

To install the runner, navigate to your GitHub repository and click on 'Settings'. From there, select 'Actions' and then 'Runners'. You'll see an 'Add runner' button on the right side of the screen. Click on it, and a new window will open with instructions on how to install and configure the runner based on your operating system.

You'll need to download the runner package, extract it, and then run the configuration script by providing a token that GitHub generates for you. Once you've done this, you can run the runner application and it will start to listen for available jobs from GitHub.

Creating Your First GitHub Actions Workflow

With the runner installed and listening, it's time to create your first GitHub Actions workflow. You'll place this workflow file in a directory named .github/workflows in the root of your repository.

To create a new workflow file, navigate to your repository and click on 'Actions'. Next, click on 'New workflow' and then 'set up a workflow yourself'. This will open a new file in fullscreen mode with a basic template.

Let's name this file 'rails_ci.yml'. Your code should look something like this:

name: Rails CI

    branches: [ main ]
    branches: [ main ]

    runs-on: ubuntu-latest

    - uses: actions/checkout@v2

    - name: Set up Ruby
      uses: ruby/setup-ruby@v1
        ruby-version: 3.0.1

    - name: Install dependencies
      run: bundle install

    - name: Run tests
      run: bundle exec rspec

This workflow is triggered whenever a push or pull request is made to the 'main' branch.

Building Your Ruby on Rails Application

Once your workflow file is set up, you can now build your Ruby on Rails application. The workflow steps are pretty straightforward. After checking out your code, it uses the 'ruby/setup-ruby@v1' action to set up the specified Ruby version. Then, it installs any necessary dependencies using 'bundle install'. Lastly, it runs your tests using 'bundle exec rspec'.

You can further customize these steps according to your needs. For example, you can add a step to deploy your application after the tests have passed.

Pushing Your Code to the Repository

Once you're satisfied with your workflow, it's time to push your changes to the repository. Save your workflow file and exit the fullscreen mode. Commit the file by providing a meaningful commit message, then push the commit to your main branch.

After pushing the changes, GitHub will automatically trigger the workflow. You can monitor the process and see the results in the 'Actions' tab of your repository.

When setting up a CI/CD pipeline for a Ruby on Rails application using GitHub Actions, there might be a learning curve involved, especially if it's the first time you're trying to automate your development process. But once you've gone through this process, it will become second nature. You'll be able to quickly and efficiently set up workflows for any Ruby on Rails project you work on in the future.

Fine-Tuning Your Workflow for Continuous Integration

After setting up your basic GitHub Actions workflow, you might want to fine-tune it to meet the unique needs of your Ruby on Rails application. The great thing about GitHub Actions is that it gives you the flexibility to customize your workflows to your liking.

One of the key benefits of continuous integration is the ability to run tests on your code whenever changes are pushed to the repository. In the 'rails_ci.yml' file, this is achieved with the 'run: bundle exec rspec' command. However, you might want to run other tests or even add a linter to your code to ensure code quality and consistency.

Similarly, depending on the complexity of your application, you might need to set up a database for your tests. You can do this by adding additional steps to your workflow file. For instance, to set up a PostgreSQL database, you would add the following steps before running the tests:

- name: Set up PostgreSQL
  run: |
    sudo apt-get -yqq install libpq-dev
    sudo systemctl start postgresql
    sudo -u postgres createuser --superuser $USER
    sudo -u postgres createdb $USER
- name: Check PostgreSQL
  run: |
    which psql
    psql -c 'CREATE DATABASE test_db;' -U postgres

Remember to update your database configuration in 'config/database.yml' to use this database for your tests.

Furthermore, you might want to run your tests on different environments or against different ruby versions. You can do this by using a matrix strategy. With this strategy, your tests will run in parallel, which can significantly speed up your testing process.

Streamlining Continuous Delivery with GitHub Actions

After you've set up your continuous integration workflow, the next step is to streamline your continuous delivery process. With GitHub Actions, you can automate the deployment of your Rails application whenever changes are pushed to the main branch.

For instance, if you're using AWS Elastic Beanstalk for deployment, you can add the following steps to your 'rails_ci.yml' file:

- name: Deploy to Elastic Beanstalk
  uses: einaregilsson/beanstalk-deploy@v13
    aws_access_key: ${{ secrets.AWS_ACCESS_KEY }}
    aws_secret_key: ${{ secrets.AWS_SECRET_KEY }}
    application_name: my-application
    environment_name: my-environment
    version_label: ${{ github.run_id }}
    region: us-west-2

Remember to replace 'my-application' and 'my-environment' with your actual application and environment names.

With these steps added to your workflow, your Rails application will be built, tested, and deployed automatically whenever changes are made to the main branch. This not only saves you a significant amount of time but also ensures that your application is always running the latest and greatest code.

Setting up a CI/CD pipeline for your Ruby on Rails application using GitHub Actions doesn't have to be daunting. By breaking down the process into manageable steps, this guide has shown you how to get started with GitHub Actions, create your first workflow, fine-tune it for continuous integration, and streamline your continuous delivery process.

However, the power of GitHub Actions doesn't stop there. You can further customize your workflow to meet your specific needs, whether that's running tests against different Ruby versions, setting up a database for your tests, or deploying your application to AWS Elastic Beanstalk.

Embracing continuous integration and continuous delivery practices can significantly improve your productivity as a developer and the quality of your code. With GitHub Actions, setting up a CI/CD pipeline for your Rails application is easier than ever. So what are you waiting for? Start building, testing, and deploying your Ruby on Rails applications more efficiently with GitHub Actions today!

Copyright 2024. All Rights Reserved