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.

Ruby Versions Used in Commercial Projects, 2016 Edition

Get future posts like this one in your inbox.

Follow us on

Which versions of Ruby do people use when building apps at work? This is the question we’ve been answering for fun for four years now, based on data about private projects that are tested and deployed on Semaphore.

Ruby version usage for commercial projects on Semaphore

Since our last year’s report, Ruby 2.3 has been released, and the trend towards moving to newer versions has continued. Nearly 85% of all commercial projects are now using some version of Ruby 2, up from 79% last year.

Ruby version adoption for private projects over the years

In practice, teams seem to treat minor versions as “major”, and if we put the data that way, the trend towards increasing overall fragmentation continues:

Ruby version fragmentation

The charts above take into account all active projects. What would the picture look like if we focused only on the projects started in 2016? Well, Semaphore knows only when a project’s CI/CD was set up, so we can take that as an approximation:

Ruby version usage for commercial projects on Semaphore

Most people are starting with the latest version(s). That’s great!

What’s your team’s approach to keeping up with new Ruby releases? Feel free to discuss in the comments below.

P.S. Looking for CI/CD solution that’s easy to use, fast and supports all Ruby versions out of the box? Try Semaphore for free.

Video Tutorials on Setting up Continuous Integration and Deployment with Semaphore

We at Semaphore are all about continuous learning and sharing knowledge — our team spends a lot of time learning from various online and offline sources, as well as sharing our knowledge by writing and editing tutorials on TDD and BDD best practices, which we publish in the Semaphore Community.

One of the YouTube channels our developers regularly follow is Will Stern’s LearnCode.academy, where he posts useful video tutorials covering a wide range of topics, including React.js, Node.js, Angular.js, Docker, DevOps, and deployment strategies.

Continuous Integration and Deployment with Semaphore

We’ve recently had the pleasure of working with Will, who wrote an excellent tutorial on unit testing for React applications for our Community. He also made video tutorials on using Semaphore for testing a Node.js application, and on continuous deployment with Semaphore.

Continuous Integration for JavaScript Applications

The first video will help you get continuous integration up and running for a JavaScript project:


You can also read Will’s tutorial on getting started with unit testing for a React and MobX application using Enzyme and Jest in our Community.

Continuous Deployment with Semaphore

In the second video, Will covers how to improve development workflow with continuous deployment:


If you’re just starting out with continuous integration and deployment, or you just haven’t tried Semaphore yet, you can use Semaphore to test your open source projects for free, or start a 30-day free trial for your private projects.

Happy building!

Minor platform update on September 29th

We received a number of reports that the newly updated Bundler (version 1.13.0) wasn’t correctly resolving dependencies due to a bug in its code. Sadly, this wasn’t detected during the release candidate period of the 1609 platform, and it slipped into production. We’ll try our best to prevent situations like this from happening in future platform updates.

The 1609.1 update reverts Bundler to version 1.12.5.

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

Platform Update on September 27th

The upcoming platform update is scheduled for September 27th, 2016.

Bundler has been updated to version 1.13.0.

ChromeDriver gets an update with version 2.24.

Firefox ESR receives an update with version 45.3.0.

Go gets an update with version 1.7.1.

JRuby gets two version updates, namely 1.7.26 and 9.1.5.0.

MySQL gets a version update with 5.6.33.

PHP receives two updates with versions 5.6.26 and 7.0.11.

RethinkDB gets an update with version 2.3.5.

wkhtmltopdf has been updated to version 0.12.3.

New things

The following additions will be available after switching to the release candidate platform.

Amazon ECS CLI version 0.4.4 is now part of the platform.

NodeJS 6.6.0 and 4.5.0 have been added to the platform. To use them in your builds, add nvm use 6.6 or nvm use 4.5 to your build commands. These versions will be selectable in Project Settings after the release candidate period.

Trying the new platform

To ensure that the updates are compatible with your current setup, please switch to the Ubuntu 14.04 LTS v1609 (release candidate) platform in Project Settings > Platform. We’re looking forward to hearing your feedback and requirements, which will help us to fix the potential issues and tailor the platform to better suit your needs. The release candidate period will last until September 27th, 2016.

Changes in the final release

