NEW Run your Ruby tests in a few minutes and ship faster with Boosters, one-click auto parallelization · Learn more…

Semaphore Blog

News and updates from your friendly continuous integration and deployment service.

Announcing Semaphore Community

Get future posts like this one in your inbox.

Follow us on

Today we’re very happy to announce the launch of Semaphore community, our new initiative to build a vast knowledge base about test-driven development, continuous delivery and devops automation.

Rendered Text team behind Semaphore community

At Rendered Text, we’ve always been passionate about best practices and software quality. The software craftsmanship idea is something that resonates with our personal engineering values. It was true before Semaphore existed, was one of the reasons we decided to make a continuous integration product, and continues to motivate us every day.

With making and improving Semaphore, our goal has been to make continuous integration available to every developer, because we know that adopting that practice helps make better software, faster. Delivering a product that makes it super easy to use and scale CI is what we’ve been doing so far. But that’s only one part of the mission.

The bar to continuous integration, and further, a full continuous delivery process remains high. Developers need not only learn how to write good, clean code but also adopt test-driven development. Then they begin to see new problems that lead them to understand and apply behavior-driven development. Finally, they need to cross the chasm to efficient delivery and maintenance with emerging continuous delivery and devops automation practices.

Learn from tutorials

Our main goal with Semaphore community is to capture the state of the art in the industry and make it easily accessible to a wide audience of developers. For these reasons, the core of the new site are tutorials on test-driven development, continuous integration and devops automation. We are starting with over 20 original articles on a wide range of topics, from a general introduction to CI, a series that teaches you RSpec from scratch and how to test Clojure web applications with Selenium to integration testing Chef cookbooks.

All tutorials are published under the Creative Commons attribution, non-commercial share-alike international license.

You are also invited to submit your own tutorial. We will publish more information on that in a separate blog post.

Follow the topics that interest you

All articles are tagged accordingly and you can easily subscribe to tags to receive an email whenever a new article on the technology you’re interested in is published. You can also subscribe to updates on individual articles. Our goal is to keep them fresh.

Connect with other developers

All tutorials have comments built in, so you can easily engage in a discussion with other developers and share your tips. If you’d be interested in participating in forum focused on CI, BDD and devops, please let us know.

Explore how other developers work

On the community homepage you will also find links to some interesting open source projects on Semaphore and interviews with teams of successful software companies which have been published on this blog earlier. As with everything else, our goal is to share not just our knowledge, but help others tell about their experience as well. If you’d like your team to be featured, please get in touch.

Terms of Service update

Since Semaphore is now about to publicly host content created by its users, we’ve updated our Terms of Service with new sections that:

  • Clarify what we consider inappropriate user behavior after registration.
  • Updated user conduct section regarding user content.
  • Added a new section on content and user content.

Please let us know what you think about Semaphore community, either in the comments below or by directly contacting us via support or email.

Happy building!

P.S. —
If you like what you find, tell your peers about by sharing a link on social networks.

Platform update on March 24th

The upcoming platform update is scheduled for Tuesday, March 24th, 2015.

Git is now on version 2.3.3.

io.js get an update with version 1.5.1.

Java 8 gets an update with Oracle JDK 8u40.

MongoDB is updated to version 2.6.8. You can get more insight into the major changes by checking out the official changelog.

PHP gets three updates with 5.6.6, 5.5.22 and 5.4.38.

New things

Ruby 2.2.1 has been added to the platform which fixes the memory leak issue on Symbol GC issue among other things. Check out the Ruby changelog for more information. You can switch to this version of Ruby by adding rbenv global 2.2.1 to your build commands. After the final release, it will be selectable in the interface without the need to use the command.

Trying the new platform

You can evaluate the new platform right away by selecting Ubuntu 14.04 LTS v1503 (release candidate) from the Platform section of Project Settings. We encourage you to try it out, so that we can iron out any issues you may find along the way until the final release on next Tuesday.

Changes in the final release

Node.js gets an update with version 0.10.37.

Scala is now on version 2.11.6.

A full list of changes is available in the platform changelog.

We Moved from to

We changed our URL from to

You may wonder why we did it. Back in the day when Semaphore was just an idea in our heads the concept of “continuous integration” (CI) wasn’t that widely spread. It seemed like a good idea to us to append the suffix “app” to compose an available domain name. Over time we’ve noticed many people think that it’s a part of the name of the service. Now we are dropping the “app” for “ci” to be more easily recognised as a CI service.

