The CI/CD and DevOps Blog

Java CI: Build and Push a WAR Application to Nexus

This tutorial explains how to build and push a Java-based web application to a Nexus Repository using Maven. We are using a Java demo application that has basic CI tests.

These are the following concepts you need to be familiar with to proceed further:

Build a Docker Image and Push It To Docker Hub

This tutorial explains how to manually build and push an image to Docker Hub. As an example, we will build a Docker image for a simple Node.js application that has basic CI tests as well as code coverage reports. The Dockerfile is a part of the application repository on Github.

Shippable 6.4.4 is live!

A common complaint from our SaaS customers is that we're so busy building new features, we don't always do a great job letting them know what's new. It's like thousands of trees falling in the forest.... you hear them fall, but you don't know which ones and how many until someone tells you or you spend time scanning the forest and discovering it yourself.

We agree that the latter is a terrible scenario, so we're going to do a better job keeping everyone informed moving forward. Watch for our weekly release notes blog recapping everything that was launched in the previous week!

This week, we launched release 6.4.4. You can find the release notes here: 6.4.4 Release Notes.

Read on to discover some of the more interesting features released today.

Kubernetes Tutorial: how to pull a private docker image in a pod

Docker images that comprise a production application are often deployed to private repositories in Docker registries. Kubernetes provides a feature called imagePullSecrets that allows pods to pull private docker images. In this blog, we demonstrate how you can easily hookup imagePullSecrets to your pod using Shippable.


Creating an imagePullSecrets secret

imagePullSecrets is a type of a Kubernete Secret whose sole purpose is to pull private images from a Docker registry. It allows you to specify the Url of the docker registry, credentials for logging in and the image name of your private docker image.

There are two ways an imagePullSecrets can be created.

1. kubectl create secret docker-registry command. We use this approach in our blog.

ambarishs-MacBook-Pro:gke ambarish$ kubectl create secret docker-registry private-registry-key --docker-username="devopsrecipes" --docker-password="xxxxxx" --docker-email="" --docker-server=""
secret "private-registry-key" created


2. Creating the secret via a yml.

In this approach, a config.json file is created for the private registry. Its contents are then base64 encoded and specified in the .dockerconfigjson property.

apiVersion: v1
kind: Secret
  name: private-registry-key
  namespace: default
  .dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==


Kubernetes Tutorial: Using Secrets In Your Application

Applications deployed to a Kubernetes cluster often need access to sensitive information such as credentials to access a database and authentication tokens to make authenticated API calls to services. Kubernetes allows you to specify such sensitive information cleanly in an object called a Secret. This avoids putting sensitive data in a Pod defintion or a docker image. In this blog, we demonstrate how you can easily hookup Kubernetes Secrets to your pod using Shippable.


Creating a Kubernetes Secret

Secrets are defined in a yml file in a Secret object. A Secret object can specifiy multiple secrets in name-value pairs. Each secret has to be base64 encoded before specifying it in the yml.

Let's define an API token as a secret for a fake token xxx-xxx-xxx.

1. Base 64 encode the token.

ambarishs-MacBook-Pro:sources ambarish$ echo -n "xxx-xxx-xxx" | base64

2. Create the secrets yml called create-secret.yml.

apiVersion: v1
kind: Secret
  name: auth-token-secret
type: Opaque

3. Create the secret in the kubernetes cluster using kubectl.

$ kubectl create -f secrets.yml
secret "auth-token" created