Use Jenkins DSL for description of build pipelines
Jenkins allows to use a groovy based DSL to describe the build process. See: https://jenkinsci.github.io/job-dsl-plugin/
Cool thing about this, it allows to implement and modify the CI process like "normal" program code. Even static analysis can be performed on the build config.
Furthermore, it allows for a more fine-grained configuration of the build process (for instance, individual branches can be handled differently). Otherwise, a seperate job needs to be created for this.