Introduction This tutorial will show you how to create an automation tool for deploying your software in a simple way, similar to deploying to Heroku. We’ll be using Docker to version control each deploy, which makes upgrades and rollbacks fairly easy. Also, we’ll use Semaphore to continuously deploy our application. Our containers can be hosted […]
Managing Secrets in Docker Swarm
Introduction Docker changed how development, testing and running software are done, and that’s why software engineers and companies should develop new habits and follow best practices. On the other hand, orchestration technologies like Docker Swarm, K8S or Mesos are also changing depending on the industry demands. Security management, including secret management in Docker Swarm, is […]
Scheduling Services on a Docker Swarm Mode Cluster
Introduction This tutorial is the second one in our series of articles on container orchestration with Docker Swarm. In the first tutorial, we covered how to bootstrap a Docker Swarm Mode cluster, and in this second tutorial, we’ll cover how Swarm schedules workloads across the cluster’s nodes. Scheduling is a key component of container orchestration, […]
Introducing Boosters: Move Faster with Automatic Parallel Testing
As any application grows in features, running all automated tests in the continuous integration (CI) environment begins to take a significant amount of time.
Getting Started with Vagrant
Vagrant is a development environment automation tool. It accomplishes this by leveraging virtual machines with VirtualBox, VMWare, or cloud providers like AWS. It’s primarily designed to standardize environments across platforms. However, it’s not limited to that. Vagrant can be especially useful for cross-platform automated tests. By the end of this tutorial, you’ll be ready to […]
How the Team at 500px Moves Faster with Semaphore
500px has been our customer since 2014, and they have been growing and evolving along with Semaphore. Moving fast is crucial to the 500px team. The less time they spend on testing, the more value they can create for their users. They put new code into production several times per day, and automated testing allows […]
Writing and Testing an Event Sourcing Microservice with Kafka and Go
In this tutorial, we will take a look at how Kafka can help us with handling distributed messaging, by using the Event Sourcing pattern that is inherently atomic. Then, by using a pattern called Command-Query Responsibility Segregation (CQRS), we can have a materialized view acting as the gate for data retrieval. Finally, we’ll learn how […]
Faster Rails: Is Your Database Properly Indexed?
If your Rails app is getting slower, here’s how to properly index your database to make your Active Record queries faster.
Perfection is Useless
One of the most important things we teach the junior programmers who join the Semaphore team is the mindset of shipping in small iterations. This is a simple concept, however there’s an inevitable misunderstanding that stems from the subjective ideas of “small”. Thus, in practice we need to teach by example what we really mean […]
Generating Fake Data for Python Unit Tests with Faker
Introduction When writing unit tests, you might come across a situation where you need to generate test data or use some dummy data in your tests. If you already have some data somewhere in a database, one solution you could employ is to generate a dump of that data and use that in your tests […]
Introduction to Ansible
Ansible is a general purpose automation tool that may be used for configuration management or workflow automation. Configuration management is an “infrastructure as code” practice that codifies things, e.g. what packages and versions should be installed on a system, or what daemons should be running. Workflow automation may be anything from provisioning cloud infrastructure to […]
Fast Failing: Introducing Faster Feedback on Failing Builds
Fast feedback on the work we’ve done minimizes developer context switching and keeps us in the state of flow. Waiting for all the jobs to finish in order to see that a job has failed can waste a lot of time. If a job fails, the developer should have the option to be notified right […]
Flaky Tests: Are You Sure You Want to Retry Them?
Different teams have different approaches to dealing with flaky tests. Some even go as far as using the “Let’s run each test 10 times and if it passes at least once, it passed” approach.
Bootstrapping a Docker Swarm Mode Cluster
Introduction Containers have recently become a very popular delivery mechanism for software applications. This is in part due to the popularity of the microservices software architecture pattern, which encourages delivering applications as a set of discrete, independent, loosely-coupled services. A microservice is an ideal payload for the container abstraction. Perhaps, the biggest influence, however, has […]
Customizable Command Timeouts
For a long time, Semaphore has been limiting your build command execution time to a fixed 60 minutes. This restriction worked great for the majority of builds on Semaphore, however there are some cases when this limit is simply not good enough.