{{announcement.body}}
{{announcement.title}}

How to Manage Continuous Releases With Travis CI and Sentry.io

DZone 's Guide to

How to Manage Continuous Releases With Travis CI and Sentry.io

In this article, we discuss how to manage continuous releases with Travis CI and Sentry.io to improve our CI/CD pipelines.

· DevOps Zone ·
Free Resource

Here at Sentry, we use Travis CI, a continuous integration tool for GitHub that lets us automate our tests and view the results right within a pull request. In this blog post, we’ll walk through a quick example of how to automatically create Sentry Releases with Travis CI when a commit is pushed to your project’s master branch. 




 


0
 Advanced issue found

1
Monitoring releases with Travis CI


Note: since we support so many platforms, we use Travis CI to test out code in multiple environments in parallel. You can see the getsentry/sentry repo's Travis config file here if you're curious!

Setting up Your Travis CI Configuration File

If you’re new to Travis CI, take a look at their getting-started guide to set up your account. You’ll also need a GitHub repository to run Travis CI; it currently doesn’t support other platforms.

Travis configurations are defined in a .travis.yml file within your project’s repository. At minimum, you’ll need to set one of Travis CI’s supported programming languages and its version number. For example, here’s a super minimal config file using Node.js:

YAML
 




xxxxxxxxxx
1


 
1
    language: node_js
2
    node_js:
3
      - 8



Based on the programming language, Travis CI uses intelligent defaults to build and test your project in two phases: the install phase and the build phase. In the example above, Travis will automatically run npm install for the install phase and npm test for the build phase.

To customize the build process, Travis CI offers hooks to run your own commands at different stages in the job lifecycle. To run a custom build script, you can use the script hook:

YAML
 




xxxxxxxxxx
1


 
1
    language: node_js
2
    node_js:
3
      - 8
4
    script: echo "Building all the things"



Learn more about Travis CI’s job lifecycle hooks in their docs.

Building When Commits Are Pushed to Master

Travis CI lets you trigger new builds with two events: when a branch is pushed and when a pull request is created. By default, both events will trigger a build. You can change this behavior in the settings page for your project:

Let’s say we want to run our tests on both events (pull requests and commits/merges), but we only want to create a new Sentry Release for commits/merges — and only for the master branch.

To set this up, we’ll use the jobs key to run multiple scripts, with the if key to specify conditions for one of the scripts. In this case, if the triggering event is a push and the branch is master:

YAML
 




xxxxxxxxxx
1


 
1
  jobs:
2
      include:
3
        - name: Run tests
4
          script: npm test
5
        - name: Create Sentry Release on push to master
6
          if: (type = push AND branch = master)
7
          script: # We'll cover this in the next sections



Learn more about conditional builds in the Travis CI docs.

When Travis runs the build, you can see the status of each separate job to verify which scripts are being run for each build that’s been triggered:

Scripts triggered by build

Creating a Sentry Internal Integration

Our Integration Platform allows developers to connect Sentry with third-party tools — either as Public Integrations that anyone can use or as Internal Integrations built only for one organization to combine Sentry with their internal tools and custom workflows.

To create a new Internal Integration, navigate to Settings > Developer Settings > New Internal Integration within Sentry. There, you’ll give your new integration a title (for example, “Create Sentry Releases with Travis CI”), choose which permissions to use, and get your token for authenticating with Sentry’s API.

Setting Permissions

You can apply different sets of permissions for each integration. For this one, we’ll need Admin access for “Release” and Read access for “Organization”:Setting access

Next, click “Save” at the bottom of the page and then grab your token:

Getting access token

In the next section, we’ll use this Internal Integration token to enable Travis CI to authenticate with Sentry’s API when creating a new Release.

Creating Sentry Releases With Travis CI

First things first: you’ll need to enable Sentry Releases by linking your commit metadata to your Sentry project. The simplest way to set this up is to use our GitHub integration to link your repository to Sentry. (Reminder again that Travis CI only supports GitHub.)

Setting Environment Variables