The Docker-enabled platform gets an update with docker-engine version 1.12.1.

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

Platform Update on August 23rd

The upcoming platform update is scheduled for August 23rd, 2016.

ChromeDriver gets an update with version 2.23.

Git has been updated to version 2.9.3.

MySQL receives an update with version 5.6.32.

Node.js gets an update with version 6.3.1.

Oracle JDK 8 has been updated to version 8u101.

PHP gets three version updates with 7.0.9, 5.6.24, and 5.5.38.

RabbitMQ has been updated to version 3.6.5.

New things

The following additions will be available after switching to the release candidate platform.

Go 1.7 is now part of the platform. To use it, add change-go-version 1.7 to your setup commands. This version will be selectable in Project Settings after the release candidate period ends.

A new tool called install-package has been added to the platform. Its main purpose is to install and cache packages from APT. Instead of using sudo apt-get install <pkg1> <pkg2>, use install-package <pkg1> <pkg2>. It will preserve the installed packages and re-use them in consequent builds, avoiding always needing to fetch them from an APT mirror. Please keep in mind that this tool is still under development, so do let us know if you run into any issues.

Trying the new platform

To ensure that the updates are compatible with your current setup, please switch to the Ubuntu 14.04 LTS v1608 (release candidate) platform in Project Settings > Platform. We’re looking forward to hearing your feedback and requirements, which will help us to fix the potential issues and tailor the platform to better suit your needs. The release candidate period will last until August 23rd, 2016.

Changes in the final release

Java 7 gets an update with version 7u111.

The Docker-enabled platform gets two updates with docker-engine 1.12.0 and docker-compose 1.8.0.

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

Platform Update on July 26th

The upcoming platform update is scheduled for July 26th, 2016.

Bundler gets an update with version 1.12.5.

Cassandra is updated to version 2.2.7.

Firefox receives two updates with versions 45.2.0 and 38.8.0.

Git has been updated to version 2.9.2.

Go gets and update with version 1.6.3.

Java gets an update with version 7u101.

JRuby receives an update with version 9.1.2.0.

Node.js gets several updates with versions 6.2.2, 4.4.7, 0.12.15, and 0.10.46.

PHP receives three version updates with 7.0.8, 5.6.23, and 5.5.37.

RabbitMQ is updated with version 3.6.3.

New things

The following additions will be available after switching to the release candidate platform.

Elixir 1.3.2 has been added to the platform. This brings a lot of improvements to the language and its tooling, including a new Calendar module, new mix tasks, and several ExUnit enhancements. To use it, add kiex use 1.3 to your setup commands.

Erlang 19.0 is now part of the platform. The highlights of this release include the overhauled garbage collector and improvements to erts, as well as several other language modules. You can switch to this version by adding source /home/runner/.kerl/installs/19.0 to your setup commands. The rebar3 build tool is also part of this update.

Node.js 6.3.0 is now included in the platform. This version can be activated by adding nvm use 6.3 to your setup commands.

All the mentioned additions will be selectable in Project Settings, after the release candidate period.

Trying the new platform

To ensure that the updates are compatible with your current setup, please switch to the Ubuntu 14.04 LTS v1607 (release candidate) platform in Project Settings > Platform. We’re looking forward to hearing your feedback and requirements, which will help us to fix the potential issues and tailor the platform to better suit your needs. The release candidate period will last until July 26th, 2016.

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

Continuous Delivery of Docker Images with Quay and Semaphore

Running code in different environments can often produce unexpected behavior. Development and testing environments strive to replicate production envrionments as closely as possible, but there’s still much to be desired. This is where containers come in. When using Docker-based deployments, environments for development, staging and production are virtually the same, and they can be rapidly reproduced on-demand. As more and more developers find these benefits appealing, there’s an emerging need for hosting and managing Docker images without having an own infrastructure to do so.

Continuous Delivery of Docker Images with Quay and Semaphore

Quay.io is one of the first registry-as-a-service providers. It’s focused on covering all the aspects of hosting and managing Docker and rkt images, with seamless conversion between these formats. It has an intuitive interface, which gives in-depth insights into various stages of image and team management.

