Link Search Menu Expand Document

CI/CD tools

This document aims at briefly describing the different CI/CD providers we’ve used in different projects, and their main pros/cons

Jenkins

Jenkins can be used to deploy code (e.g. from github) to a server, and optionally run tests before deployment. It optionally uses a Jenkinsfile script, allowing for a custom deployment pipeline.

Pros

  • OSS tool that can be installed and maintained without directly relying on a 3rd party
  • Matured and maintained
  • Lots of plugins
  • Integration with docker, github, slack, etc
  • Flexible
  • There are solutions with it preinstalled (AWS AMI, GCP equivalents, etc)

Cons

  • Needs its own server
  • Needs occasional updates
  • Some documentation (especially plugins) is lacking

Used in

  • RW API
  • Wildlife Insights

Travis

Travis integrates with Github pull requests and allows executing a project’s test suite, and flagging the result back to Github, to inform a merge/no merge decision

Pros

  • Widely used, reliable and mature service
  • Free (up to a point) for OSS projects
  • Support for node/js/ruby/python
  • Support for mongodb/postgres/mysql/other stacks

Cons

  • Free tier only goes up to a certain limit, past which it stops building

Used in

  • RW API

Capistrano

A ruby gem used to deploy Ruby on Rails applications.

Pros

  • mature
  • conceptually simple, pulls code from git and runs commands remotely over SSH
  • supports multiple server deployments, including multiple roles (e.g. web vs db)
  • supports multiple environments (staging, production)
  • easy to add specific tasks to run on deploy
  • plugins available to deal with typical things, e.g. rvm, bundler, passenger out of the box

Cons

  • requires permanent server addresses
  • requires that the person who deploys has SSH access to server configured

Things to check

  • can you somehow set the server addresses dynamically
  • https://github.com/marketplace/actions/capistrano-deploy

Used in

GitLab CI/CD

The GitLab CI/CD workflow. On gitlab.com (also available for free accounts, with limits to runner minutes and on some features) or on self-hosted GitLab instances.

Pros

  • has been around for a few years and seems quite mature
  • it’s been a core part of GitLab’s value proposition since the beginning so they are taking good care of it
  • it’s easy to get started with
  • flexible
  • nice web UX if one cares
  • supports multiple server deployments, including multiple roles (e.g. web vs db)
  • supports multiple environments (staging, production)
  • easy to add specific tasks to run on deploy

Cons

  • yet another CI DSL to master
  • tied to GitLab (but can be used via on-prem/private GitLab instances)
  • quite complex (but perfectly usable for simpler workflows)

Used in

  • MGIS (this runs on a private GitLab instance on Mars’ own infrastructure)