Ruddra.com

Automated Deployment to OpenShift Using Jenkins and Webhook

Automated Deployment to OpenShift Using Jenkins and Webhook

The last post was about defining the pipelines. Now it is time to execute them. Also, at the end, we are going to show how to integrate webhook in your repository, so that for a specific event(like Push, Pull request merge etc) it will trigger the pipelines to automatically deploy the latest code to servers.

Creating python jenkins slave

Most important step before we start using pipeline is to create a Jenkins Slave. For our python execution, we need a python slave to execute step 1-4 described in previous post. There is two ways to do that:

  • Way One:
    1. Go to Manage Jenkins(URL: Jenkins_Url/manage)
    2. Click on Configure System
      Screen-Shot-2018-08-12-at-2.18.12-AM
    3. Then go to bottom of settings, under Kubernetes Pod Template. Then click on Add Pod Template.
      Screen-Shot-2018-08-12-at-2.19.38-AM
    4. Now add configuration given as the following image:
      Screen-Shot-2018-08-12-at-2.18.49-AM
      If the image is not clear enough then please use the following dictionary:
    {
        Name: python
        Labels: python
        // click on add container
        Container Template: {
            Name: jnlp
            Docker Image: idealo/jenkins-slave-python-centos7:latest
            Always pull image: True
            Working directory: /tmp
            Arguments to pass to the command: ${computer.jnlpmac}${computer.name}
         }
    }
    
    1. Let us save this configuration by clicking on Save button.
  • Way Two: Use this command from idealo’s repository: oc create -f https://raw.githubusercontent.com/idealo/jenkins-ci/master/config-map.yaml Or just follow their instructions.

By the way, there are other jenkins python slaves available in github or other opensource repository. Feel free to use any of your choice. I am using this repository, for this demo purpose.

Create build config

We need to import our pipeline to openshift. For that we need to create a Build Config for that. Let’s do that:

apiVersion: v1
kind: BuildConfig
metadata:
  labels:
    app: python-nginx-pipeline
  name: python-nginx-pipeline
spec:
  source:
    git:
      ref: master
      uri: <your git repository link>
  strategy:
    jenkinsPipelineStrategy:
      jenkinsfilePath: path/to/Jenkinsfile
    type: JenkinsPipeline
  triggers:
    - github:
        secret: secret
      type: GitHub
    - generic:
        secret: secret
      type: Generic
    - bitbucket:
        secret: secret
      type: Bitbucket

We can save this as jenkins-pipeline.yaml. You can import this using:

oc project cicd
oc create -f jenkins-pipeline.yaml

Now, if you go to web interface of OpenShift and access in url path OPENSHIFT_URL > console > CI/CD project > browse > pipelines, you should see a new pipeline has been created. You can import the build config directly in openshift web interface as well.

Screenshot2

Running pipeline

You can run the pipeline using the Start Pipeline on top right corner of pipeline page. Or you can do that using command line:

oc start-build python-nginx-pipeline

Outcome

Here comes the sweet results of your hard work. You should see the pipeline executions like this:

Before STAGE deployment prompt

Screen-Shot-2018-08-12-at-3.26.14-AM

Full pipeline execution

Screen-Shot-2018-08-12-at-3.27.45-AM

Blue Ocean pipeline

If you go to Blue Ocean(comes build-in) of Jenkins, then go to your latest build, you should see a beautiful pipeline looks like this:

Screen-Shot-2018-08-12-at-3.29.10-AM

Also if you click on tests, then you should see the recorded result of tests:

Screen-Shot-2018-08-12-at-3.29.31-AM

In Artifacts section, you will see pipeline logs and the artifact file which you have stored in Step 4 of previous post:

Screen-Shot-2018-08-12-at-3.29.38-AM

Python+NGINX running in DEV and STAGE project

You should see your server is up and running in DEV and STAGE Project.

Screen-Shot-2018-08-12-at-12.00.08-PM

Automated deployment

Last part of our implementation is automated deployment. For that we are going to use Github Webhook. It will allow us to start a build based on an event in git repository. For starting a build, we need to define webhook triggers in Pipeline Build Config. We have defined triggers in our build config. Now we need to copy that trigger link from here:

Screenshot3

You can paste this webhook in your repository’s webhook settings, for example like this:

BitBucket

Screen-Shot-2018-08-13-at-9.33.01-PM

Github

Screen-Shot-2018-08-13-at-9.37.32-PM

Then for any event(as per your configuration, like push, pull request merge etc) it will trigger a new build. FYI: this functionality will not work for minishift.

Working example

You will find a working example in my github repository.

Useful resources

  1. If you want to implement Django Using Pipeline, checkout my openshift-django repo.
  2. Read details about Jenkins Python Slave in in idealo’s repository.
  3. Read about running NGINX on OpenShift from torstenwalter.de.
  4. Read about CI/CD demo by RedHat in redhat’s github repository.
  5. For Python2.7 based deployment use this Jenkins Slave from dockerhub(developed by me).

Thank you for reading. Please let me know your feedback by commenting below.

Cheers!!

Last updated: Apr 05, 2024


← Previous
Writing Jenkins Pipeline For OpenShift Deployment: Part Two

In previous article, we covered step 1-5 which would prepare the code and make sure it is ready to …

Next →
Migration From Ghost 1.25.2 to 2.2

This post is no longer valid as I have moved to Hugo 😄 Table of contents&nbsp; Verdict Verdict …

Share Your Thoughts
M↓ Markdown