This weekend's technological adventure was trying to configure my personal site to use Jenkins, the automated Continuous Integration/Continuous Deployment server.
I wanted to add Jenkins to this site for a few reasons outside of learning a new thing. We use Jenkins at work for confirming that new changes don't break the site. Jenkins periodically scans Git for new pull requests. When we make a new one, Jenkins automatically runs our test suite and then leaves a little badge on the side of the PR saying whether tests passed or not. We then review the code, and developers approve/reject the PR accordingly. We could set up Jenkins to also handle merging in the pull request, updating the code base on our servers, and restarting the application to push these changes live to the site. Instead, we still do deployments manually for a few good reasons:
For my personal site, none of these reasons are deal-breakers, so I'm going to go ahead with my personal ideal setup
*I haven't figured out how to automatically trigger Step #8, since I don't think there's a webhook for Richard Stallman to deliver fruit baskets. Maybe I can set up an IFTTT for "masses rejoicing"
If you're just along for the ride, sit back and enjoy. If you're trying to set up something similar for yourself, here are few notes about my project:
For this guide, I closely followed this step-by-step guide, written by Michal Karzynski (whose blog posts should be bookmarked, read, and reread by every self-respecting Django developer). I would have followed it to the letter, and kept this blog post short, but I had a few issues that warranted walking through since the original post is now 4 years old.
I started by installing Jenkins as per the instructions on the official Jenkins-CI wiki
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt-get update sudo apt-get install jenkins