Nothing else changes. We are still the same Semaphore as you know us. Same people, same ideas and a slightly different URL.

We will also be supporting all v1 API actions at until the end of 2015.

If you enjoy using Semaphore, you can help us spread the word about our service by mentioning our new Twitter handle @semaphoreci in a nice tweet. Every mention helps. We appreciate your support!

Adapting to Third-party Application Restrictions on GitHub

GitHub has changed how organization administrators can control access to their repositories for third-party applications, such as Semaphore. As explained in their blog post, third-party restrictions allow you to gain a more fine grained control over your organization’s repositories and the data on GitHub.

As of February 24, 2015 this is reflecting on how Semaphore interacts for all GitHub repositories owned by organizations which have enabled third-party application restrictions. The technical details are on GitHub’s developer blog. This post summarizes the actions we are taking on Semaphore to adapt to GitHub’s new policies as well as actions you will need to take if you are an owner of an organization on GitHub.

Actions we are taking

Enabling third-party application restrictions on GitHub will invalidate all SSH keys created before February 2014, which are part of your organization. For this reason, we will regenerate deploy keys which fall into that timespan. If your project is affected, you’ll receive an email from GitHub stating that a new deploy key has been added to your repository.

Actions you need to take

If you don’t enable third-party application restriction on GitHub, there are no actions required on your side.

Restricting third-party applications for your organization has some repercussions. If you plan on using these restrictions, please consult this page on GitHub for all the details.

One notable change is that GitHub will blacklist all current SSH keys and new keys have to be approved. You’ll notice this when you try to access the organization’s repository by either a push, pull or clone actions. When this happens, an error message will guide you through the process of verifying your SSH key. This is affecting both deploy and user keys.

If you notice any anomalies, please contact us as soon as possible through a support ticket or on live chat so we can solve the issue in a timely manner.

Happy building!

Platform update on February 24th

The upcoming platform update is scheduled for Tuesday, February 24th, 2015.

Chromedriver is now on version 2.14 which supports Chrome versions v39-42.

Bundler is updated to version 1.7.13.

Elasticsearch gets an update with version 1.3.8.

Elixir is now on version 1.0.3.

Firefox is updated to version 35.0.1 which requires all projects using the selenium-webdriver gem to update it with bundle update selenium-webdriver.

Git is now on version 2.3. You can read more about the new features like push to deploy and faster cloning in GitHub’s blog post.

Java gets two updates with versions OpenJDK 7u75 and Oracle JDK 8u31.

JRuby is updated to version 1.7.19 which continues to focus on improving the compatibility with Ruby 1.9.3.

MySQL is updated to version 5.6.23.

Node.js receives an update with 0.10.36.

PHP gets three updates with 5.6.5, 5.5.21 and 5.4.37.

RethinkDB get an update with version 1.16.2

Scala is updated to 2.11.5 which fixes these 74 issues.

New things

Node.js version 0.12 is now part of the platform. It can be used by adding nvm use 0.12 to your build commands. This version will be selectable in the interface after the final release of the platform without the need to use the command.

Another newcomer to the platform is io.js version 1.2.0. io.js is a fork of Node.js, built against the latest V8 versions including many ES6 features out-of-the-box.

LFTP is now included by default.

Trying the new platform

You can evaluate the new platform right away by selecting Ubuntu 14.04 LTS v1502 (release candidate) from the Platform section of Project Settings. We encourage you to try it out, so that we can iron out any issues you may find along the way until the final release on next Tuesday.

Changes in the final release

Cassandra is now on version 2.1.3.

Firefox’s update has been held back because version 35.0.1 has some compability issues with the latest selenium-webdriver gem version 2.44.0.

Qt version 5.2.1 is now part of the platform. Qt versions are selectable by creating an environment variable named QT_SELECT in Project Settings and assigning it a value of 4 or 5 depending on which Qt version you would like to use. The default version is set to 4.8.1.

A full list of changes is available in the platform changelog.

Schedule Continuous Integration Builds Easily

Today we’re launching the build scheduler — an easy way to run anything on Semaphore on a daily or hourly basis.

Continuous integration build scheduler on Semaphore

Using the scheduler you can

  • Set up nightly builds.
  • Perform automated quality assurance (QA) tests on a remote server.
  • Keep the build of an inactive project up to date.
  • Periodically run any kind of job.

Configuring the scheduler is very simple. In the “Build Scheduler” project settings tab, select a branch, set a daily or hourly time when you would like your job to run and you’re done. Your configured build commands will run at designated time, no hands.

