RPMs ==== OpenDaylight has a mature RPM Continuous Delivery pipeline. Every autorelease build is automatically packaged as an RPM, and even if autorelease is broken a daily job builds the latest distribution snapshot build into an RPM. RPMs can be passed to test jobs that install them, start OpenDaylight with its systemd service, connect to the Karaf shell and verify basic functionality. RPMs are hosted on the CentOS Community Build system repositories. Some repos are updated very frequently with the latest builds, while others are permanent homes of official releases. Developers can build custom RPMs with pre-merge patches for testing by first creating a custom distribution with the integration-multipatch-test job and then feeding the resulting artifact to the packaging-build-rpm job. Build Jobs ---------- OpenDaylight Integration/Packaging has added support for many variations of fully automated RPM builds. packaging-build-rpm ^^^^^^^^^^^^^^^^^^^ The `packaging-build-rpm job`_ is the primary way to build an RPM from an OpenDaylight distribution (built by `autorelease `_ or the `snapshot distribution ` job). It accepts a set of `parameters`_ that can be used to configure the build and passes them to the `RPM build logic in Integration/Packaging's repo`_. The job produces both a noarch RPM and source RPM. The noarch RPM can be passed to test jobs for validation. The source RPM can be downloaded to a system with the required credentials and then pushed to the CentOS Community Build system to be built into a noarch RPM on their servers and hosted in their repos. The RPM and SRPM artifacts of the job are handled differently depending on the Jenkins silo the job is executing in. When running in production (releng silo), artifacts are hosted on Nexus. There are RPM repos for each active branch (`oxygen-devel`_). New builds are automatically added to the appropriate devel for their branch. When running in the sandbox, artifacts are thrown away by default. To keep an artifact for further testing, add a path regex that matches it to the Archive Artifacts param of the job (`ARCHIVE_ARTIFACTS=/home/jenkins/rpmbuild/RPMS/ noarch/opendaylight*.rpm`). The files matched will be stored in OpenDaylight's log archive along with the other job logs. packaging-build-rpm-snap ^^^^^^^^^^^^^^^^^^^^^^^^ The `packaging-build-rpm-snap job`_ packages the most recent `snapshot distribution ` build from a given branch as an RPM. This could be used by a developer to test code that was just merged, but which has not been included in an `autorelease build `_ yet. The job is also triggered daily, to ensure that OpenDaylight's Continuous Delivery pipeline is fed new builds even if autorelease is broken. Test Jobs --------- packaging-test-rpm ^^^^^^^^^^^^^^^^^^ The `packaging-test-rpm job`_ accepts a link to an RPM and validates it. It installs the package with the system's package manager, starts OpenDaylight's systemd service, verifies that it's reported as active, connects to the Karaf shell and checks that some key bundles are present. Repositories ------------ OpenDaylight Nexus ^^^^^^^^^^^^^^^^^^ Packages resulting from build jobs running on OpenDaylight's infrastructure are automatically hosted on OpenDaylight's Nexus repositories. Continious Delivery Repositories ................................ OpenDaylight provides fully-automated Continuous Delivery pipelines for RPMs. Every RPM built in the production RelEng Jenkins silo is pushed to the devel repo appropriate for its branch. Builds are triggered for every successful autorelase job, as well as daily using the latest available snapshot build. Continuous Delivery repos for Carbon, Nitrogen and Oxygen: - `opendaylight-carbon-epel-7-x86_64-devel`_ - `opendaylight-nitrogen-epel-7-x86_64-devel`_ - `opendaylight-oxygen-epel-7-x86_64-devel`_ CentOS Community Build System ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ While most RPM builds are triggered automatically in OpenDaylight's Jenkins, some RPMs are promoted to be hosted in OpenDaylight's CentOS repositories. There are a series of repos that are updated at varying frequencies, from testing repos that are updated with pre-release versions very frequently to release repos that are the permanent home of official OpenDaylight releases. Testing Repositories .................... Repositories with the -testing suffix are updated very frequently with pre-release versions of OpenDaylight from the appropriate branch. New RPMs replace the old ones, so installing from these repos will always provide the most recent versions. Testing repos for Carbon, Nitrogen and Oxygen: - `nfv7-opendaylight-6-testing`_ - `nfv7-opendaylight-7-testing`_ - `nfv7-opendaylight-8-testing`_ Release Repositories .................... Repositories with the -release suffix host official OpenDaylight releases. They are updated infrequently to never, and will host their release artifacts forever. Release repos are subdivided into two groups based version numbers. Repositories with both a major and minor version number (62, 70, 71) are pinned to a specific OpenDaylight release or service release (Carbon SR2 6.2.0, Nitrogen 7.0.0, Nitrogen SR1 7.1.0). Repositories with only a major version (6, 7) will always host the latest service release from that major release. If a new SR comes out, the repo will get the update (Nitrogen 2 will replace Nitrogen SR1). Release repos for the latest Carbon and Nitrogen service releases: - `nfv7-opendaylight-6-release`_ - `nfv7-opendaylight-7-release`_ Release repos that will permanently host specific Carbon and Nitrogen releases: - `nfv7-opendaylight-60-release`_ - `nfv7-opendaylight-61-release`_ - `nfv7-opendaylight-62-release`_ - `nfv7-opendaylight-70-release`_ - `nfv7-opendaylight-71-release`_ Repository Configuration Files ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ While it's possible to install RPMs directly (`dnf install -y `), it's often easier to use a repository configuration file to install whatever the latest RPM is in a given repo. The OpenDaylight Integration/Packaging project provides `example repo config files for each official repository`_. Package managers like Yum and DNF will automatically find repo configuration files placed in the /etc/yum.repos.d/ directory. Curl them into place with something like: sudo curl -o /etc/yum.repos.d/opendaylight-7-testing.repo \ "https://git.opendaylight.org/gerrit/gitweb?p=integration/packaging.git;a=blob_plain;f=packages/rpm/example_repo_configs/opendaylight-8-devel.repo" Standard install commands will now find the repository as expected. sudo dnf install -y opendaylight The latest RPM in the repo will be installed. Custom RPMs ----------- It's possible for developers to build custom RPMs, typically with unmerged patches that need system testing. First, use the `integration-multipatch-test`_ job to create a custom distribution that includes the set of unmerged patches. See the `Custom Distributions `_ section for extensive docs. Once you have a custom distribution artifact, pass it to the `packaging-build-rpm job`_ to package it as an RPM. See the `packaging-build-rpm`_ section for docs. .. _packaging-build-rpm job: https://jenkins.opendaylight.org/releng/job/packaging-build-rpm-master/ .. _parameters: https://jenkins.opendaylight.org/releng/job/packaging-build-rpm-master/build .. _RPM build logic in Integration/Packaging's repo: https://github.com/opendaylight/integration-packaging/blob/master/packages/build.py .. _packaging-build-rpm-snap job: https://jenkins.opendaylight.org/releng/job/packaging-build-rpm-snap-master/ .. _packaging-test-rpm job: https://jenkins.opendaylight.org/releng/job/packaging-test-rpm-master/ .. _opendaylight-carbon-epel-7-x86_64-devel: https://nexus.opendaylight.org/content/repositories/opendaylight-carbon-epel-7-x86_64-devel/org/opendaylight/integration-packaging/opendaylight/ .. _opendaylight-nitrogen-epel-7-x86_64-devel: https://nexus.opendaylight.org/content/repositories/opendaylight-nitrogen-epel-7-x86_64-devel/org/opendaylight/integration-packaging/opendaylight/ .. _opendaylight-oxygen-epel-7-x86_64-devel: https://nexus.opendaylight.org/content/repositories/opendaylight-oxygen-epel-7-x86_64-devel/org/opendaylight/integration-packaging/opendaylight/ .. _nfv7-opendaylight-6-testing: http://cbs.centos.org/repos/nfv7-opendaylight-6-testing/x86_64/os/Packages/ .. _nfv7-opendaylight-7-testing: http://cbs.centos.org/repos/nfv7-opendaylight-7-testing/x86_64/os/Packages/ .. _nfv7-opendaylight-8-testing: http://cbs.centos.org/repos/nfv7-opendaylight-8-testing/x86_64/os/Packages/ .. _nfv7-opendaylight-6-release: http://cbs.centos.org/repos/nfv7-opendaylight-6-release/x86_64/os/Packages/ .. _nfv7-opendaylight-60-release: http://cbs.centos.org/repos/nfv7-opendaylight-60-release/x86_64/os/Packages/ .. _nfv7-opendaylight-61-release: http://cbs.centos.org/repos/nfv7-opendaylight-61-release/x86_64/os/Packages/ .. _nfv7-opendaylight-62-release: http://cbs.centos.org/repos/nfv7-opendaylight-62-release/x86_64/os/Packages/ .. _nfv7-opendaylight-7-release: http://cbs.centos.org/repos/nfv7-opendaylight-7-release/x86_64/os/Packages/ .. _nfv7-opendaylight-70-release: http://cbs.centos.org/repos/nfv7-opendaylight-70-release/x86_64/os/Packages/ .. _nfv7-opendaylight-71-release: http://cbs.centos.org/repos/nfv7-opendaylight-71-release/x86_64/os/Packages/ .. _example repo config files for each official repository: https://git.opendaylight.org/gerrit/gitweb?p=integration/packaging.git;a=tree;f=packages/rpm/example_repo_configs;hb=refs/heads/master .. _integration-multipatch-test: https://jenkins.opendaylight.org/releng/search/?q=integration-multipatch-test .. _oxygen-devel: https://nexus.opendaylight.org/content/repositories/opendaylight-oxygen-epel-7-x86_64-devel/org/opendaylight/integration-packaging/opendaylight/