Sign in

Welcome to the first part of a series of articles comparing CI/CD platforms. To help evaluate, compare and contrast the tools currently dominating the market, the goal will be to automate the deployment of a Flask application onto AWS Elastic Beanstalk. A new deployment will need to occur after every push to main branch, and during the series this same requirement will be implemented across a multitude of CI/CD tools.

First up, part 1 will focus on GitHub Actions, where the support for CI/CD was first announced in August 2019. I’ll document the steps taken along the way to achieve…


It is a common requirement for system and website administrators to redirect users to a common entry point for their website — also known as a canonical hostname. This is usually in one of two directions, i.e. www to non-www or non-www to www.

This brief guide shows techniques for achieving the latter and we demonstrate how to achieve this using two common web servers, Apache and NGINX.

By “non-www” we refer to the “bare domain”, also known as the “naked domain” or “apex domain”; however, the same technique can be used for redirecting other source domains (e.g. abc.example.com …


Git is a free and open source distributed version control system. It’s incredibly powerful and prevalent in the IT industry, meaning that having at least a basic understanding of Git is crucial for most tech roles.

The core concepts are best explained via a series of practical examples, which we will flesh out to increase your overall understanding. By the end of this 10-minute read you should have picked up the basics of Git.

Getting Started — Install and Configure

Installers are available for most platforms via https://git-scm.com/.

Alternatively you can also download Desktop GUIs — examples from GitHub [Windows, Mac] and Atlassian [download Sourcetree].

Once…


Bitbucket Server is organised into projects each of which contains multiple repositories. Now let’s take an example of an organisation migrating tens of thousands of repositories away from their hosted Bitbucket Server set up.

Not all of these repositories were being migrated. Many tens, if not hundreds of these projects are very old and some teams wanted to ‘cold archive’ them rather than migrate to their new Git hosting — with their choice being either S3 Glacier or GCP Coldline storage.

Note that this article is aimed at end-users rather than the administrators of a Bitbucket Server, who have access…


All the code for this guide and the workflow can be found on GitHub.

Introduction to three areas in scope of this article;

  1. The Flask application — a simple “Hello World!” example.
  2. AWS Elastic Beanstalk — a service that automates the deployment and scaling of a web application. It takes in our source code and takes care of all the infrastructure configuration.
  3. GitHub Actions — available from within your GitHub repository, provides the means to run workflows such as builds, tests, and deployments.

Let’s get started.

Create GitHub repository & workflow

Create your GitHub repository and upload your initial Python application code.

Within the GitHub…


I recently helped out a WordPress site owner — let’s call our site owner “Joe”.

Joe was struggling to get WP Rocket working with AWS CloudFront for stylesheets and javascript. His site was already successfully using S3 and CloudFront for all its image media using the “WP Offload Media Lite” plugin.

Joe had also configured a custom subdomain for his CloudFront distribution and SSL certificate using the techniques described in the two articles below.

However, after installing the “WP Rocket” plugin and updating its CDN configuration to point at the existing CloudFront distribution, Joe’s WordPress site no longer rendered correctly.


Welcome to the second part of a series of articles comparing CI/CD platforms. To help evaluate, compare and contrast the tools currently dominating the market, the goal will be to automate the deployment of a Flask application onto AWS Elastic Beanstalk. A new deployment will need to occur after every push to main branch, and during the series this same requirement will be implemented across several CI/CD tools.

Our first article looked at GitHub Actions, which you can read below.

Next up, part 2 will focus on Buddy — to be found online at https://buddy.works. I’ll document the steps taken…


This small series of guides will walk through three solutions for installing Jenkins in a Docker container on Windows, along with the configuration necessary to spin up dynamic build slaves also using Docker containers.

Running locally on a personal device is perfect for individual users, freelancers, or developers looking to do local Jenkinsfile or Shared Library development and testing before pushing to a central CI/CD platform.

“You said three solutions?” Yes — this article demonstrates running the Jenkins container as root user instead of jenkins user. Part 1 was using Docker-in-Docker and Part 2 was to replace with a socat


This small series of guides will walk through three solutions for installing Jenkins in a Docker container on Windows, along with the configuration necessary to spin up dynamic build slaves also using Docker containers.

Running locally on a personal device is perfect for individual users, freelancers, or developers looking to do local Jenkinsfile or Shared Library development and testing before pushing to a central CI/CD platform.

“You said three solutions?” Yes — this article demonstrates using socat (further reading at socat). Part 1 was using Docker-in-Docker and Part 3 is to run the Jenkins container as root user. …


This small series of guides will walk through three solutions for installing Jenkins in a Docker container on Windows, along with the configuration necessary to spin up dynamic build slaves also using Docker containers.

Running locally on a personal device is perfect for individual users, freelancers, or developers looking to do local Jenkinsfile or Shared Library development and testing before pushing to a central CI/CD platform.

“You said three solutions?” Yes — this article demonstrates using Docker-in-Docker (further reading at dind). Part 2 is using a socat container and Part 3 is to run Jenkins as root. …

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store