Laurent Hoeltgen

My Development Environment (follow-up)

2021-12-26  ·  4 min read  ·  Programming

Continuous Testing, Integration, Deployment and Docs as Code

A short overview on how I set up a CI/CD/CT strategy and tried a docs as code model.

This is a follow-up to my previous post on my development environment.

I spent some time to extend my template project in two different directions. First I configured a continuous testing/integration/deployment pipeline, and secondly I added some setup to work with a docs-as-code style project.

A CI/CD Pipeline

There's probably nothing really fancy about the pipeline that I set up. It's mostly what you get in GitLab by default. There are three stages: build, test, and deploy:

The pipeline relies on two containers that are stored in the GitLab container registry. One of the containers is used to provide the compilers and other tools needed for building the code. The other container only contains Doxygen and PlantUML to generate the documentation.

The testing steps generate a JUnit XML as well as a Cobertura XML file to publish the results of the unit test evaluation and the code coverage. Both integrate well with GitLab CI/CD artefact reports. See here for JUnit and here for Cobertura.

The containers are rebuilt on a periodic basis and there's a apt update as well as a apt upgrade step in the building process. So the builds are not really reproducible even though I fixed the underlying base image at Ubuntu 21.10. Reproducible builds are an interesting concept but not in the scope of this project. Also, there are no mechanisms that probe whether upgrading any of my dependencies would break anything. For the moment I don't really see a need in checking this.

Docs as Code

At my current job we develop software, at least to some extent, according to a V-model. This usually involves numerous requirements, all sorts of diagrams to document the design and usually also some bookkeeping on the testing status. We use tools such as Doors, Enterprise Architect and a handful of other proprietary products to manage all this data. I don't want to argue whether these tools are good or not, but the process is sometimes not as smooth as one would expect it. We are, for example, required to link requirements to designs and to test results. This can be tricky. Some of aforementioned tools rely on databases where you can't simply add a field for a URL or they might use proprietary data formats that cannot be read or written by any other tool. We've resorted to quite a few weird hacks in the past to fulfil the necessary linking.

Some of my colleagues have tried to solve this issue by proposing a docs-as-code environment. The idea is to have all the requirements, designs and documentations in simple files that can be version controlled and stored together with your source code. They use Sphinx to create readable documents and do the linking. I actually prefer Doxygen and wondered whether it would be possible to achieve something similar by creating all the documentation and design with Doxygen and PlantUML.

My solution looks as follows:

 Doxygen ·  PlantUML ·  Docs as Code ·  CI/CD ·  Gitlab

How to cite this page

Hoeltgen, Laurent: My Development Environment (follow-up), 2021-12-26.

BibLaTeX code:
@online{dev-environment-2,
  author   = {Hoeltgen, Laurent},
  title    = {My Development Environment (follow-up)},
  date     = {2021-12-26},
  language = english
  url      = {https://www.laurenthoeltgen.name/content/blog/
              dev-environment-2}
}
Download BibLaTeX file

CC BY-SA 4.0 Laurent Hoeltgen. Last modified: September 19, 2025.
Website built with Franklin.jl and the Julia programming language.
Privacy Policy · Terms