Tag: cloudbees

  • Top 10 Best Practices for Jenkins Pipeline Plugin

    Top 10 Best Practices for Jenkins Pipeline Plugin

    The Jenkins Pipeline plugin is a game changer for Jenkins users. Based on a Domain Specific Language (DSL) in Groovy, the Pipeline plugin makes pipelines scriptable and it is an incredibly powerful way to develop complex, multi-step DevOps pipelines. This document captures some definite Do’s and Don’ts of writing Jenkins Pipelines – with code examples and explanations.

    1. Do: Use the real Jenkins Pipeline

    Don’t use older plugins like Build Pipeline plugin or Buildflow plugin. Instead, use the real Jenkins Pipeline suite of plugins.

    • Why? The Pipeline plugin is a step change improvement in the underlying job itself. Unlike freestyle jobs, Pipeline is resilient to Jenkins master restarts and also has` built-in features that supersede many older plugins previously used to build multi-step, complex delivery pipelines.

    More information on getting started is available at https://jenkins.io/solutions/pipeline/.

    2. Do: Develop your pipeline as code

    Use the feature to store your Jenkinsfile in SCM then version and test it like you do other software.

    • Why? Treating your pipeline as code enforces good discipline and also opens up a new world of features and capabilities like multi-branch, pull request detection and organization scanning for GitHub and BitBucket.

    You should also call your Pipeline script the default name: Jenkinsfile and start the following script header, so your IDE, GitHub and other tooling recognize it as Groovy and enable code highlighting:

    #!groovy​

    ​3. Do: All work within a stage

    Any non-setup work within your pipeline should occur within a stage block.

    • Why? Stages are the logical segmentation of a pipeline. Separating work into stages allows separating your pipeline into distinct segments of work.

    Example:

    stage 'build'
    //build
    stage 'test'
    //test

    And better still: the Pipeline Stage View plugin visualizes stages as unique segments of the pipeline:

    Jenkins pipeline example

    4. Do: All material work within a node

    Any material work within a pipeline should occur within a node block.

    • Why? By default, the Jenkinsfile script itself runs on the Jenkins master, using a lightweight executor expected to use very few resources. Any material work, like cloning code from a Git server or compiling a Java application, should leverage Jenkins distributed builds capability and run an agent node.

    Example:

    stage 'build'
    node{
        checkout scm
        sh 'mvn clean install'
    }

    5. Do: Work you can within a parallel step

    Pipeline offers a straight-forward syntax for branching your pipeline into parallel steps. Use it!

    • Why? Branching work in parallel will allow your pipeline to run faster, shifting your pipeline steps to the left, and getting feedback to developers and the rest of your team faster.

    Example:

    parallel 'shifting':{
        //everything
    }, 'left':{
        //I can
    }

    Bonus tip: use the Parallel Test Executor plugin to have Jenkins automatically determine how to run your xUnit compatible tests in optimally parallel buckets! Read more information on Parallel Test Execution on the CloudBees Blog.

    6. Do: Acquire nodes within parallel steps

    Why? One of the main benefits of parallelism in a pipeline is: to do more material work (see Best Practice #4)! You should generally aim to acquire a node within the parallel branches of your pipeline.

    Example:

    parallel 'integration-tests':{
        node('mvn-3.3'){ ... }
    }, 'functional-tests':{
        node('selenium'){ ... }
    }

    7. Don’t: Use input within a node block

    While you can put an input statement within a node block, you definitely shouldn’t.

    • Why? The input element pauses pipeline execution to wait for an approval – either automated or manual. Naturally these approvals could take some time. The node element, on the other hand, acquires and holds a lock on a workspace and heavy weight Jenkins executor – an expensive resource to hold onto while pausing for input.

    So, create your inputs outside your nodes.

    Example:

    stage 'deployment'
    input 'Do you approve deployment?'
    node{
        //deploy the things
    }

    8. Do: Wrap your inputs in a timeout

    Pipeline has an easy mechanism for timing out any given step of your pipeline. As a best practice, you should always plan for timeouts around your inputs.

    • Why? For healthy cleanup of the pipeline, that’s why. Wrapping your inputs in a timeout will allow them to be cleaned-up (i.e., aborted) if approvals don’t occur within a given window.

    Example:

    timeout(time:5, unit:'DAYS') {
        input message:'Approve deployment?', submitter: 'it-ops'
    }

    9. Don’t: Set environment variables with env global variable

    While you can edit some settings in the env global variable, you should use the withEnv syntax instead.

    • Why? because the env variable is global, changing it directly is discouraged as it changes the environment globally, so the withEnv syntax is recommended.

    Example:

    withEnv(["PATH+MAVEN=${tool 'm3'}/bin"]) {
        sh "mvn clean verify"
    }

    10. Do: Prefer stashing files to archiving

    Before the stash capability was added to Pipeline DSL, archives were the best way to share files between nodes or stages in a pipeline. If you just need to share files between stages and nodes of your pipeline, you should use stash/unstash instead of archive.

    • Why? Stash and unstash are designed for sharing files, for example your application’s source code, between stages and nodes. Archives, on the other hand, are designed for longer term file storage (e.g., intermediate binaries from your builds).

    Example:

    stash excludes: 'target/', name: 'source'
    unstash 'source'

    Summary

    Thanks for reading! The new Jenkins Pipeline plugin is gaining more and more traction, especially with the launch of Jenkins 2.0. I’m sure there will be more and more best practices to come as developers across the world develop their DevOps pipelines with Jenkins. We will post follow-up blogs and more examples soon!


    Learn More

    Jenkins is one of the preeminent automation tools. Jenkins is extensible by design, using plugins. Plugins are what give Jenkins its great flexibility for automating a wide range of processes on diverse platforms. Jenkins Pipeline builds on that flexibility and rich plugin ecosystem while enabling Jenkins users to write their Jenkins automation as code. This technical guide will show a number of common use cases for plugins with Jenkins Pipeline.

    These use cases include:

    • Publishing HTML reports
    • Sending notifications
    • Continuous delivery using Docker
    • Test result interpretation and reporting

    Download this technical guide to learn more about and get started with Jenkins Pipeline!


  • Value Stream Management: Software Delivery Visibility and Insight

    Value Stream Management: Software Delivery Visibility and Insight

    Overview

    The digital economy has pushed organizations to produce better products faster, leading them to adopt DevOps and continuous integration/continuous delivery (CI/CD) for efficient software delivery. This industry shift impacts all groups within an organization to evaluate and adopt new business practices to meet this growing need and stay competitive in the market.

    Indeed, IT leaders implemented DevOps practices and tools to achieve modern software development, but it’s unclear to them whether there is any return on investment (ROI). Product and engineering leaders struggle with determining how to measure and manage their software delivery capability. The complexity of multiple teams, tools and applications means the whole process can be disconnected and difficult to track. Adding to this challenging scenario, today CIOs are measured on delivering quality software products, with zero defects that engage customers and generate revenue.

    What is value stream management?

    A value stream consists of a series of steps used by an organization to continuously deliver value to customers. Value stream management is a practice that enables the organization to track and manage the flow of value from the ideation stage all the way to customer delivery. Proper value stream management ensures the facets related to end-to-end software development are connected and measured to properly and efficiently move the flow of value related to a product or service to the customer.

    value stream management

    But when we start talking about value stream management, you need to think about value stream mapping as well. Value stream mapping is the exercise of visualizing the process of events that takes a product from idea, to creation, testing, production and finally release to the customer. Mapping the value stream of a product helps you understand how the artifacts and workflow, the dependencies at each stage and identifying the blockages or bottlenecks that result in waste and delay delivering value.

    Why track value streams?

    Managing your value streams lets you focus on delivering value to the customer. To do this, you need to connect multiple teams, tools and applications to gain clear visibility and insight into how the value is flowing through the software delivery process. This means having a platform that scales easily and enables collaboration, while reducing risk, along with accessing real-time metrics on DevOps performance across the teams, and tracking throughput and stability related to product releases. The goal is to deliver quality software at speed that your customers want in order to drive value back to the organization.

    In short, value stream management can help you solve these challenges:

    • Poor visibility across the software delivery process makes it difficult to measure and manage DevOps performance – to identify improvements, leverage best practices and support collaboration across teams.
    • No connection between applications, teams and tools means intensive, error-prone methods of collecting static data for measuring and managing the organization’s continuous delivery capabilities.
    • Difficulty in end-to-end value stream management resulting in lack of information to track flow of value from idea to production, and guesswork on identifying bottlenecks and wait times, leading to increased waste and delays in delivering value.
    • Lack of real-time performance metrics to benchmark and track DevOps performance based on industry standard indicators related to Throughput (Deployment Frequency, Mean Lead Time) and Stability (Mean Time To Recover, Change Failure Rate).

    What does a good value stream management platform look like?

    As your software delivery processes become more complex, you’ll need a value stream management solution that provides one view across the infrastructure, with data and metrics that can be trusted, in order to truly report on how the organization’s DevOps performance is progressing. You should look for the following:

    • A scalable and flexible CI/CD solution that enforces an organization’s governance needs.
    • A solution that easily maps, actively measures and manages your value streams, acting as a single source of truth to analyze and continually improve the flow of value.
    • Real-time performance metrics related to Throughput (Deployment Frequency, Mean Lead Time) and Stability. (Mean Time To Recover, Change Failure Rate).

    CloudBees solution

    The CloudBees suite of CloudBees Core and CloudBees DevOptics makes value stream management easy. The solution provides a CI/CD automation engine with the flexibility to support diverse software portfolios and the unified governance required by growing organizations. Based on Jenkins, CloudBees Core extends Jenkins with functionality that embeds best practices, rapid onboarding, security and compliance. It provides a shared, centrally-managed CI/CD service but delivers a self-service experience for engineering teams.

    By connecting data from across the DevOps toolchain to surface metrics, analytics and actionable insights, CloudBees DevOptics helps you optimize your software delivery process by breaking down silos, detect patterns and identify bottlenecks. It visualizes the software delivery process using key DevOps performance metrics including: Deployment Frequency (DF), Mean Lead Time (MLT), Mean Time To Recover (MTTR) and Change Failure Rate (CFR), to truly understand the velocity and quality of the software being deployed, and where your teams can improve.

    Additional resources

  • Opinionated Kubernetes and Jenkins X

    Opinionated Kubernetes and Jenkins X

    I recently wrote about how all the cloud platforms are all in Kubernetes and so are developers. It is an exciting time, but the problem for many is that this is a huge blank sheet of paper for how to build and deploy applications. A white space, a void, a limitless canvas of possibilities. Insert metaphors here.

    The problem as you may guess is that few people really like or are able to start with a blank canvas. I know I prefer to start with something working and iterate towards a solution, or be given some rails to stay on (again with the metaphors).

    Introducing the Jenkins X project – a Kubernetes-native continuous integration and continuous delivery platform for developing cloud native applications that was just introduced as a Jenkins Enhancement Proposal, sponsored by James Strachan.

    There is a lot to take in but at it’s heart, this is an open source opinionated way to do continuous delivery with Kubernetes, natively, without necessarily having to learn all the things I talked about in my last blog post. I shall attempt to explain what this is all about and why it matters to developers. As someone said on the jenkins-dev mailing list “We have the two glued together with baling wire and twine” – Jenkins X aims to simplify how to work with continuous delivery and Kubernetes.

    First and most importantly, a sneak peek at the logo:

    You can see the nautical theme leaking through (and Kubernetes). Whilst it is called Jenkins X, it is about quite a lot more than Jenkins.

    Jenkins X makes decisions for you

    Jenkins X presents itself to you initially as a handy sleek command line (a native binary you can install called jx – the debate is on as to how pronounce it). Let’s take a tour (sail?):

    > jx import my-app

    If you have an existing project, this will detect what type of project it is, build a pipeline for you (and a bunch of Kubernetes things, like Helm Charts), add it to your project and set it up in GitHub, WebHooks and all, build the project (run the pipeline) and deploy a version to a “staging” environment.

    If it looks ok, you can promote it to production:

    > jx promote —env production —version 1.0.1 my-app

    If something went wrong in production, you can roll back an app to any version (the version numbers are made for you):

    > jx promote —env production —version 1.0.0 my-app

    > jx get apps # list versions

    An environment is a well-established concept for web developers using continuous delivery: out of the box Jenkins X makes three of them for you (dev, staging and production), but you can make as many as you like. Environments have rules around how things are promoted into them (and they also have their own extensible pipelines, but you can just use them as-is to start).

    You can also create a Spring Boot microservice app:

    > jx create spring

    Answer a few questions and it will set everything up for you.

    Any changes you make to your app automatically are built, and if the build looks good, they go through to the staging environment. WebHooks are setup for you (if you are using GitHub) to smooth this over.

    For those looking at starting from pre-made apps, there are “quickstarts”:

    > jx create quickstart

    They are based on a growing set of starter apps, in a variety of languages and tech stacks.

    Review apps for your changes: Each pull request is built/tested, and a “review app” is made available in a temporary environment. That means each proposed change, before it goes to the default branch (master), has an environment made (temporary) that it can be tried out in. In GitHub, this shows up as a comment in the pull request:

    Project type detection

    As you can see, so far there is no editing or manual creation of pipelines, or scripting or setup, just importing or creating your app and go. This is powered by Draft “packs” (a handy project that came out of Azure). What you end up with is a Jenkinsfile in your project repository. You may want to edit it one day, or you may be happy with it as is! Jenkins is famous for being un-opinionated in what you do, but Jenkins X has strong opinions (but you can extend and customise).

    Deploying or promoting to environments

    Deploying happens via pipelines behind the scenes – when a change is pushed, or a version promoted. You don’t need to directly interact with Kubernetes if you don’t need to. A tool called Helm does the heavy lifting: Helm is used to package and perform installations and upgrade for your apps.

    Nautical theme intensifies

    There is a little more magic going on here with environments, which you don’t see at first. Each environment, for a team, is represented by a Git repository behind the scenes. Configuration as code is a well-established best practice these days, so why not use it to track deployments and initiate deployments. I also mentioned in my previous post how declarative Kubernetes is: it is perfect for keeping all config in a repository, of the desired system state.

    Each promotion is actually a pull request to a per-environment repository. This repository is made and managed for you (and kept outside of the main application code repository), you don’t have to look at it, but you can extend things there should you need to. Specific environment repositories may have different access rules, or be controlled by a different team (perhaps even deploy to a different cluster). Some have coined the term for this as “GitOps.” I first came across this concept on a WeaveWorks blog.

    I’ll try and explain this one with a diagram:

     

    The pipeline is actually split in the middle. On the left is the more familiar continuous integration pipeline. This works on pull requests, pre-release version of things and is all about testing (automated and manual review). The source of truth for this is the configuration in the applications repository: branches, pull requests and so on.

    The right-hand side is the continuous delivery pipeline. This kicks in when the application is ready to be updated with a new release. This is the “GitOps” repo behind the scenes that controls the state of things in Kubernetes. A promotion on this side is a pull request, and then a merge, from the staging repository to the production repository.

    Installing Jenkins X

    The jx command line has a jx install command that installs it into a Kubernetes cluster.

    The best experience initially is using Google’s excellent GKE service:

    > jx create cluster gke

    This will ask a few questions, and go and set it all up for you in a cluster set aside for Jenkins X (recommended). Jenkins X runs entirely as services on top of a Kubernetes cluster.

    > jx install

    Is designed to work with a Kubernetes cluster (if it already exists, recommendation is to have a cluster put aside for Jenkins X if possible). Amazon EKS support is coming (mostly it is around testing), that service is in beta/early access so it is still a work in progress, as is Microsoft Azures excellent AKS service.

    So where is Jenkins?

    Good question, thanks for asking. Well, it is behind the scenes. As you have seen, there was no direct interaction with Jenkins, but it is there, running the pipelines for continuous integration and continuous delivery of the respective repositories, and orchestrating things with Kubernetes.

    If you run jx get pipelines you can see URLs to the various pipelines that have been setup for you are part of interacting with Jenkins X.

    By the way, James Strachan has written an extensive blog on jenkins.io that really explores the Jenkins X project in-depth. Once you finish reading this blog, take a stroll on over there and read James’. He also provides several ways you can get involved in the project.

    What else can I do with the command line?

    Lots, the jx command line has built in help:

    jx open

    – open apps, services or pipelines in your browser

    jx activity

    – explains how things got to where they are, a history

    jx help

    jx get environments

    – list environments

    jx get apps

    – show the state of applications, what versions are in what environments.

    What’s next with Jenkins X

    There is a whole lot more to this, and lots more moving parts and services that are set up for you that are very useful, but it is best to head over to jenkins-x.io and have a look.

    This project is obviously in early stages (it is a JEP after all) and there is lots happening. Check out the Jenkins X community if you want to chat on slack, IRC, issues or email. Read the Jenkins Enhancement Proposal doc.

    CloudBees recently joined the Cloud Native Computing Foundation, which includes a lot of important cloud native tech, including (but not only) Kubernetes. It will be interesting to see communities grow around continuous integration, continuous delivery and Kubernetes.

     

    Michael Neale is a development manager at CloudBees. Michael is an open source polyglot developer. For his sins, he spent time at JBoss, working on the Drools project and then Red Hat, where he continually caused trouble on various projects. Post-Red Hat, Michael was one of the co-founders of CloudBees, seeing great opportunity in cloud technologies. His interest in the cloud is natural, as he is attracted to disruptive technologies. Michael lives and works in the Blue Mountains, just outside Sydney, Australia. He has no hobbies, as his hobbies tend to turn into work anyway. Mic’s motto: “Find something you love doing, and then you will never work a day in your life again.” Follow Michael on Twitter.

  • All You Need to Know About Jenkins X

    All You Need to Know About Jenkins X

    Jenkins X is an open source project that offers automated CI/CD for cloud native applications on Kubernetes. Now over a year old and under the auspices of the Continuous Delivery Foundation, the emerging interest and growing implementations of Jenkins X has developers learning more about this technology and what it can do for them.

    Using Jenkins X provides developers with a number of benefits including faster software delivery releases, simplicity of installation and configuration and enhances the business sustainability over time.

    In this blog post, I’ll answer some of the most common questions about Jenkins X and why it’s important to you.

    What is Jenkins X?

    James Strachan headshotSo what is Jenkins X? James Strachan, distinguished engineer at CloudBees and chief architect of Jenkins X, defines Jenkins X as an “open source opinionated way to do continuous delivery with Kubernetes, natively,” without worrying too much about the underlying infrastructure. Jenkins X supports all major cloud platforms including Amazon, Azure, Google, IBM Cloud, OpenShift and Pivotal. It is a sub-project of Jenkins and uses automation, tooling and DevOps best practices to increase development speed and improve CI/CD.

    With Jenkins X, Kubernetes can be leveraged without spending too much time and effort configuring the complex ecosystem. It reduces the complexities and provides a guided approach with the right selection of tools, all within a system that is easy to use and learn. Jenkins X ensures that when a project is started, it’s not necessary to spend a lot of time creating the structure and gathering the required files. If you need a Kubernetes cluster, all the tools can automatically be in working condition without worrying about installation and configuration. In fact, a single jx command in Jenkins X can create CD pipelines, Git repositories and set webhooks. The list of what Jenkins X does is vast, and grows daily.

    What is the difference between Jenkins and Jenkins X?

    Unlike Jenkins, Jenkins X is opinionated and built to work better with technologies like Docker or Kubernetes. Having said that, Jenkins and Jenkins X are deeply related as everything that is done with Jenkins X can be done with Jenkins, using several plugins and integrations. However, Jenkins X simplifies everything, letting you harness the power of Jenkins 2.0 and using open source tools like Helm, Draft, Monocular, ChartMuseum, Nexus and Docker Registry to easily build cloud native applications.

    In fact, it’s this selection of tools and processes that make Jenkins X special and different from Jenkins and any other CI/CD solution. For instance, Jenkins X defines the process, while Jenkins adapts to whichever process are wanted or needed. Jenkins X adopts a CLI/API first approach, relies on configuration as code and embraces external tools (e.g., Helm, Monocular, etc). On the other hand, Jenkins has a UI first approach with configuration via UI, and everything heavily driven by internal plugins. Additionally, the Jenkins X Preview environments enable developers to collaboratively validate changes integrated into the codebase by creating a running system per Pull Request.

    Why was Jenkins X started?

    Software development processes have completely transformed over the last few years and continue to evolve. With DevOps, developers’ responsibility for application and configuration management has significantly increased. While DevOps aims to improve the speed of development and reduce the risk of downtime, the transition from developer to the operational role hasn’t been very smooth for developers. Nonetheless, DevOps is gaining higher acceptance and adoption. At the same time, significant changes have taken the industry by storm.

    Microservices architecture: While the cloud with its several deployment models (public, private and hybrid) gained adoption across all industries, the challenge of deploying, managing and updating applications remained unresolved. This enabled a way forward for a microservices architecture. Unlike the monolithic apps, apps built on microservices can be deployed on smaller, independently deployable and scalable hosts. After taking a cue from the likes of Amazon, eBay, PayPal and Netflix, today most organizations are moving applications from the monolithic to the microservices architecture.

    Container ecosystem: Containers, which offer OS virtualization, gained popularity as they solve some of the problems associated with microservices. Today, different containers on the same host can deploy microservices built on different technologies and frameworks. This allows developers to use whatever language they are comfortable with and package the dependencies within the container itself. Containers are also more efficient than virtual machines (VMs), which virtualize only the hardware. Docker, which helped lead the container movement, has a huge repository of preconfigured Docker images in its Dockerhub public repository, which open-source communities use in abundance. These and many other advantages have made containers a default choice for deployment of code on the cloud.

    The rise of Kubernetes: While containers make things simpler, they are not free from challenges. In fact, they are similar to VMs when it comes to managing or orchestrating them. It is challenging for any organization to make sure that machines are not under or over provisioned and every dollar spent for memory, CPU, or storage is well accounted for. There was a need for a solution which allowed efficient and optimal operations with an ability to move containers around, automatically if possible. Google found this exact solution a long time ago and later introduced it in the form of Kubernetes. The open source solution simplifies installation, upgrades and orchestration of containers. Though other cloud vendors also offer their own solutions to orchestrate containers, Kubernetes is vendor-agnostic and offers a common platform for handling containers across all types of clouds and even an in-house infrastructure.

    Nonetheless, with all these changes, today developers have a lot of options within a fragmented open source ecosystem with numerous tools for CI/CD. Every tool is purpose-built to solve a part of the problem, but it’s not easy to choose the right ones. It can take years for an organization to gain a good enough understanding of CI/CD and develop an efficient setup. Developers often have to spend more time fine-tuning their CI/CD setup than work on real development. There’s also not a straightforward way to manage Kubernetes clusters and people are wary of the lack of effective monitoring for Kubernetes in production environments.

    Though Jenkins can help developers make the most of their CI/CD setup with Kubernetes, it is not easy to select the right combination of plugins and configuration which can all work in tandem with the code. Very few teams agree on what’s the best way to do CD on Kubernetes and many haven’t ever set up a Jenkins Pipeline.

    These challenges led the community to think about a solution which can leverage Jenkins to automate CI/CD in the cloud for those who haven’t used Kubernetes before or even those who are using Kubernetes but are struggling with CI/CD. The thought eventually took the form of the Jenkins X project.

    What are the main features of Jenkins X?

    Jenkins X kubernetes captainJenkins X is built for developers and is designed to help ship code faster, following the best practices in DevOps. That’s why it offers preview environments, simplifies cluster creation with DevEx and can run on different cloud providers’ clusters. One of the biggest advantages of using Jenkins X is that knowledge of Kubernetes internals isn’t necessary and developers can start leveraging the ecosystem right away. However, if it’s necessary to change the setup to fit specific environments or workflows tweaks can be made to the underlying Dockerfile, Jenkins X pipeline, Jenkinsfile or Helm charts as everything is versioned in Git. Let’s examine some of the most talked about features of Jenkins X:

    Automated CI and CD: Jenkins X offers a sleek jx command line tool, which allows Jenkins X to be installed inside an existing or new Kubernetes cluster, import projects and bootstrap new applications. Also, Jenkins X creates pipelines for the project automatically.

    Environment Promotion via GitOps: Jenkins X allows for the creation of different virtual environments for development, staging, and production, etc. using the Kubernetes Namespaces. Every environment gets its specific configuration, list of versioned applications and configurations stored in the Git repository. The promotion of new versions of applications between these environments is done automatically following GitOps practices. Moreover, code can be promoted from one environment to another manually and change or configure new environments as needed.

    Preview Environments: Though the preview environment can be created manually, Jenkins X automatically creates Preview Environments for each pull request. This provides a chance to see the effect of changes before merging them. Further, Jenkins X adds a comment to the Pull Request with a link for the preview for team members.

    You can learn more about all Jenkins X features here.

    What are the top 5 advantages of Jenkins X?

    Easier setup: Jenkins X offers build packs for different kinds of projects, automates the installation, configuration and upgrades of external tools (Helm, Skaffold, Monocular etc.), and helps developers get started quickly with a single line jx command. Moreover, developers have freedom to explore the internal plumbing of Jenkins X whenever deemed fit.

    Isolation: Every team gets to run its own instance of Jenkins X; either in a shared cluster or in their own separate clusters. Within a shared cluster, each team can have its own namespace and can effectively share resources while being able to have different pipelines, flows, and configuration as that used by other teams. With separate clusters, the teams get its own set of resources, and won’t be impacted by other teams’ workloads.

    Higher velocity: Jenkins X allows unhindered development without shipping logistics slowing things down. Powerful commands expedite most tasks and provide seamless integration with cloud or SCM. For example, a simple ”jx create cluster gke” command installs Jenkins X on Google cloud. AWS (EKS), Azure (AKS), Oracle (OKE) and more can also be used. Furthermore, the application code along with all necessary files for containers, packaging, and pipelines are stored in a common repository and are available out of the box.

    Faster recovery: GitOps creates a single source of truth with everything versioned and comments available for every pull request. The configuration as code, of both Jenkins X and your environments, allows developers to get the right context and traceable information to resolve outages faster.

    Predictable releases: Jenkins X helps create development/test environments using the “jx create devpod” command to provide each developer their own sandbox inside the Jenkins X cluster. As the devbuild pods are the same as those used in the pipeline used in production, it ensures code will perform in a predictable manner. Further, Jenkins X helps spin up Preview Environments before code is promoted to production. All these features help roll out stable code.

    How CloudBees can help developers get started with Jenkins X?

    Start off by subscribing to CloudBees Jenkins X Support for initial setup and keeping Jenkins X up-to-date, stable and compliant. CloudBees offers 24×7 technical support for both Jenkins and Jenkins X and is home to the largest group of Jenkins-certified engineers anywhere. You can also watch this video by James Rawling to learn more about Jenkins X.

     

    Additional resources

     

  • Jenkins X Calls to Simplified Telephony Solutions

    Jenkins X Calls to Simplified Telephony Solutions

    Ask your industry colleagues what Jenkins X might be and you may get different answers. Is it a plane, train or automobile? Is it Jenkins++? Is it the beloved Jenkins Butler on steroids?

    If you’re a developer, you know Jenkins and now Jenkins X is perhaps one of the most important emerging technologies for building cloud native applications on Kubernetes. Developers who’ve tested and deployed Jenkins X find the benefits of using the technology for their continuous integration (CI) and continuous delivery (CD) infrastructure invaluable.

    Matthew LebrasseurMatthew Lebrasseur, vice president, information technology for Simplified Telephony Solutions Inc. in Toronto says his experience using Jenkins to build an agile software delivery pipeline will lead to the full deployment of Jenkins X.

    Like many leaders who’ve burned their fingers trying different tools for CI/CD, Lebrasseur had struggles with the software development process using a variety of tools such as Spinnaker, Drone and Terraform. Although some of these CI/CD tools were easy to implement and use, they lacked many basic features.

    These tools might have worked for a single project, but Lebrasseur said his team had to work on multiple projects, languages and pipelines. The projects weren’t getting anywhere with the barebones functionality these tools offered. All this changed when Lebrasseur decided to bring Jenkins into the picture.

    Jenkins was highly impactful in automating the entire software delivery process and expediting deliveries for his organization. Lebrasseur has never been averse to taking risks and choosing the right CI/CD tools for his business is no exception. In fact, it’s part of the company DNA.

    “In the technology world, you have to be nimble to adapt quickly to the changing realities and make the most of what technology has to offer. Taking risks is a big part of this exercise,” he said. Lebrasseur’s team grew quickly from just three to 16 engineers and with that staff came the expectation to move and innovate faster and take risks that translate into competitive advantage.

    Simplified Telephony Solutions spent just two-days converting all of its pipelines from Jenkins to Jenkins X.

    As an example, Lebrasseur said his team took only two weeks to transition from Nomad to Kubernetes and had used the same for three years when Jenkins X became an attractive option.

    While Jenkins gives tremendous flexibility to developers in configuring their CI/CD environment with plugins of their choice, the abundance of plugins can overwhelm small teams working under strict deadlines. Jenkins X makes it easier for such teams to leverage the power of Jenkins with several powerful single line commands and a higher degree of automation.

    Lebrasseur noted that he’s followed the Jenkins X project from the very beginning, but could only opt for it when it started offering support for BitBucket. As a result, Simplified Telephony Solutions spent just two-days converting all of its pipelines from Jenkins to Jenkins X.

    “We converted clusters…just abandoned ship on everything else and just streamlined our pipelines for every project,” Lebrasseur said. “Everything’s the same.”

    While the most significant advantage with Jenkins X had been the ease of usage and its ability to automatically create CI/CD pipelines for all kinds of languages and projects, one can’t forget GitOps. Labrasseur pointed out GitOps and the “ability to recover an entire cluster” within seconds with full history and traceability using a simple rollback.

    Jenkins X had Lebrasseur at GitOps.

    Additional resources

     

  • Under the Hood of Jenkins X – A CI/CD Solution for Cloud Applications on Kubernetes

    Under the Hood of Jenkins X – A CI/CD Solution for Cloud Applications on Kubernetes

    Motivation

    First, we articulated the business value that Jenkins X in automating Continuous Everything for Kubernetes. We encourage you to read it first.

    If you recall, Jenkins X as an automated CI/CD solution for cloud applications on Kubernetes. Jenkins X automates the installation, configuration, and upgrades of tools, so that users can learn at their own pace. This vastly simplifies the user experience, since users don’t have to stomach all the various pieces on Day One, and can learn at their own pace.

    With the built-in automation, teams can focus on releasing quality and secure software frequently and predictably to customers, without worrying about the shipping logistics. At CloudBees, we think it will be easier for our users if we tease things apart even before you start wondering what’s under the hood. This blog provides a quick overview on some of those “undercover agents,” including Jenkins itself, so that you can seamlessly continue on your journey in the continuous paradigm!

    Jx

    Jenkins X introduces the jx command line – a single command to rule them all.

    You can either:

    • Install the “jx” binary on your local machine, or
    • Use the Google Cloud shell. The shell comes with most of the tools that you will need like Git, gcloud, kubectl, etc.

    Some examples of using jx are:

    • “jx create cluster gke “ creates a new Kubernetes cluster on Google Cloud
    • “jx create quickstart” creates a new app and imports the generated code into Git and Jenkins for CI/CD
    • “jx open jenkins” opens Jenkins in a browser
    • “jx sync” synchronises your local files to a devpod
    • “jx cloudbees” opens the CloudBees CD for Kubernetes app in a browser
    • etc.

    You can type “jx help” to find the various operations you can perform in Jenkins X.

    Helm

    Find details here.

    Helm charts:

    • Manage Kubernetes applications in a predictable and repeatable fashion, which means, they:
      • Define the app
      • Install the app
      • Upgrade the app
    • Are versioned in source control, and hence can be audited
    • Are easy to create and publish, and hence reduce communication overhead
    • Make rollbacks to the last known good version stress-free (and drama-free)

    In our modest example, Jenkins X creates the following Helm chart asset(s) in Git:

    ChartMuseum

    Find details here.

    Let’s understand the basics of a chart repository first.

    A chart repository is:

    • An HTTP server that houses an index.yaml file and optionally some packaged charts
    • A location where packaged charts can be stored and shared

    ChartMuseum:

    Skaffold

    Find details here.

    Skaffold is a command line tool that:

    • Facilitates CD for Kubernetes applications
    • You can iterate on your application source code locally then deploy to local or remote Kubernetes clusters
    • Handles the workflow for building, pushing and deploying your application, and leverages that workflow in an automated pipeline to promote applications from test to staging to production.

    Jenkins X creates the following build and deploy workflow yaml using Skaffold:

    Jenkins

    Find details here.

    Jenkins is an open source automation tool that:

    • Is a self-contained Java-based program that can be used as a simple CI server or turned into a continuous delivery hub
    • Has a plugin ecosystem to support building, testing, and deploying any project
    • Requires Jenkinsfile that supports pipeline-as-code syntax/DSL in two formats:
      • Declarative syntax (recommended)
      • Scripted syntax

    Jenkins X creates the following pipeline to promote through various stages:

    Docker

    Find details here.

    Docker:

    • Standardizes and automates the way we build, manage, and secure applications using containers
    • Creates true independence between applications and infrastructure
    • Creates a model for better collaboration and innovation between developers, QA, release, operations and security professionals

    Jenkins X creates the following image for the containerized application:

    Kubernetes

    Find details here.

    Kubernetes runs production workloads at Google, which translates to running billions of containers per week

    Among many other things, Kubernetes:

    • Automates deployment, scaling, and management of containerized apps
    • Groups containers that make up an application into logical units for easy management and discovery
    • Gives you freedom to take advantage of on-premise, hybrid, or public cloud infrastructure, letting you effortlessly migrate workloads
    • Restarts containers that fail
    • Replaces and reschedules containers when nodes die
    • Kills containers that don’t respond to health checks
    • Scales your application up and down:
      • Automatically based on CPU usage or
      • Manually with a command or a UI

    Ksync

    Find details here.

    Ksync:

    • Syncs files between our local file system and a Kubernetes cluster.
    • Transparently updates containers running on the cluster from your local checkout.
    • Enables developers to use their favorite IDEs to work from inside a cluster instead of from outside it. There is no reason to wait minutes to test code changes when you can see the results in seconds.

    “jx sync” within Jenkins X allows us to sync files between our local lie system to the devpods on the Kubernetes cluster. This prevents typical problems like “works on my machine!” from slowing down business, even when everyone knows there are problems in production.

    Prow

    Find details here.

    Prow is the system that handles GitHub events and commands for Kubernetes. It hails from the Kubernetes ecosystem and was created at Google. It is an event based solution that provides a loosely coupled architecture ideal for the cloud native world. It leverages ChatOps to interact with a build system. Prow manages its job configuration in Git. So, in the event of a wipeout, pipelines can be restored.

    Prow includes a scalable and highly available webhook event handler that writes ProwJob CRDs to Kubernetes based on git events, so that other microservices can perform operations like running CI/CD pipelines. These git events can be triggered by new PRs and issues, comments, merges and pushes.

    Jenkins X includes Prow out of the box when creating clusters on GKE (Google Kubernetes Engine) with Terraform using “jx create terraform” or when using the feature flag on “jx create cluster gke —prow” or “jx install —prow” commands. Prow, along with Knative build, makes serverless Jenkins possible that addresses problems originating from static Jenkins masters.

    Knative Build

    Find details here.

    Knative Build is a cloud native solution that extends Kubernetes with CRDs and provides ways to build applications from source. Teams can chain steps that run sequentially in the same Kubernetes pod using different containers where they can share state between each step.

    Build templates are Kubernetes CRDs and are automatically upgraded with each Jenkins X release. The Prow configuration that is generated by Jenkins X when creating or importing applications refers to a build template. Knative build, along with Prow, makes serverless Jenkins possible that addresses problems originating from static Jenkins masters.

    Teams can leverage build templates to reference the type of Kubernetes pod that is created to run builds. These templates allow teams to specify which docker image to execute your build in, what environment variables exist at build time, what service accounts and secrets are in play and what volumes should be mounted.

    Cloud

    For those of us who have tinkered with Kubernetes, we know it is difficult to setup and manage. Jenkins X alleviates that pain and leverages the managed Kubernetes solutions offered by major cloud providers, like:

    • Google Cloud (GKE)
    • Amazon Web Services (EKS)
    • Microsoft Azure (AKS)
    • Oracle Cloud (OKE)
    • etc.

    Let’s take the example of Google cloud. The Google cloud sdk provides the command-line interface for Google Cloud Platform products and services, like:

    • Gcloud, which manages authentications, local configurations, developer workflow, and interactions
    • Kubectl, which orchestrates the deployment and management of Kubernetes container clusters on gcloud
    • etc.

    Summary

    Jenkins X automates CI/CD for cloud applications on Kubernetes. So that engineers can focus on writing and testing products that wow the world, Jenkins X abstracts away a lot of the shipping logistics that would otherwise consume your time and energy.

    Jenkins X gets you started at the speed of light, however, the onus lies on you to gradually and eventually catch up to these underlying details. While we are sure you are well on your way to design and implement resilient pipelines, we wanted to make sure you have these details at your fingertips.

    Pipeline is no longer a pipe dream – so, happy coding!

    Additional resources

     

  • Introducing Software Delivery Management

    Introducing Software Delivery Management

    If you were amongst the attendees of our first few CloudBees Days events of 2019, in Madrid April 4, Zurich April 10, or yesterday in Dallas April 16, you witnessed us introducing the world to a new category of software we are inventing here at CloudBees: Software Delivery Management, or SDM (yeah, I know the world needs another TLA – sorry.) Tomorrow at the San Francisco event, we have a big announcement that is key to us realizing this new vision.

    So what is Software Delivery Management, or SDM? Why does the world need it?

    Well, at the most basic level, with “software eating the world,” every company in the world is learning how to be a software company. That means that every company is trying to get better at delivering software. This is a big change for many from the time when software development in most companies was the province of IT as a cost center. This is what “digital transformation” is about. Software development organizations are now the engines of innovation at the companies that have transformed most quickly.

    Digital Natives like Facebook, Netflix, Amazon, Google and the like as well as scores of fast moving startups have pioneered a set of continuous integration, delivery and deployment practices (CI/CD) as well as industrialized agile and DevOps methodologies to deliver new releases to their customers, 1000s of times more frequently, with higher quality, fewer defects and faster time to recover.

    Even software companies like us are learning to be more effective software companies to keep up, and essentially going through our own digital transformations.

    These transformations usually start with adopting CI/CD, agile and DevOps tools, practices and cultures. At CloudBees, as the leading CI/CD vendor to enterprises in the world, with nearly 50% of the Fortune 100 amongst our 1000s of customers, and the corporate sponsor of Jenkins, the dominant CI/CD automation server in the world, we have a front row seat to this mad dash. In the last year, we’ve seen these initiatives move from important to top level urgency at the largest companies in the world.

    But once these transforming companies start seeing faster and better software through these practices, they start to see other problems.

    People outside of engineering have a hard time knowing what’s been deployed. Engineers working on a feature are disconnected from the user and market input that drove product management to prioritize the feature. A feature might be behind a feature flag but customer success doesn’t know what enabling the feature for a customer will do exactly. Roadmaps are increasingly irrelevant so marketing and sales feel like they don’t know what’s coming down the line to make the most of the innovation in the market. Engineering doesn’t know what changes in system performance or user behavior resulted specifically from their latest change. Senior management doesn’t have a trustworthy view of value moving through the system and the business impact of this faster pace of innovation.

    For a new greenfield product built to be buzzword compliant from the start – cloud native, microservices on Kubernetes or serverless, etc. – some of the newer generation cloud native CD tools (like our own Jenkins X) + some of the latest generation observability tools may solve these problems to an extent, and from a developer’s perspective – seeing how their feature flows through to, and performs in, production.

    But that’s not the reality of software development in an organization of any complexity in terms of sheer size, the diversity of software being developed and environments to which it is being delivered, and the range of stakeholders who legitimately care when software is at the center of the business. In our Madrid event this month, I was really struck by how many attendees in roles like head of DevOps transformation talked about the impedance mismatches with other functions of the business once software development becomes truly continuous and agile – this is what I’ve written about before as “Continuous Everything.”

    So Software Delivery Management (SDM) is the new category of software system that we are inventing to solve this problem of getting every function in and beyond the software delivery organization on the same page. On the same page about what’s being or been delivered, why, and its impact. Ensuring that the entire organization can have connected processes on top of a common real time view of the truth. That encompasses the entirety of diverse software product portfolios, from mainframe to microservices, on premise to public cloud, embedded to mobile, and beyond.

    SDM will be for the software development organization what Salesforce.com is for the sales organization, NetSuite is for finance and Workday is for HR.

    Like the best of these systems, it serves all roles and all levels in the organizations that use them. For SDM, our aim is that even developers find that using such a system doesn’t control them, but sets them free by giving them all the context they need to build software that has an impact – and the ability to see that impact in concrete ways. And other roles can interact with software development in a supportive rather than disruptive way. While pointy-haired bosses like me stay out of their way when we can see that things are humming along. Together, everyone in an organization using SDM cooperates fluidly with one another to “Build Stuff that Matters.”

    Watch this space in the coming weeks and months for more detail on what the building blocks of an SDM are, how it will benefit different people in different roles in software organizations, and how we’re using our own internal experiences at CloudBees to inform its design.

    Meanwhile, the foundation of software delivery management as a category and as a practice is CI/CD, and choosing CloudBees for CI/CD today is the best first step on that journey we will hopefully take together.

  • Why SaaS CI/CD Solutions Work for Open Source Projects

    Why SaaS CI/CD Solutions Work for Open Source Projects

    Today, open source communities use a wide range of tools for building and delivering their software. These tools tend to also be open source, but more and more open source communities are starting to see the value of managed, SaaS tools to help support their communities and their goals. Still, finding the right fit can be a challenge – you want tools that help developers but also support the values of the open source community. Factors like hosting, cost, scalability and integration support play a crucial role in making these choices. In this post, I’ll take a look at why SaaS solutions are often the right choice for open source, and why they may be the right choice for your own continuous integration/continuous delivery (CI/CD) open source project.

    While Jenkins is most open source projects’ default choice for CI/CD – and often rightly so – it’s not the only thing your team should consider. These days, teams working in open source projects have also started using various SaaS tools (Heroku, GitHub, JFrog, etc.) for their infrastructure and portions of their CI/CD pipeline. Still, somehow, they are reluctant to use hosted CI servers. This raises the point – if you can trust Heroku for your open source projects, then why shouldn’t you trust a SaaS CI/CD provider whose core business is based on the same service?

    Why SaaS?

    Sometimes, an open source community may decide to use a hosted, SaaS tool so that it’s one less piece of infrastructure they have to oversee and manage or to keep newer projects at the lowest level of community governance and decision-making needed for as long as possible. Cloud-based CI/CD solutions delivered on SaaS models can help let communities move fast and worry less for a variety of reasons:

    • Cost. For open source projects, most of the SaaS CI/CD tools are available free of cost.
    • Security. Organizations keen on security and compliance can adopt a hybrid approach, where they can host their code on servers running in private networks and run CI/CD builds in the cloud. This lets the CI/CD service own the security problems, which is one less thing for a community to worry about.
    • Efficiency. SaaS CI/CD, such as CloudBees CodeShip, are optimized for speed and flexibility with no overhead or management to achieve those goals.
    • Simplicity. It’s easy to get started with SaaS CI/CD; provisioning can be done within a few clicks (discussed below). It is ideal for small teams managing the entire CI/CD setup as it significantly reduces overheads in the development and deployment process.

    Out-of-the-box CI/CD solutions

    A lot of teams and individual developers prefer to work with out-of-the-box cloud-based CI/CD solutions like CloudBees CodeShip, which one can use for free for their open source projects. That’s because, in addition to the cost advantage and ease of setup, cloud-based hosting means there are no administration and maintenance – from version updated, to security patches to world-class technical support -everything is handled for you and made simple. With no hardware or software infrastructure to procure and maintain, teams can focus on working on their projects and writing high-quality code, not on infrastructure.

    That is why organizations starting with small open source projects often find out-of-the-box SaaS CI/CD solutions useful as they make it possible to start small and scale up when required. The SaaS model enables easy scalability allowing developers to perform a higher number of commits, provision larger build machines for tests and use parallel pipelines. Therefore, these solutions are very popular in the CI/CD market. The tradeoff is that such solutions are not suited for all organizations as they offer limited flexibility for customization.

    The bottom line

    Teams comfortable with open source often cite a lack of openness in SaaS solutions as a major concern. However, vendors have gradually started exploring the benefits of open source; the biggest and most commonly cited example is that of Microsoft which has embraced open source as well as SaaS in recent years. Similar trends in the industry suggest that SaaS and open source will complement each other more in the future and certainly aren’t at loggerheads. In fact, SaaS-based software delivery solutions like CloudBees CodeShip are gaining acceptance among open source communities – which suggests that the future of such solutions is bright.

    SaaS CI/CD solutions like CloudBees CodeShip fits a variety of open-source and private projects, offering better scalability, customization and ease of use. Moreover, as these solutions are generally free, teams using Jenkins-based solutions can easily try the CloudBees CodeShip CI/CD solution in their environment and make an informed decision for its adoption with their open source projects.

    Additional resources

  • What is DevOps?

    What is DevOps?

    From conferences to articles and books, the term DevOps has taken the IT world by storm. The buzz is understandable, as many IT groups are looking for a way out of the morass of delayed projects, questionable quality and missed deliveries in which they often find themselves.

    It’s clear DevOps has potential to address the challenges IT faces. Organizations that have embraced DevOps – including companies such as Etsy, Netflix, Target, Walmart, Ticketmaster, Amazon and Facebook – have shown that DevOps principles can lead to competitive differentiation by enabling teams to deliver higher quality software at the speed required with customer expectations of 24/7 uptime and instant access. As a result, it’s not a stretch to say DevOps is becoming the industry standard for software development.

    Why DevOps anyway?

    A little more than 100 years ago, the automotive industry was revolutionized by the first moving assembly line. Once industrialization and automation were applied to dramatically reduce the time required to produce an automobile, there simply was no going back. Certainly a few car manufacturers resisted the change, clinging to their existing approach, but the holdouts all eventually adapted or they perished.

    DevOps computer image

    Companies that have adopted DevOps principles are innovating faster and leaving competitors behind. So what is the DevOps culture and why do we need it? By changing to a DevOps culture, these companies have aligned all stakeholders – from dev and ops teams to management and more – around the common objective of delivering quality software rapidly and reliably.

    Today’s technically savvy customers expect immediate access to the benefits of technological innovation and they’ve grown increasingly intolerant of software that is buggy, unstable or not secure. Customer expectations are driving what is known as the continuous economy, in which customers experience a business through its software and how they deliver it using continuous integration/continuous delivery (CI/CD). In this economy, technology is a business enabler and the ability to reliably deliver quality software is critical.

    Organizations will need to transition to DevOps soon to remain competitive in the continuous economy – even to stay relevant. This may sound like hyperbole, but an increasing number of companies are finding out the hard way that almost every company is a software company and that DevOps is a common sense way to gain a sustainable, competitive business advantage. In addition, developers will seek employment at companies where they can innovate instead of fight fires all day.

    Even companies in industries far afield from software have found that they need to make software companies part of their core business. Take Ford Motor Company. You may not think of trucks as software, but the Ford F-150 truck features more than 150 million lines of code. A lead engineer on the Ford EcoBoost engine team noted that the “secret sauce” in the success of EcoBoost technology is software.

    There is no going back. It’s safe to assume that your more successful competitors will be embracing DevOps sometime within the next five years. The question you must answer is, “Where will your organization be in five years?”

    Why you should care about DevOps

    Simply put, companies that have embraced DevOps are better positioned to solidify their position in existing markets and expand into new ones. Indeed, adopting DevOps is rapidly becoming the de facto standard for software development. A quick look at industry examples – think Apple, Netflix, Tesla, Uber, AirBnB and many others – reveals early successes and tremendous potential.

    Once DevOps is implemented, companies have seen an increase in satisfaction for development process stakeholders. Because they are applying modern software development practices, these companies are attracting and retaining better talent, who will drive further quality improvements, productivity improvements and ultimately success at the company. When developers no longer perform tedious, rote manual coding tasks and are free to innovate and make a difference, they are happier.

    A large financial software company saw a 15 percent improvement in employee satisfaction just weeks after adopting CD in support of DevOps principles. Just as important, a happier and more engaged workforce means increased productivity, lower costs and better software.

    At the end of the day, any company that needs to deliver quality software faster needs to care about DevOps and the supporting practice of CD, which enable continuously building, testing and deploying software in frequent, incremental releases.

    Companies that fail to embrace DevOps will bleed talent and fall further behind their competition, serving as illustrations of the adapt-or-perish maxim that is as true in the software development world as it is in the natural world.  Which company do you want to work at?

    What is the DevOps model?

    There’s been a lot of talk about what DevOps is and is not, but recent consensus is that DevOps is primarily about culture. Organizations that have adopted this culture value collaboration, experimentation and learning. In a DevOps culture, all participants in all phases of the software delivery lifecycle align around a shared goal: the rapid delivery of stable, high-quality software from concept to customer.

    Automation of software development, testing and deployment through continuous delivery goes hand-in-hand with DevOps. Automation enables organizations to deliver software more quickly while ensuring operations can have confidence in what is being deployed, and customers get the quality, security and stability they require.

    The DevOps trinity

    At its core, DevOps is being about gaining alignment between all software development lifecycle participants on three planes – people, process and tools – often called the DevOps trinity. In this framework, the software development lifecycle is viewed as having upstream (development) and downstream (operations) halves. The two halves are part of the same software delivery process but in many traditional IT organizations these halves are highly disconnected (Figure 1).

    DevOps Upstream Downstream

    Figure 1: The disconnect between upstream and downstream people, process and tools.

    Upstream, the development culture usually prioritizes speed and innovation, whereas downstream the operations culture is tasked with a focus on maintaining quality, stability and uptime. Upstream, development uses point tools to define and build software using agile methods. Downstream, enterprise class tools are the norm for managing the test, release, deployment and operation of the software.

    Downstream meetings are much more likely to be filled with talk of Information Technology Infrastructure Library (ITIL) and Project Management Body of Knowledge (PMBOK) than Kanban and the latest scrum. DevOps is about connecting these worlds and eliminating the chasm that exists between the upstream and the downstream.A look at the “How” of DevOps

    Often, discussions on the how of DevOps are too narrowly focused on the technical core of what happens from the time developers commit code to the time software is deployed to a server. In reality, DevOps extends from the initial concept to the customer deployment.

    The full DevOps cycle starts with understanding the customer’s needs. Once they are clear, then you create a plan to define a solution, a plan to deliver it and a plan to support it once it moves into operation, where you gather customer feedback and the whole cycle begins again.

    Figure 2: Agile methods, continuous integration and continuous delivery provide the foundation for a DevOps transformation.

    DevOps –fad or here to stay?

    Anyone who’s been in the software industry for any length of time has seen fads come and go. The buzz for software-oriented architectures (SOA) was all the rage a few years ago, but that buzz faded to a whisper.  Waterfall methods are fading fast, replaced by agile development. How can you tell if DevOps is just the latest in a line of operational strategies that will fade out?According to a Harvard Business Review survey sponsored by Google, 86 percent of the 654 respondents say that it is important to their company to develop and put new software into production quickly. That leaves 14 percent who do not realize that they need solutions like DevOps. At times like this, it pays to step back, take a breath and take stock of where we are and where we are going. When we do, it becomes clear that DevOps is not a fad; rather it is the way successful organizations are industrializing the delivery of quality software today and will be the new baseline tomorrow and for years to come.

    DevOps today

    When research shows that most companies surveyed are planning to or are already transitioning to DevOps enabled by CD, that speaks to the current popularity of DevOps. In taking a closer look at the companies that have already adopted CD practices and a DevOps culture, many of these companies are the established leaders in their respective industries and hold a dominant market position. Having made substantial, long-term investments in CD and DevOps, they are already seeing impressive benefits. For example:

    • Amazon, the leader in public cloud infrastructure, now releases on average every second
    • Etsy, the leading peer-to-peer e-commerce marketplace, went from deployments that took hours to deploying changes 50 times per day
    • Ticketmaster, the world’s leading ticketing company and one of the world’s top 10 e-commerce sites, deploys to production at the end of every sprint or multiple times per sprint
    • Netflix, disrupter of the entire cable and TV industry and responsible for about 30 percent of North American internet traffic, deploys thousands of times daily
    • Nordstrom, a leading fashion specialty retailer with 323 stores in the U.S., increased the pace of releases to monthly from just twice per year
    • Allstate, the largest publicly held personal lines property and casualty insurer in the U.S. is now delivering new applications in half the time it took to deploy a single new feature
    • Coca Cola, the world’s third most valuable brand, has accelerated project delivery as much as 50 percent and cut defects in production by about half

    While some organizations have resisted making a DevOps transition – either due to confusion about what DevOps entails, concerns that it may just be a passing fad or a simple aversion to change – other organizations have jumped in with both feet.

    The organizations who’ve made the jump are eager to reap the benefits being realized by competitors and other companies that have already transitioned to a continuous delivery and a DevOps culture. These companies are differentiating themselves and delivering higher quality software faster by aligning development and operations across the DevOps trinity – people and culture, process and practice, and tools and technology. Better alignment across these three planes enables organizations to improve time to production, drive business value and reduce IT costs.

    CloudBees drives DevOps, CI and CD

    The CloudBees Suite enables companies to automate their software delivery with a layer of visibility and governance all built on DevOps and CI and CD best practices. CloudBees Core delivers Jenkins for the enterprise with a tested and verified Jenkins core, advanced enterprise features that extend the power of Jenkins, fully-tested updates and professional support for the Jenkins core and all 1,500 community plugins. The flagship offering provides high availability to support continuous delivery processes, as well as simplified manageability, security and scalability of Jenkins to ease administration across distributed Jenkins environments and IT architectures, on-premise or in the cloud.

    CloudBees DevOptics offers businesses the visibility into the software delivery pipelines to visualize their value streams and determine their DevOps performance based on industry metrics. CloudBees CodeShip enables teams to get up and running fast using CI/CD as a service while the CloudBees Starter Kit gets teams up and running for free with CloudBees Core and CloudBees DevOptics.

    DevOps customers including Capital One, IHG, Autodesk, Mabl and a host of others can attest to their DevOps transformations using CloudBees products. See what they’ve done by reading their case studies and decide on whether deploying a DevOps model is best for you.

    Where will your organization be in five years?

    Additional resources