To create our Releases, we’ll use the Sentry command line interface (CLI), which uses a few environment variables to connect to your Sentry project:

  • SENTRY_AUTH_TOKEN - Your Internal Integration token.
  • SENTRY_ORG - Your Sentry organization slug.
  • SENTRY_PROJECT - Your Sentry project slug.

Travis CI supports both public and private environment variables. For our non-sensitive environment variables, you’ll add them to .travis.yml. For private environment variables, you can add them via the Travis admin backend on the “Repository Settings” page for your project. (See their docs for details.) Any variables saved there will be redacted in your logs, appearing as [secure] so that your private data can’t be revealed accidentally. This is where you should save your SENTRY_AUTH_TOKEN variable:

Setting environment variables

Note: If you define a variable with the same name in both your settings page and your config file, the value in your config file will take precedence.

Next, define your Sentry organization and project as public variables using the env key in your .travis.yml config file. By default, Travis runs a separate build for each environment variable in the list; to set multiple environment variables for a single build, you can define them all on one line:

YAML
 




xxxxxxxxxx
1


 
1
    env:
2
        - SENTRY_ORG=myorg SENTRY_PROJECT=myproject



Using the Sentry Command Line Interface to Create Releases

Finally, to install the Sentry CLI and create a new Sentry release after the build phase has completed successfully, we’ll use the following Bash commands in Travis CI’s script hook:

YAML
 




xxxxxxxxxx
1


 
1
    script: | 
2
      curl -sL https://sentry.io/get-cli/ | bash
3
      export SENTRY_RELEASE=$(sentry-cli releases propose-version)
4
      sentry-cli releases new -p $SENTRY_PROJECT $SENTRY_RELEASE
5
      sentry-cli releases set-commits --auto $SENTRY_RELEASE
6
      sentry-cli releases finalize $SENTRY_RELEASE



The Sentry CLI commands above create a new release in Sentry using your project’s most recent Git SHA, and then associates it with the commits from your local repository. For more details on each command, check out our docs page on release management with the Sentry CLI.

Here’s our complete .travis.yml file to create a new Sentry release whenever a commit is pushed to the project’s master branch:

YAML
 




xxxxxxxxxx
1
16


 
1
    language: node_js
2
    node_js:
3
      - 8
4
    jobs:
5
      include:
6
        - name: Run tests
7
          script: npm test
8
        - name: Create Sentry Release on push to master
9
          if: (type = push AND branch = master)
10
                env: SENTRY_ORG=myorg SENTRY_PROJECT=myproject
11
          script: |
12
                  curl -sL https://sentry.io/get-cli/ | bash
13
                  export SENTRY_RELEASE=$(sentry-cli releases propose-version)
14
                  sentry-cli releases new -p $SENTRY_PROJECT $SENTRY_RELEASE
15
                  sentry-cli releases set-commits --auto $SENTRY_RELEASE
16
                  sentry-cli releases finalize $SENTRY_RELEASE



Be sure to check out our documentation for more details about managing Sentry releases.

Verifying That Your Sentry Releases Are Working

To trigger Travis CI to run a new build, you’ll need to push a new commit to your GitHub repository. (Be sure to push the commit to whichever branches you specified in your config file.) Then, you can read the complete build log in your Travis CI admin backend.

If your new build succeeded, log into your Sentry account and take a look at your project’s “Releases” page. You should see a brand new release listed for your project, listing the SHA of your latest commit:

Listing SHA for latest commit

Next, you can use the Sentry CLI to send an event for your project to confirm that new events will be correctly associated with the latest release. If you run this from within your project’s Git repository, the current release will be linked to the event automatically:

Shell
 




xxxxxxxxxx
1


 
1
   export SENTRY_DSN=https://mydsnhere@sentry.io/1234
2
   sentry-cli send-event -m "Test event, should be linked to the latest release"



After sending the test event, you’ll see a new unresolved issue associated with your Sentry project’s latest release:

Continuously integrate With Custom Integrations

We’re big fans of integration in all forms. We use Travis CI for our own continuous integration, and we have an Integration Platform to let all developers integrate Sentry with their favorite tools and custom workflows.

Topics:
ci/cd ,devops ,integration ,sentry ,travis ci ,tutorial

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}