For performing security scans on images, Quay.io integrates with Clair by CoreOS. Detailed reports are provided after each scan, pinpointing the security vurnelabilities and their severity. Permission handling is also an important aspect of image management, and Quay.io provides fine grained controls over image access control, including robot accounts for deployments.

Image repositories hosted on Quay.io can be public or private. The number of public repositories is unlimited. Various paid plans are available for hosting private repositories, which also include team management features. Quay.io also offers an on-permise solution with Quay Enterprise.

Configuring the Quay Integration

By integrating with Quay, we wanted to make the process of accessing your private images more stranghtforward.

Projects using Semaphore’s Docker-enabled platform can configure this integration with the Quay project add-on. To set it up, visit Semaphore Add-ons on the project page, click on “Docker Registry”, and then select the Quay registry.

Docker Container Registry with Semaphore Add-ons

A form will be shown for filling out your credentials.

Quay Setup on Semaphore

After completing this step, the authentication details will be safely stored and ready to use. When running builds and deployments, you will be automatically logged into Quay.io, giving you access to all of your images.

Quay Container Registry Deployment

For a detailed overview of your Docker images, visit the Quay.io dashboard.

Quay Container Registry Dashboard

To start building your Docker project on Semaphore using the Quay integration, create a free Semaphore account and add your Docker project.

We hope that our Quay integration will make the continuous delivery of your containerized applications more convenient. Let us know how you like it in the comments below or by contacting us on support.

Happy building! 🐳

Announcing Preview of Semaphore Enterprise Continuous Integration and Delivery

Today, we’re happy to introduce a preview of Semaphore Enterprise, a new edition of Semaphore that helps large companies take advantage of our continuous integration and delivery (CI/CD) solution, while meeting their company security standards and need for advanced support and access control. We’re also proud to announce a partnership with Docker, who will make Semaphore Enterprise available on their brand new Docker Store. Request an invite to get started.

Semaphore Enterprise Continuous Integration and Delivery

Key features

On-premise CI and CD combined with an easy-to-use web UI

Semaphore Enterprise combines the power of on-premise continuous integration and delivery with the convenience of using Semaphore’s hosted, easy-to-use user interface. With Semaphore Enterprise, your code will never leave your premises, giving you full control over the security, performance and capacity of your CI environment.

Packaged in a certified Docker container

The core component of Semaphore Enterprise is the Job Runner, packaged in a certified Docker container, which you can download from Docker Store. Announced at DockerCon in Seattle, Docker Store is currently available in limited beta. Its general availability is planned for the third quarter of this year. You can follow our blog for more information about the public launch.

Works with your preferred environment and tools

Since it runs in a Docker container, the Job Runner is simple to run and operate. Best of all, being able to run it on any machine means that Semaphore Enterprise works with any technology and on any operating system that can run Docker.

Simple to set up and use

You can run as many Job Runners as you need, and Semaphore will do the rest: distribute and coordinate jobs, send notifications, manage users and permissions, and provide API endpoints.

First-class support

One of the aspects of Semaphore we take most pride in is the support we provide to our users. From setup to release, our experienced team of developers become the extended members of your development team when needed. This gives enterprises the confidence needed to practice continuous integration and delivery even on their most complex applications.

Getting started

Semaphore Enterprise is a culmination of the experience we have gained developing one of the most popular hosted CI services, known for its ease of use, reliability and great technical support. It is currently available to try for free as a preview release. Pricing will be announced in the upcoming weeks.

We’re excited to bring this new product to you, and we’d love to hear what you think! Please feel free to post your questions or feedback in the comments below, or contact us directly on support. If you’d like to try out Semaphore Enterprise, request an invite to get started.

Next steps

Want to learn more?

Happy building! 🚀

Continuous Delivery of Docker Images with Google Container Registry and Semaphore

As more and more developers see the benefit in delivering their apps through containers, managing Docker images is becoming increasingly important. Google Container Registry (GCR) provides a way to handle this need in a simple and secure way.

Continuous Delivery of Docker Images with Google Container Registry and Semaphore

GCR runs on the Google Cloud Platform, leveraging its availability, performance and cost effectiveness. In addition to this, Google Container Engine (GKE) can run your images in a highly scalable fashion. To achieve this, a group of Compute Engine instances run Kubernetes for orchestration. Different scaling strategies can be set up and triggered by predefined usage levels of resources such as CPU and memory.

