Publications

Published books, articles and blog posts



2025

2025: Increasing GitOps productivity

GitOps Book Blog Icon
GitOps is getting more boring (in the best sense). This year we will likely see features enhancing productivity and DX

 

2024

New example for Argo CD ApplicationSets

GitOps Book Blog Icon
There is a new example config repo structure that advertises the usage of Argo CD AppSets

OpenGitOps Resources

GitOps Book Blog Icon
OpenGitOps now provides a collection of resources relating to GitOps such as books, papers, articles, etc.

Book: GitOps

Publication Image
Practical introduction for development and platform teams.
In-depth focus on GitOps (without basics for K8s or CI/CD).
Clear insight into the consequences of GitOps and the difference it makes in everyday development life.
Comprehensive guidance on relevant challenges such as secrets, repo structures and asynchronicity.

Weaveworks shutdown: Impact on GitOps?

GitOps Book Blog Icon
In what way does the unravelling of the company Weaveworks affect the Flux project and GitOps as a whole?

 

2023

GitOps: repository structures and patterns by example

Publication Image
Real examples of public GitOps repositories make the GitOps patterns more tangible

Interview: Three questions and answers: how to get your individual GitOps process going

Publication Image
Implemented correctly, GitOps takes a lot of work off admins' shoulders. This interview shows how to find the best tools and define your own process.
Publication Image
Identifies patterns from recurring elements during GitOps process design and describes them in four categories operator deployment, repository, promotion and wiring. These pattern can help designing GitOps processes and repo structures as well as finding and standardizing terminology, facilitating communication

GitOps tools in detail: Argo CD vs. Flux

Publication Image
An in-depth comparison of Argo CD and Flux regarding bootstrapping, linking, CLI and GUI, components and resource requirements, authentication and authorization, templating, configuration management, monitoring and alerting, ecosystem, multi-tenancy,multi-cluster management, OCI, high availability and load balancing, maturity and commercial offerings.

 

2022

Repo Structures: Stages/Environments with base/shared resources in Kustomize or Helm in trunk-based development

Cloudogu Community Icon
A solution to a very specific GitOps design problem that seems to have an impact on many users

Flux or argocd - the great controversy

Cloudogu Community Icon
Arguments for Flux or ArgoCD based on the requirements of current project

Continuously scan your Kubernetes cluster for security issues using trivy operator

Cloudogu Community Icon
Getting started with trivy operator for k8s and current limitations

GitOps patterns for repository and folder/directory structure

Cloudogu Community Icon
My insights on GitOps repo and folder/directory structure patterns after combining my own experience with other awesome resources

 

2021

eBook: Kubernetes AppOps Security

Publication Image
This eBook uses diagrams and code to illustrate how developers can secure the operations of their applications with kubernetes. It focuses on network policies and security context.

Automation helpers - A Market overview for GitOps tools

Publication Image
This article captures a snapshot of the market for "GitOps tools", creates a catalog of general criteria for choosing the right GitOps tool and applies this catalog to a comparison of ArgoCD and Flux v2.

Coding Continuous Delivery: CIOps vs. GitOps with Jenkins

Publication Image
What is the difference between CIOps and GitOps? Is there still room for a CI server? This article shows hands-on how to automate certain aspects of GitOps using Jenkins.

 

2020

Kubernetes AppOps Security Series

IT Affinity Blog Icon
Series of articles comprising six articles on Kubernetes AppOps published.

Kubernetes AppOps Security Part 6: Pod Security Policies (2/2) - Exceptions and Troubleshooting

Publication Image
Use cases that call for several Pod Security Policies within one Kubernetes cluster and how to handle them, including troubleshooting tips.

Kubernetes AppOps Security Part 5: Pod Security Policies (1/2) – Good Practices

Publication Image
Setting global security settings for pods and containers within a Kubernetes cluster using Pod Security Policies.

Automatic Let’s Encrypt Certificates with Apache Tomcat / Spring Boot

IT Affinity Blog Icon
A solution for fetching and renewing TLS certs without restart via Let’s Encrypt that works with standalone and embedded Tomcat as well as Spring Boot.

Continuous Delivery to Maven Central with Travis CI

IT Affinity Blog Icon
Automatically deploying Java Artifacts to Maven Central via Travis CI.

Kubernetes AppOps Security Part 4: Security Context (2/2) – Background

Publication Image
Backgrounds on Security Context in Kubernetes: Isolation of containers, attack vectors, defense and tooling.

Docs As Code - Continuous Delivery of Presentations with reveal.js and Jenkins - Part 2

Publication Image
2nd part: Demonstrates additional alternatives for deployment (Sonatype Nexus and Kubernetes), while the general structure of the Jenkinsfile remains the same.

Kubernetes AppOps Security Part 3: Security Context (1/2) – Good Practices

Publication Image
Recommended settings for the Security Context in Kubernetes pods.

 

2019

Kubernetes AppOps Security Part 2: Using Network Policies (2/2) - Advanced Topics and Tricks

