2022.01 Release

A large effort to upgrade the existing dependencies across the Practiv framework, address CVEs, delivery highly requested functionality to execute parallel jobs against Maven builds, and also introduce native Kube development support by default to our Micronaut tilesets.

Develop

Latest Java LTS Support

We now support a number of different java base images. These images are regularly kept up to date with the latest security patches.

  • OpenJDK 17 on Alpine

    basalt-openjdk17-alpine

  • OpenJDK 17 on Debian

    basalt-openjdk17-debian

  • OpenJDK 17 on Oracle Linux

    basalt-openjdk17-oraclelinux

The latest tilesets include the alpine release by default.

Micronaut v3 tileset released

chalk-micronaut-v3

Build support has been added to include support for the Micronaut V3 framework.

As part of our ‘develop’ initiative, this Tileset now includes Skaffold support by default!

Through some simple configuration, you can now leverage this to continuously hot-deploy changes and debug your app directly in Kubernetes! This feature will leverage the same Kubernetes templates used to deploy your app to production, with substituted developer values that can be supplied in:

src/test/resources/skaffold.properties

This is meant to be a subset of what you might expect [environment.properties](http://environment.properties) to look like for a release repository, but is only concerned with project-level configuration.

Next time you build, look out for the generated skaffold.yaml template in your project directory, and attempt to run your app in Kube dev mode:

skaffold dev

This functionality is part of a much wider developer experienced focused initiative. Watch this space.

Dependency and License Information

  • XML/JSON information will now generate license and dependency breakdown information. You can find this under your projects target/ directory next time you build.

Micronaut v2 updates

Fixed a bug when running docker based integration tests on Windows where it would hang listening for a log message.

Build

Jenkins

The memory defaults have been raised to 4Gi from 2Gi, the new version uses more memory but seems pretty snappy with the extra memory.

You can configure the memory with in your Jenkins project pom.xml:

<tile-jenkins.docker.memory>4G</tile-jenkins.docker.memory>

Squash images by default on Jenkins

practiv-tile-docker

Squashing allows docker to create one layer for the build, that means any number of RUN commands are resolved and only the final result ends up in the layer.

The result is cleaner images and cleaner Dockerfiles because we don’t need to fiddle with RUN commands to make sure they clean up, we can just clean up naturally and let the squash ignore ephemeral files.

To use this on the local machine:

branchout maven cv -Pdocker-squash

Concurrent Maven builds

Some jobs are slow, such as cypress or webdriver scripts to package up for reuse.

These projects benefit from being parameterised but in order to release in a timely fashion it needs to run several concurrent iterations of itself.

Introducing some new pipeline scripts to help:

mavenBuildConconcurrentParameterisedSelf

Run the cross product of the this job and the given parameter values in parallel and succeed/fail this build based on the result. The system property called some.systemProperty will be set for the builds.

mavenBuildConcurrentParameterisedSelf("some.systemProperty", ["@Login", "@FeatureOne"])

mavenBuildConcurrentParameterised

Run the cross product of the given jobs and parameter values in parallel and succeed/fail this build based on the result.

mavenBuildConcurrentParameterised(["some-job/master"], ["@Login", "@FeatureOne"])

mavenCypressCucumberSharedScript

Run the cross product of the this job and the given parameter values in parallel and succeed/fail this build based on the result. The system property called tile-cucumber.tagExpression will be set for the builds to match the cypress cucumber tile.

mavenCypressCucumberSharedScripts(["@Login", "@FeatureOne"])

mavenWebdriverioCucumberSharedScripts

Adding rules to support concurrent webdriver io builds with tag expressions

Run the cross product of the this job and the given parameter values in parallel and succeed/fail this build based on the result. The system property called tile-webdriverio.tagExpression will be set for the builds to match the cypress cucumber tile.

mavenWebdriverioCucumberSharedScripts(["@Login", "@FeatureOne"])

Nexus

practiv-build-nexus

Nexus upgraded to 3.36.0

Container resources are now configurable with the following properties:

tile-nexus.maximumRamPercentage: 65
tile-nexus.dockerMemory: 4Gi
tile-nexus.cpuLimit: 4
tile-nexus.cpuRequest: 0.5

Security updates and fixes

Image CVEs addressed across all build images for this quarter .

Run

Environment Tiles

chalk-environment

chalk-pipeline

chalk-run-platform-gke

Allowlisting has been added to environment templating. This improvement means that you have more control over exactly what is allowed to run in your environments, while also ensuring they remain clean and consistent when deployed.

For example if you wish to deploy an operator operation-example that creates deployments called example, then create a file:

src/main/resources/manifests/<project.artifactId>/deployment/operator-example

with the contents:

example

That will mean the cleanup step post deployment will mark ’example’ as a known application and leave it alone

Configurable autoscaler support

chalk-run-platform-eks

practiv-run-kubernetes-autoscaler

Provide an up-to-date default of 1.19.2 for the kube cluster auto scaler and allow consumers downstream to configure that version trivially to suit their clusters.

Infrastructure

Latest Terraform and AWS Provider

basalt-terraform

Upgraded to Terraform 1.11 and AWS Provider 3.68.0

Addon support for EKS

chalk-cluster-eks

Add-ons is a superior way to manage the cluster extras that come with an EKS cluster but that previously were either self managed or left to rot. Add-ons makes dealing with this easy and the latest shale EKS package makes it part of a standard upgrade and probably automatic

How to get up to date

Depending how your tileset dependencies are configured, you may have pulled in some of these updates as they were released. You will have seen automatic updates for minor versions of Tile Sets within the range you use. In order to take an upgrade to a new major version then you should bump the range to the one that provides the upgrade you want. Be aware that if you change the range to include new major versions, you may encounter breaking changes, which will be detailed in you local documentation for each Tile Set.

If you would like some advice on the process, please feel free to contact us at support@practiv.com.