Intro
“Concourse is an open-source continuous thing-doer.”
This is yet another pipeline tool in the same category as Gitlab CI or Github Actions.
I selfhost this in my kubernetes cluster and use it mostly as a platform to automate things. Here’s a quick overview of the jobs I have on it.
misc-notifications
Random discord notifications for myself go in this pipeline. I only have two jobs that remind me to drink water and take walking breaks based on timers.
personal-website
This is pipeline that runs the jobs to publish this website! It builds the image on each git repo update and deploys it to my Oracle K3s instance.
deploy-k8s-homelab
This deploys all the apps I run in K3s to both of my K3s clusters. They run automatically on git repo updates. I define what’s deployed using helmsman.
images-build
Exactly what the name suggests, it build docker images I maintain automatically. Usually from upstream Github releases. They’re up on Docker hub so feel free to pull and use them
image-notifications
These are just discord notifications that let me know when a new version of an image has been published to Docker hub.
artifacthub-to-branch
Since so far all the Helm charts I use are all on Artifacthub, I have this pipeline that watches Helm charts I use on Artifacthub. It pushes a branch for each of the Helm charts I’m interested with the latest version of the Helm chart specified in my Helmsman desired state file. So if a new version of a chart comes up, then that branch will be updated to use the latest version of that chart. This way, I can simply cherry-pick or merge the latest commit on that side branch into my main branch to upgrade.
k8s-homelab-branch-tracker
This job is responsible for creating a pipeline for each branch in my git repo. The pipeline it creates will be the next section.
k8s-homelab-diff
This group of pipelines is what the k8s-homelab-branch-tracker job creates. As the name suggests, the purpose of these pipelines is to show me what each branch would change if applied to my currently setup on my main branch. Since I have two clusters, these are two jobs that diff each of them. These two jobs trigger automatically on each new commit on the branch and sends me a discord notification with a link to the logs for me to inspect.
If I decide that the diffs are low risk enough from the logs, then I can manually run the third job, which cherry-picks the latest upgrade commit to main branch. This commit would then, of course, trigger a deployment to my clusters from the deploy-k8s-homelab pipeline.
Conclusion
That’s every job I run in my Concourse instance at the moment. It was slowly built up over a few years and it’s all publicly available here.