Note that if your project is configured for continuous deployment, a successful scheduled build will also trigger a deploy, just like a regular build.

Happy building!

SSH Access to Your CI Environment

With great pleasure we are announcing the release of a new tool on Semaphore) — the ability to SSH into your CI environment.

SSH access to your CI environment

As of today, you are able to interactively inspect and run commands in the Semaphore environment right from your terminal.

This new feature enables you to easily find the subtle differences between your local development environment and the Semaphore platform that are a frequent cause of hard-to-debug build failures.

If your project has a complex setup for its build environment, an SSH session can also be of great help. After inspecting the environment and making your tests pass in the SSH session, you can easily copy the steps and configuration for your automated builds.

Starting an SSH session

To SSH into the Semaphore environment, open one of your recent builds and look for the Launch SSH button to start a new build environment.

Starting an SSH session on Semaphore

Semaphore will start an environment identical to the one of your current build or deploy:

  • Your project’s Git repository will be checked out at the same revision.
  • Semaphore will also export any configuration files and environment variables which you have configured in your project’s settings.

Note: The first time you launch a session, Semaphore will guide you through the process of setting up a public key. You can find out more about setting up public SSH keys in our documentation.

We’re rolling this feature out to all users in the coming days.

We hope that you will enjoy this feature as much as we do. Happy SSH-ing!

Visualizing the Deployment Pipeline

Today we’re rolling out a refresh of server pages on Semaphore. Servers define a deployment pipeline from your Git repository, going through a build on Semaphore to make sure all tests pass and finally to a deploy to your staging or production server(s). They also make it very easy to get an overview of how much you are shipping.

New server page for continuous deployment on Semaphore

In this redesign we focused on making the pipeline clear with three distinct elements: a commit, build and deploy. We tried to do that in the previous incarnation, but eventually realized that every line in the feed was composed in a way that is hard to grasp.

Improved readability

We also wanted to make the deploy history easier to read. We realized that in practice most of the builds that are being deployed originate from a “merge” commit. While Semaphore lets you write a custom deploy message in case of a manual deployment strategy, in case of fully automated continuous deployment this is currently not possible. And if you are using GitHub, that means that most of the deploy messages look something like this:

Merge pull request #1256 from renderedtext/ma/pray-that-branch-name-is-very-descriptive

For this reason, deploy history now shows the first line below the merge information, as you can see for example in the “current deploy” block:

Expanded current deploy message on Semaphore

Start deploying from Semaphore

If you are not deploying through Semaphore yet, now is a good time to start. It saves your team a lot of communication overhead as it is completely transparent what was deployed and when. The deployment process is one click away for the whole development team, which is very important if your goal is for developers to own their features completely.

We have actually been deploying the main Semaphore web application continuously from master, and it has added relief, rather than stress to our workflow. In this case, every git push to master triggers a build, and if all tests pass the build automatically triggers a deploy.

Note that if you are worried about everyone having deploy access, you can easily create an organization team with reduced access rights.

We hope you like this change more than your average change of the Facebook feed. Feel free to let us know what you think, either in the comments below or the regular support channel.

Platform update on January 20th

The upcoming platform update is scheduled for Tuesday, January 20th, 2015.

Chromedriver is updated to version 2.13.

Elasticsearch is now on version 1.3.7.

MongoDB gets an update with version 2.4.12.

RethinkDB is updated to 1.15.3.

Scala is now on version 2.11.4 in which 54 issues are solved compared to version 2.11.2.

Trying the new platform

By selecting Ubuntu 14.04 LTS v1501 (release candidate) in Project Settings > Platform, you can try out this platform update right away. To avoid any problems during the final release next Tuesday, we encourage you to try out this release candidate so we can make the necessary fixes if needed.

A full list of changes is available in the platform changelog.

Ruby 2.2.0 Available In a Minor Platform Update

We just released a minor platform update — v1412.1.

Ruby 2.2.0 is added featuring a better garbage collector and other performance improvements.

Erlang has been updated to version 17.4.

Elixir is now on version 1.0.2.

Git received a new version with 2.2.1 with important security fixes.

JRuby is updated to 1.7.18 with a main goal to improve compatibility with Ruby 1.9.3.

PostGIS is now on version 2.1.5.

PHP receives multiple updates with 5.4.36, 5.5.20, 5.6.4.

NodeJS gets two updates with versions 0.10.35 and 11.14.

A full list of changes is available in the platform changelog.

Get future posts like this one in your inbox.

Follow us on