Last week we announced the Continuous Delivery Foundation (CDF) at the 2019 Open Source Leadership Summit. Through a strange series of events I was fortunate to attend and participate in the “Continuous Delivery” keynote on the first day. Joining me on stage was Kohsuke (Jenkins), Kim and Christie (Tekton), Tracy (Jenkins X), and Andy (Spinnaker) to share a bit about the four initial projects joining the CDF.
The aviation community has been buzzing with speculation and commentary around the recently Boeing 737 MAX 8 plane crash in Ethiopia and the model’s subsequent grounding around the world. Watching this news report I was struck by the following quote from the “Deputy Assistant Secretary of State” regarding a similar crash in Indonesia:
Considering the percentage of my day which is spent typing on a keyboard, it should come as no surprise that I might have thoughts on what makes a “good” versus a “bad” keyboard. In fact, I think everybody who uses a tool with this level of frequency should have thoughts on what qualities make variations of the tool good or bad.
Today the Continuous Delivery Foundation officially launches, marking the completion of almost two years of work. Starting at the 2017 Jenkins World Contributor Summit where we, the Jenkins project discussed a “Jenkins Software Foundation”, to the 2018 Open Source Leadership Summit where the concept evolved into a continuous delivery focused organization, culminating in what we have today: a strong group of organizations and initial projects banding together for under the banner of the Continuous Delivery Foundation (CDF).
There are 90 days until the beginning of the week-long AIDS/LifeCycle, the 545 mile ride from San Francisco to Los Angeles to raise critically needed funds for HIV/AIDS-related services. For me, this means just under three more months to meet my fundraising goal. Not only that, this means my fellow riders and I have a shockingly small number of weekends to get our training in order!
The Jenkins project has long used Mirrorbrain, a great piece of software for running a high-traffic download site using redirect mirrors. We use it to transparently delegate traffic to a network of donated mirrosr, for downloading our Debian, Red Hat, and other packages of Jenkins and all of our plugins.
Linux has now been my primary desktop operating system for the better part of the last decade. Originally I had used openSUSE but found myself migrating to Debian for a number of reasons. I recently jumped back over to openSUSE, and have been impressed once again with the overall quality of the entire distribution.
I don’t think anybody can understate the value free and open source software has brought to the world at large, value which has largely been freely given with little expectation in return. The ubiquity of free and open source software seems to have fostered a sense of entitlement in the minds of some users. This presumption that free and open source software should do exactly what they expect it to do, and if not, that’s a problem that you the maintainer should address. I find this viewpoint to be not only incorrect, but abusive.
My exact words were “I could have likely filled half a book with thoughts and practices on good security for Jenkins” and were I to write that book, my colleague Daniel would certainly be a guest author of a few chapters, such as one on the limitations of credentials masking. In that linked post Daniel highlights some of the ways in which credentials can be misused in Jenkins. As I mentioned on Twitter, this is not a unique problem to Jenkins, any system which allows user-defined build processes and allows the use of credentials in those build processes will allow exposure of those credentials.
As the number of different ways to configure Jenkins approaches infinity, I have come to appreciate one pattern in particular as generally good. When I first started the draft of this blog post, three years ago (!), I wanted to share that by coupling Jenkins and Docker together I finally had the CI/CD server I had been waiting for. In the past few years, Docker has increasingly become the default environment for Jenkins, and rightfully so. In my previous post I mentioned some of the security pitfalls of using Docker in an untrusted CI/CD context, like that which we have in the Jenkins project. Regardless of trusted or untrusted workloads, I still think Docker is a key piece of our CI/CD story, and here I would like to outline why we need Docker in the first place.