Requirements

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)