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.