Requirements
Support for Existing Setups
Support the existing Jenkins and Gerrit setup that the Fabric team uses.
Support the existing Gitlab-CI setup used for Indy and Ursa while they transition to the new system.
Automatically driven by the PR process with build results gating PR merges.
New Capabilities
Support Kubernetes clusters for test net creation, monitoring, destruction.
Profiling capabilities for unit tests and pipeline steps.
Must be self-service so that teams have full control over their part of the available resources.
Iroha
Support for Existing Setups:
Jenkins:
ability to self-manage plugins, credentials, job parameters
start and restart build feature for maintainers
Multiplatform/multiarchitecture builds:
Linux x86_64, armv7 (hard to find large RAM instances), armv8
Windows x86_64
MacOS x86_64
Multi compilers:
gcc5, gcc7, clang6, Apple clang (on macos), Visual C++ (windows)
Instead of compiling on a native platform cross-compilation can be used (but it hurts):
Requires a list of specific-version dependencies for each platform
Compiling dependencies for other dependencies
~ 2-2.5GB RAM per compilation thread (currently builds are running on one-off AWS EC2 instances (c5.2xlarge))
Uploading artifacts to DockerHub and our Nexus repository (debug builds, etc)
Fabric
Support for Existing Setups:
Gerrit
Jenkins
Gerrit integration and automatic and manual trigger of CR builds (reverify, VerifyBuild, etc)
Freestyle and pipeline jobs
Self-maintained package images for build environment
...
Multiarchitecture/Multiplatform
Linux x86, s390x - build and test
Windows - build x86_64
macOS - build x86_64
Docker
Compose - Samples, BYFN, EYFN
Compose - Fabric Test
Services - Fabric (CouchDB, ZooKeeper, Kafka, Chaincode)
Nexus, maven, docker hub, GitHub for publishing
General Forward Looking Requirements
Support for declarative, multi-project CI pipeline in the style of gitlab-ci and concourse
Pipeline declaration defines flow and dependencies for jobs
CI system responsible for setting up dependencies defined in the pipeline
Project repo responsible for defining and implementing the logic of a build job
Project responsible for placing artifacts into output location managed by CI system
Simple pipeline status overview
At a glance "CI radiator" support
Support for gated commit promotion through gates
Commits to a branch trigger test gates, on success, commit is merged forward to trigger next gate
Failed tests prevent promotion; promotion failures motivate maintainers to fix problems
Access to k8s cluster for "network" testing
Access to unpublished/snapshot container images
Mechanisms to populate volumes from build system for use by the network
Ability to run jobs that use docker and docker compose (KubeVirt or similar are options)