• Making Machines Move: Lots of interesting stuff in here. How a small but really cool hosting company was able to move a workload + storage from one physical server to another. (Easily described in a sentence but the details are very tricky to get right!) Also mentioned is something called lsvd - log-structured virtual disk. It’s a way to use local nvme ssd storage for better than network attached storage performance with the safety of being data-backed by something with the durability guarantees (and low cost potentially) of s3.
  • How to manage Monorepos within a Jenkinsfile in CloudBees CI: Use when with a changeset specification. This would work for us at work.
pipeline {
    agent none
    stages {
        stage('Build Frontend') {
            agent { docker { image 'my-node-agent' } }
            when {
                changeset "**/frontend/*.*"
                beforeAgent true
            }
            steps {
                dir('frontend') {
                  sh 'npm install'
                  sh '...'
                }
            }
        }
        stage('Build Web') {
            agent { docker { image 'my-maven-agent' } }
            when {
                changeset "**/backend/web/*.*"
                beforeAgent true
            }
            steps {
               dir ('backend/web') {
                sh 'mvn -B -DskipTests clean package'
                sh '...'
               }
            }
        }
        stage('Build REST API') {
            agent { docker { image 'my-golang-agent' } }
            when {
                changeset "**/backend/api/*.*"
                beforeAgent true
            }
            steps {
               dir ('backend/api') {
                 sh 'go build'
                 sh '...'
               }
            }
        }
    }
}
  • Jenkins pipeline ‘when’: The previous link got me wanting to take a closer look at the “when” pipeline keyword… :)
  • Guide to Jenkins Parameterized Builds: Short overview of how to define job parameters and how to trigger a job that sets parameters.
  • No More Blue Fridays: eBPF in linux and soon windows kernels will help prevent the kind of failure we saw in a Crowdstrike kernel driver recently. From the article “Other ways to reduce risk include testing, staged rollouts, and resilience engineering.”
  • Designing Module Interactions in Modulithic Spring Applications: How to structure business logic in Spring for 1 particular transaction within an application. Interesting new idea is how to think about failure as you decompose logic into more focused building blocks.
  • jetcd 0.8.2 Jepsen review: Jepsen review of the official java client for etcd found a couple of bugs around retries. Retries can be dangerous. You have to be sure the write you tried actually didn’t work. That’s hard to do often and it sounds like jetcd kind of naively retries operations on the datastore. Nice writeup. Lost updates and aborted reads are 2 anomalies in these kinds of distributed systems.