Building Multi-Architecture Docker Images in CICD
Blog post from StackHawk
StackHawk has introduced support for arm64 architecture by releasing packaged executables and Docker images for its scanning engine, enhancing its software build process to accommodate future computer architectures. This development involved adapting the StackHawk CLI and Docker images to function on arm64, using tools like Kotlin, Clikt, and Gradle, which enabled multi-architecture compatibility through Java's cross-platform capabilities. The process required leveraging Docker's BuildKit toolkit, using the –platform flag, and employing the binfmt_misc with QEMU emulator for cross-platform builds, especially in Linux and CI environments. The distinction between registries, repositories, images, and manifests was crucial, as these elements facilitated the storage, identification, and retrieval of architecture-specific software versions. By using Gradle tasks within the CI/CD pipeline, StackHawk automated the creation of multi-architecture images, enabling development on various platforms, including Apple's M1 silicon, and providing a foundation for future architectural expansions. The initiative underscores the importance of understanding Docker's handling of multi-architecture builds and aims to guide others in developing software compatible with multiple platforms.