Publications

Published books, articles and blog posts



2024

GitOps

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?

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

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

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.

GitOps: repository structures and patterns

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

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

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

Flux or argocd - the great controversy

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

Continuously scan your Kubernetes cluster for security issues using trivy operator

Getting started with trivy operator for k8s and current limitations

GitOps patterns for repository and folder/directory structure

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

 

2021

eBook: Kubernetes AppOps Security

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

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

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

Series of articles comprising six articles on Kubernetes AppOps published.

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

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

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

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

Automatically deploying Java Artifacts to Maven Central via Travis CI.

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

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

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

Recommended settings for the Security Context in Kubernetes pods.

 

2019

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

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

Querying docker image sizes via the command line

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

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

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

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

Advantages but also challenges of using GraalVM with Java.

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

Comparing the three frameworks via the experience from the "getting started" tutorials and beyond.

Continuous Delivery with Sonatype Nexus, Jenkins and the Cloudogu EcoSystem

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

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

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

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

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

Coding Continuous Delivery Part 1 – Jenkins pipeline plugin basics

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