Publication Image
Advanced topics around Kubernetes Network Policies like CNI, testing, debugging, limitations, alternatives and pitfalls.

Querying docker image sizes via the command line

IT Affinity Blog Icon
CLI for querying and comparing sizes of different OCI ("Docker") images.

Kubernetes AppOps Security Part 1: Using Network Policies (1/2) - Basics and Good Practices

Publication Image
Attack vectors mitigated by and good practices for Kubernetes Network Policies.

Docs As Code - Continuous Delivery of Presentations with reveal.js and Jenkins - Part 1

Publication Image
1st part: demonstrated the use cases and benefits of delivering presentations with reveal.js.

Generating a hard-coded build number/version name in your Java app

IT Affinity Blog Icon
Generate a version number for Java apps during the build as a static final field without any runtime dependencies using the annotation processor.

GraalVM (a bit) beyond Hello World

IT Affinity Blog Icon
Advantages but also challenges of using GraalVM with Java.

Short comparison: Building Graal Native Images with Quarkus, Micronaut and Helidon

IT Affinity Blog Icon
Comparing the three frameworks via the experience from the "getting started" tutorials and beyond.

Continuous Delivery with Sonatype Nexus, Jenkins and the Cloudogu EcoSystem

Publication Image
Continuous delivery of Java artifacts with Jenkins to Nexus repositories is easy. This articles shows examples for the enterprise as well as for open source (Maven Central).

 

2018

Coding Continuous Delivery with Jenkins Pipelines

IT Affinity Blog Icon
Series of articles comprising four articles on Continuous Delivery with Jenkins published.

Coding Continuous Delivery Part 4 — Static Code Analysis with SonarQube and Deployment on Kubernetes et al. with the Jenkins Pipeline Plugin

Publication Image
How to trigger static code analysis using SonarQube and continuously deliver to Kubernetes from Jenkins pipelines.

Coding Continuous Delivery Part 3 – Helpful Tools for the Jenkins Pipeline

Publication Image
Useful tools and methods for Jenkins pipelines: Shared libraries for reusing and unit testing; Advantages of using Docker containers.

Coding Continuous Delivery Part 2 – Performance optimization for the Jenkins Pipeline

Publication Image
Faster feedback by accelerating Jenkins pipelines using parallelization and nightly builds.

Coding Continuous Delivery Part 1 – Jenkins pipeline plugin basics

Publication Image
Basics and some practical tips for getting started with Jenkins pipelines.

The pragmatic migration to JUnit 5


 

2017

More sutainable Android Software with Project Treble and 6-y LTS Kernels on Android O?

Android Logging for Java Professionals – SLF4J and Logback in Android

Android Logging for Java Professionals – SLF4J - Logback in Android

Reusing Java know-how for logging in Android.

Android 7 (Nougat) on a 5-year-old phone

Jenkins Pipeline plugin: code completion in IntelliJ

Automatic checks for vulnerabilities in Java project dependencies

Automatic checks for vulnerabilities in Java project dependencies

Automating discovery of known security vulnerabilities in Java dependencies using Maven,Jenkins and OWASP Dependency-Check.

 

2016

Maven: Create a more sophisticated build number

Version names with Maven: Reading the version name

Version names with Maven: Creating the version name


 

2015

Building GitHub projects with Jenkins, Maven and SonarQube 5.2 on OpenShift

Using Custom Maven / JDK version when building with Jenkins on OpenShift

Building GitHub projects on Jenkins slaves on OpenShift

Modernizing android UIs part 2: design support library, switches, action buttons

Modernizing android UIs part 1: Migrating from Actionbarsherlock to Material Design

iTunes: Exporting playlists with relative paths

Migrating from Songbird/Nightingale to iTunes

Building GitHub projects with Jenkins, Maven and SonarQube 4.1.1 on OpenShift


 

2014

Moving from Google Code to GitHub: Migrating the wiki

Maven: Create a simple build number

Synology: Backup and restore encrypted folders


 

2013

Android apps – nusic: Find New Music Albums

Automatically downloading/backing up/dumping/exporting databases from remote hosts via the web

JSF: Displaying FacesMessages during render response phase

Android: Custom Rom – Installing Google Play only (Customize GApps)

Raspberry Pi: What to do if SD card doesn’t work

Hibernate: Write SQL to a specific logfile (without additional framework)

Songbird/Nightingale: Improving search performance

NAS: Downgrading DSM (DS213+)

Songbird/Nightingale: Using Songbird database in Nightingale

Songbird/Nightingale: Exporting playlists

Microsoft Robocopy vs Linux NAS: Robocopy Pitfalls

NAS: DS213+ & WD20NPVT – 3. Performance and Encryption

NAS: DS213+ & WD20NPVT – 2. Power Consumption

NAS: DS213+ & WD20NPVT – 1. Conclusion


 

2012

Shutting down JUnit tests “gracefully” in eclipse

Running Windows batch files from eclipse using workspace-relative paths

Using Unix command-line tools in the Win32 console

Generating and customizing JUnit and Code Coverage reports with Ant