O'Reilly logo
live online training icon Live Online training

Jenkins Primer

Learn Continuous Integration/Development

Topic: System Administration
Noureddin Sadawi

Working as a software developer is a great job, especially when you are part of a team where different individuals are responsible for developing certain aspects of a software solution. In modern software development, any Agile team should use continuous integration (CI), continuous delivery/deployment (CD) systems as they help enforce the ideals of Agile development. CI is a practice in software development where software developers regularly incorporate their work into the project's Integration branch and create a build.

When using software sharing platforms such as Github or BitBucket, code incorporation, or integration, is the act of submitting your work (i.e. modified code) to the common work area (the potential software product being developed). Technically, this is performed by merging your private work (i.e. your branch) with the common work area (Integration branch). The process of continuously deploying production-ready features to the end user (or into the production environment) is known as continuous deployment (CD).

This training course is a hands-on introduction to Jenkins, a continuous build tool that enables teams to focus on their work by automating the build, artifact management, and deployment processes. This course will involve several real world use cases where Jenkins fits perfectly. This involves Java, Python and Dot Net development as well as using Jenkins with Docker.

What you'll learn-and how you can apply it

  • Develop understanding of what continuous integration is, why it is important and how to use it to enhance software development
  • Learn the many benefits of using continuous integration and continuous build systems
  • Learn what Jenkins is, why it is powerful and what makes it the choice of many large companies and agencies such as Linkedin, NASA and Netflix
  • Become familiar with installing and setting up Jenkins on different operating systems
  • Learn how to manage Jenkins, add users, install plugins and so on
  • Learn how to work with Jenkins for Java-based applications
  • Learn how to work with Jenkins for Python-based applications
  • Learn how to work with Jenkins and Docker
  • Learn how to configure Jenkins and prepare it for production environment
  • Become familiar with several tips and tricks that will save you a great deal of time and effort

This training course is for you because...

  • You are familiar with software development and want to develop your skills with regards to working as part of a team
  • You would like to learn how to correctly install and configure Jenkins (including running Jenkins off a docker container)
  • You would like to learn Jenkins the right way from the ground up by learning the basics and developing gradually
  • You would like to learn how to use Jenkins for Java-based applications and generate test reports
  • You would like to learn how to use Jenkins for Python-based applications and generate test reports
  • You would like to configure Jenkins so it can send you, or anyone else, notifications via email
  • You would like to schedule events within Jenkins so it runs whatever you want it to run according to the time/date you set
  • You would like to configure Jenkins so it runs a shell script automatically for you
  • You would like to use triggers within Jenkins so it runs whatever you want it to run when you commit something to github (using web-hooks)
  • You would like to use Jenkins to automatically create a Docker image for you and push it to Docker Hub so the rest of the world (i.e. your clients) can find and use it

Prerequisites

  • Familiarity with Python and machine learning. Students should be relatively comfortable with Python coding practices and how ML algorithms work.
  • Familiarity with basic machine learning in Python

Course Set-up

Recommended Preparation

Recommended Follow-up

About your instructor

  • Dr. Noureddin Sadawi is a consultant in machine learning and data science. He has several years’ experience in various areas involving data manipulation and analysis. He received his PhD from the University of Birmingham, United Kingdom. During his PhD he developed a technique to extract precise information from bitmap images of chemical structure diagrams. He developed a tool called MolRec and used it to participate in evaluation contests at two international events - TREC2011 and CLEF2012 - and won both of them.

    Noureddin is an avid scientific software researcher and developer who has a passion for learning and teaching new technologies. He has been involved in several projects spanning a variety of fields such as bioinformatics, drug discovery, omics data analysis and much more. He has taught at multiple universities in the UK and has worked as a software engineer in different roles. One of his latest positions was a research associate at the highly respected Imperial College London where he contributed significantly to the PhenoMeNal project (a project that heavily uses docker). Currently, he is a research fellow at the department of computer science, Brunel University – London where he developed deep learning techniques for the analysis of human gesture data.

Schedule

The timeframes are only estimates and may vary according to how the class is progressing

Day 1

Part 1: Introduction and Jenkins Installation and Configuration (50 minutes)

  • Introduction and overview of Jenkins
  • Why use Jenkins?
  • Installing Jenkins on different operating systems
  • A quick overview of how to run Jenkins behind a reverse proxy
  • Configure Jenkins for Building + Testing + Deployment
  • How to install Jenkins plugins
  • Downloading common tools for Jenkins
  • Setting environment variables
  • Create your first Jenkins Job

Q&A (5 minutes)

Break (5 minutes)

Part 2: Jenkins for Java-based Applications (50 minutes)

  • Building a Java project (with Maven) from command line
  • An overview of Freestyle Projects in Jenkins 2.0
  • Creating and working with Freestyle Projects in Jenkins 2.0
  • Building and Testing a Java+Maven Project as a Jenkins Freestyle Project
  • An overview of Pipeline Projects in Jenkins 2.0
  • Building and Testing a Java+Maven Project as a Jenkins Pipeline Project
  • A quick overview of Cucumber reporting
  • Creating a Freestyle and Pipeline project for building, testing and reporting using cucumber reports
  • Working with stage view in Jenkins 2.0 (for pipeline project)

Q&A (5 minutes)

Break (5 minutes)

Part 3: Jenkins for Dot Net Applications and Configuring (40 minutes)

  • Freestyle project for Dot Nen application using Jenkins 2.0 (Part A)
  • Freestyle project for Dot Net application using Jenkins 2.0 (Part B)
  • Running NUnit Selenium Test with Freestyle project using Jenkins 2.0
  • Working with Pipeline project for .Net application

Q&A (10 minutes)

Break (10 minutes)

Day 2

Part 1: Advanced configuration for Jenkins (50 minutes)

  • Configuring email using Docker container for Jenkins 2.0 (part 1)
  • Configuring email using Docker container for Jenkins 2.0 (part 2)
  • Configuring Jenkins to send email via GMail
  • Configuring Build Agents for Jenkins 2.0

Q&A (5 minutes)

Break (5 minutes)

Part 2: Jenkins and Python-based Applications (50 minutes)

  • Testing a Python project (with Unit test) from command line
  • Testing a Python project (with Unit test) as a Jenkins Freestyle Project
  • Testing a Python project (with Unit test) as a Jenkins Pipeline Project
  • Interacting with Jenkins using Python (via its API)

Q&A (5 minutes)

Break (5 minutes)

Part 3: Some Advanced Jenkins Topics (45 minutes)

  • Working with the Blue Ocean plugin for Jenkins
  • Working with build triggers
  • Working with Github Webhooks to trigger builds
  • Full project: Configuring Jenkins to build/upload Docker images to Docker Hub

Q&A (10 minutes)

Course wrap up