Google’s regional repositories enable fast image pull times, selecting the optimal source based on geographical location. GCR can also take advantage of Cloud Storage Nearline buckets for archival storage. Container security is important and GCR handles it by integrating with Twistlock for image scanning, access control functions and enforcing runtime security policies.

Google has been using containers to run their backend for a decade, and GKR and GCR are a great way to leverage their experience for your own contaier needs.

Configuring the Google Container Registry Integration

Docker images need to be cushioned with secure and fast infrastructure to ensure smooth delivery. Semaphore’s integraton with Google Container Registry aims to do just that. Semaphore uses GCR’s advanced authentication to automatically give you access to your private images during builds and deployments.

Projects using Semaphore’s Docker-enabled platform can configure this integration with the Google Container Registry project add-on. To set it up, visit Semaphore Add-ons on the project page, click on “Docker Registry”, and then select the Google Container Registry.

Docker Container Registry with Semaphore Add-ons

This will bring up a form where you can fill out your credentials.

Google Container Registry Setup on Semaphore

After saving the credentials, they will be safely stored and ready to use. During builds and deployments, you will automatically have access to all of your private images in the GCR.

Google Container Registry Deployment

For an overview of your deployed images, you can visit the Google Container Registry dashboard.

Google Container Registry Hub

To start building your Docker project on Semaphore using our new Google Container Registry integration, you can create a free Semaphore account and add your Docker project.

We’re excited to bring Semaphore’s new GCR integration to you, and we hope that it will help with making the continuous delivery of your dockerized applications simpler and faster. We would love to hear what you think in the comments below or through our support channels.

Happy building! 🐳

Continuous Delivery of Docker Images with Docker Hub and Semaphore

With the rapidly growing use of microservices, fast and scalable image distribution has become a critical aspect of the software development practice. If you’re using Docker for developing your applications, you’re already familiar with container registries such as Docker’s own Docker Hub. Container registries are used to store, fetch, or deploy Docker images quickly and reliably.

Docker Hub is a cloud-based image registry, covering all aspects of image management, starting from secure storage, team management, and official repositories to running checks for security vulnerabilities.

Continuous Delivery of Docker Images with Docker Hub and Semaphore

Docker Hub repositories can either be public, allowing you to share your images with the Docker community, or private, providing teams with fine-grained control over user permissions. Images can originate from a Docker daemon running locally, from a CI server, or alternatively you can use Docker Hub’s automated builds feature. Shared images can be discovered through Docker Hub, or searched directly from your terminal through the CLI. Official repositories are offered by various providers like Ubuntu, Postgres, MySQL and others, ensuring that security patches are available as soon as possible. Official repositories also serve the purpose of promoting best practices for Dockerfiles, as well as minimizing the overhead when setting up environments for various programming languages or databases.

Team management is also streamlined with organizations and collaborators, who can have various permissions levels for accessing the repository and managing images.

Configuring the Docker Hub Integration

Since the use of container registries is rapidly spreading, we wanted to ensure that accessing them from Semaphore is effortless. Our new Docker Hub integration allows you to securely store your credentials, and avoid having to manage the authentication process with commands. Everything is handled automatically.

Projects using Semaphore’s Docker-enabled platform can configure this integration with the Docker Hub project add-on. To set it up, visit Semaphore Add-ons on the project page, click on “Docker Registry”, and then select the Docker Hub registry.

Docker Container Registry with Semaphore Add-ons

This will bring up a form where you can fill out your credentials.

Docker Hub Setup on Semaphore

After saving the credentials, they will be safely stored and ready to use. During builds and deployments, you will be automatically authenticated with Docker Hub, which will give you access to all of your images in the registry.

Docker Hub Container Registry Deployment

You can visit Docker Hub to get a detailed overview of your Docker images.

Docker Hub Container Registry Dashboard

To start building your Docker project on Semaphore using our new Docker Hub integration, you can create a free Semaphore account and add your Docker project.

We hope that Semaphore’s new Docker Hub integration will help streamline the continuous delivery of your dockerized applications. Let us know how you like it in the comments below or by contacting us on support.

Happy building! 🐳

Get future posts like this one in your inbox.

Follow us on