Pool: ODLVEX¶
Note
CentOS 7 based minions are deprecated; prefer Ubuntu 22.04 or CentOS Stream 8 where available.
Selected minion types (deprecated examples):
centos7-builder-* (2c-1g, 2c-2g, 2c-8g, 4c-4g, 8c-8g, autorelease-4c-16g)
Packer:
packer/templates/builder.jsonPlaybook:
packer/common-packer/provision/baseline.yamlNote: Deprecated CentOS 7 general build / autorelease images. Use Ubuntu 22.04 builder going forward.
centos7-robot-2c-2g
Packer:
packer/templates/robot.jsonPlaybook:
packer/provision/robot.yamlNote: Deprecated robot test runner (CentOS 7); migrate to updated robot images when available.
ubuntu1804-mininet-ovs-28-2c-2g
Packer:
packer/templates/mininet-ovs-2.8.jsonPlaybook:
packer/provision/mininet-ovs-2.8.yamlNote: Legacy Ubuntu 18.04 + OVS 2.8 for historical CSIT; prefer Ubuntu 22.04 mininet-ovs-217.
centos7-devstack-2c-4g
Packer:
packer/templates/devstack.jsonPlaybook:
packer/provision/devstack.yamlNote: Deprecated DevStack OpenStack test image (CentOS 7); prefer Ubuntu 22.04 devstack.
centos7-docker-2c-4g
Packer:
packer/templates/docker.jsonPlaybook:
packer/common-packer/provision/docker.yamlNote: Deprecated CentOS 7 docker image; prefer Ubuntu 20.04/22.04 docker labels.
Jenkins Master¶
The jenkins-master is the home for all project’s Jenkins jobs. All maintenance and configuration of these jobs must be done via JJB through the releng-builder-repo. Project contributors can no longer edit the Jenkins jobs directly on the server.
Build Minions¶
The Jenkins jobs are run on build minions (executors) which are created on an as-needed basis. If no idle build minions are available a new VM is brought up. This process can take up to 2 minutes. Once the build minion has finished a job, it will be destroyed.
Our Jenkins master supports many types of dynamic build minions. If you are creating custom jobs then you will need to have an idea of what type of minions are available. The following are the current minion types and descriptions. Minion Template Names are needed for jobs that take advantage of multiple minions as they must be specifically called out by template name instead of label.
Adding New Components to the Minions¶
If your project needs something added to one of the minions, you can help us get things added faster by doing one of the following:
Submit a patch to RelEng/Builder for the appropriate jenkins-scripts definition which configure software during minion boot up.
Submit a patch to RelEng/Builder for the packer/provision scripts that configures software during minion instance imaging.
Submit a patch to RelEng/Builder for the Packer’s templates in the packer/templates directory that configures a new instance definition along with changes in packer/provision.
Going the first route will be faster in the short term as we can inspect the changes and make test modifications in the sandbox to verify that it works.
Note
The first route may add additional setup time considering this is run every time the minion is booted.
The second and third routes, however, is better for the community as a whole as it will allow others to utilize our Packer setups to replicate our systems more closely. It is, however, more time consuming as an image snapshot needs to be created based on the updated Packer definitions before it can be attached to the Jenkins configuration on sandbox for validation testing.
In either case, the changes must be validated in the sandbox with tests to make sure that we don’t break current jobs and that the new software features are operating as intended. Once this is done the changes will be merged and the updates applied to the RelEng Jenkins production silo. Any changes to files under releng/builder/packer will be validated and images would be built triggered by verify-packer and merge-packer jobs.
Please note that the combination of a Packer definitions from vars, templates and the provision scripts is what defines a given minion. For instance, a minion may be defined as centos7-builder which is a combination of Packer OS image definitions from vars/centos.json, Packer template definitions from templates/builder.json and spinup scripts from provision/builder.sh. This combination provides the full definition of the realized minion.
Jenkins starts a minion using the latest image which is built and linked into the Jenkins configuration. Once the base instance is online Jenkins checks out the RelEng/Builder repo on it and executes two scripts. The first is provision/baseline.sh, which is a baseline for all of the minions.
The second is the specialized script, which handles any system updates, new software installs or extra environment tweaks that don’t make sense in a snapshot. Examples could include installing new package or setting up a virtual environment. It is imperative to ensure modifications to these spinup scripts have considered time taken to install the packages, as this could increase the build time for every job which runs on the image. After all of these scripts have executed Jenkins will finally attach the minion as an actual minion and start Pool: ODLVEX ^^^^^^^^^^^^
Jenkins Labels |
Minion Template Names |
Packer Template |
Playbook |
|---|---|---|---|
centos7-builder-2c-1g, centos7-builder-2c-2g, centos7-builder-2c-8g,centos7-builder-4c-4g, centos7-builder-8c-8g, centos7-autorelease-4c-16g |
prd-centos7-builder-2c-1g, prd-centos7-builder-2c-2g, prd-centos7-builder-2c-8g,prd-centos7-builder-4c-4g, prd-centos7-builder-8c-8g, prd-centos7-autorelease-4c-16g |
releng/builder/packer/templates/builder.json |
releng/builder/packer/common-packer/provision/baseline.yaml |
CentOS 7 build minions are deprecated. Use Ubuntu 22.04 (Jammy) orCentOS Stream 8 builder labels for all new jobs. Java 17 is default;Java 11 only for legacy needs. |
- |
- |
- |
Jenkins Labels |
Minion Template Names |
Packer Template |
Playbook |
|---|---|---|---|
centos7-robot-2c-2g |
centos7-robot-2c-2g |
releng/builder/packer/templates/robot.json |
releng/builder/packer/provision/robot.yaml |
Robot image contains only test execution dependencies (deprecated).Prefer Ubuntu 22.04 or CentOS Stream 8 robot images when available. |
- |
- |
- |
Jenkins Labels |
Minion Template Names |
Packer Template |
Playbook |
|---|---|---|---|
ubuntu1804-mininet-ovs-28-2c-2g |
ubuntu1804-mininet-ovs-28-2c-2g |
releng/builder/packer/templates/mininet-ovs-2.8.json |
releng/builder/packer/provision/mininet-ovs-2.8.yaml |
Ubuntu 18.04 with OVS 2.8 (deprecated; migrate to Ubuntu 22.04 mininet-ovs-217) |
- |
- |
- |
centos7-devstack-2c-4g |
centos7-devstack-2c-4g |
releng/builder/packer/templates/devstack.json |
releng/builder/packer/provision/devstack.yaml |
CentOS 7 DevStack image (deprecated). Prefer Ubuntu 22.04 devstack. |
- |
- |
- |
centos7-docker-2c-4g |
centos7-docker-2c-4g |
releng/builder/packer/templates/docker.json |
releng/builder/packer/common-packer/provision/docker.yaml |
CentOS 7 docker image (deprecated). Prefer Ubuntu 20.04/22.04 docker. |
- |
- |
- |
Pool: ODLVEX - HOT (Heat Orchestration Templates)¶
HOT integration spins up integration lab servers for CSIT jobs using Heat rather
than jclouds (deprecated). Image names update on project-specific job templates
via the {odl,docker,openstack,tools}_system_image variable using the format
<platform> - <template> - <date-stamp>.
Following are the list of published images available to Jenkins jobs.
ZZCI - CentOS 7 - builder - x86_64 - 20190403-205252.587
ZZCI - CentOS 7 - builder - x86_64 - 20220101-060058.758
ZZCI - CentOS 7 - builder - x86_64 - 20220401-060107.331
ZZCI - CentOS 7 - builder - x86_64 - 20220811-110452.412
ZZCI - CentOS 7 - builder - x86_64 - 20220830-004905.209
ZZCI - CentOS 7 - builder - x86_64 - 20220915-210350.650
ZZCI - CentOS 7 - builder - x86_64 - 20221016-222911.194
ZZCI - CentOS 7 - builder - x86_64 - 20221201-060105.225
ZZCI - CentOS 7 - builder - x86_64 - 20230301-060101.869
ZZCI - CentOS 7 - builder - x86_64 - 20230401-060117.151
ZZCI - CentOS 7 - builder - x86_64 - 20230501-060110.287
ZZCI - CentOS 7 - builder - x86_64 - 20231213-090206.813
ZZCI - CentOS 7 - builder - x86_64 - 20240101-060132.845
ZZCI - CentOS 7 - builder - x86_64 - 20240201-060121.705
ZZCI - CentOS 7 - builder - x86_64 - 20240221-041136.622
ZZCI - CentOS 7 - builder - x86_64 - 20240306-105309.257
ZZCI - CentOS 7 - builder - x86_64 - 20240401-060133.417
ZZCI - CentOS 7 - builder - x86_64 - 20240501-060129.055
ZZCI - CentOS 7 - builder - x86_64 - 20240601-060133.511
ZZCI - CentOS 7 - builder - x86_64 - 20240701-060130.538
ZZCI - CentOS 7 - devstack - x86_64 - 20220401-230107.511
ZZCI - CentOS 7 - devstack - x86_64 - 20220915-220248.057
ZZCI - CentOS 7 - devstack - x86_64 - 20221016-125752.520
ZZCI - CentOS 7 - devstack - x86_64 - 20230301-230109.257
ZZCI - CentOS 7 - devstack - x86_64 - 20230401-230106.445
ZZCI - CentOS 7 - devstack - x86_64 - 20231213-111336.211
ZZCI - CentOS 7 - devstack - x86_64 - 20240101-230119.558
ZZCI - CentOS 7 - devstack - x86_64 - 20240201-230120.693
ZZCI - CentOS 7 - devstack - x86_64 - 20240306-105306.072
ZZCI - CentOS 7 - devstack - x86_64 - 20240401-230144.262
ZZCI - CentOS 7 - devstack - x86_64 - 20240501-230129.155
ZZCI - CentOS 7 - devstack - x86_64 - 20240601-230133.464
ZZCI - CentOS 7 - devstack-rocky - 20190601-000116.015
ZZCI - CentOS 7 - devstack-rocky - 20190628-065204.973
ZZCI - CentOS 7 - devstack-rocky - x86_64 - 20191002-183226.559
ZZCI - CentOS 7 - devstack-rocky - x86_64 - 20200801-000156.903
ZZCI - CentOS 7 - devstack-rocky - x86_64 - 20200811-042113.395
ZZCI - CentOS 7 - devstack-rocky - x86_64 - 20200813-042753.841
ZZCI - CentOS 7 - devstack-rocky - x86_64 - 20220401-000109.037
ZZCI - CentOS 7 - devstack-rocky - x86_64 - 20220811-110620.848
ZZCI - CentOS 7 - devstack-rocky - x86_64 - 20220915-220323.497
ZZCI - CentOS 7 - devstack-rocky - x86_64 - 20221016-125827.911
ZZCI - CentOS 7 - devstack-rocky - x86_64 - 20221101-000109.537
ZZCI - CentOS 7 - devstack-stein - x86_64 - 20220401-010109.230
ZZCI - CentOS 7 - devstack-stein - x86_64 - 20220811-110634.575
ZZCI - CentOS 7 - devstack-stein - x86_64 - 20220915-222435.096
ZZCI - CentOS 7 - devstack-stein - x86_64 - 20221016-222956.928
ZZCI - CentOS 7 - devstack-stein - x86_64 - 20221101-010107.368
ZZCI - CentOS 7 - docker - x86_64 - 20220401-220102.840
ZZCI - CentOS 7 - docker - x86_64 - 20220811-110637.413
ZZCI - CentOS 7 - docker - x86_64 - 20220915-220324.722
ZZCI - CentOS 7 - docker - x86_64 - 20221016-223020.545
ZZCI - CentOS 7 - docker - x86_64 - 20221101-220103.978
ZZCI - CentOS 7 - docker - x86_64 - 20221201-220105.396
ZZCI - CentOS 7 - docker - x86_64 - 20230301-220107.956
ZZCI - CentOS 7 - docker - x86_64 - 20230401-220108.252
ZZCI - CentOS 7 - docker - x86_64 - 20230501-220111.311
ZZCI - CentOS 7 - docker - x86_64 - 20231213-111103.823
ZZCI - CentOS 7 - docker - x86_64 - 20240101-220119.494
ZZCI - CentOS 7 - docker - x86_64 - 20240201-220125.685
ZZCI - CentOS 7 - docker - x86_64 - 20240306-105301.772
ZZCI - CentOS 7 - docker - x86_64 - 20240401-220152.097
ZZCI - CentOS 7 - docker - x86_64 - 20240501-220134.070
ZZCI - CentOS 7 - docker - x86_64 - 20240601-220142.195
ZZCI - CentOS 7 - helm - x86_64 - 20220401-000138.473
ZZCI - CentOS 7 - helm - x86_64 - 20220811-110654.568
ZZCI - CentOS 7 - helm - x86_64 - 20220915-220356.090
ZZCI - CentOS 7 - helm - x86_64 - 20221016-223030.291
ZZCI - CentOS 7 - helm - x86_64 - 20221101-000135.064
ZZCI - CentOS 7 - helm - x86_64 - 20230301-000133.034
ZZCI - CentOS 7 - robot - 20190430-080312.962
ZZCI - CentOS 7 - robot - x86_64 - 20220401-220138.484
ZZCI - CentOS 7 - robot - x86_64 - 20220915-220357.338
ZZCI - CentOS 7 - robot - x86_64 - 20221016-223041.341
ZZCI - CentOS 7 - robot - x86_64 - 20221101-220138.675
ZZCI - CentOS 7 - robot - x86_64 - 20221201-220143.533
ZZCI - CentOS 7 - robot - x86_64 - 20230301-220131.480
ZZCI - CentOS 7 - robot - x86_64 - 20230501-220152.957
ZZCI - CentOS 7 - robot - x86_64 - 20240101-220154.458
ZZCI - CentOS 7 - robot - x86_64 - 20240201-220154.217
ZZCI - CentOS 7 - robot - x86_64 - 20240306-105302.366
ZZCI - CentOS 7 - robot - x86_64 - 20240401-220244.081
ZZCI - CentOS 7 - robot - x86_64 - 20240501-220214.317
ZZCI - CentOS 7 - robot - x86_64 - 20240601-220241.858
ZZCI - CentOS Stream 8 - builder - x86_64 - 20220303-223622.243
ZZCI - CentOS Stream 8 - builder - x86_64 - 20220405-005246.199
ZZCI - CentOS Stream 8 - builder - x86_64 - 20220411-013651.819
ZZCI - CentOS Stream 8 - builder - x86_64 - 20220411-025029.496
ZZCI - CentOS Stream 8 - builder - x86_64 - 20220601-071415.711
ZZCI - CentOS Stream 8 - builder - x86_64 - 20220629-035812.822
ZZCI - CentOS Stream 8 - builder - x86_64 - 20220701-160059.919
ZZCI - CentOS Stream 8 - builder - x86_64 - 20220801-160143.906
ZZCI - CentOS Stream 8 - builder - x86_64 - 20220811-073719.385
ZZCI - CentOS Stream 8 - builder - x86_64 - 20221016-222440.331
ZZCI - CentOS Stream 8 - builder - x86_64 - 20221101-160106.524
ZZCI - CentOS Stream 8 - builder - x86_64 - 20221201-160128.560
ZZCI - CentOS Stream 8 - builder - x86_64 - 20230301-160121.204
ZZCI - CentOS Stream 8 - builder - x86_64 - 20230401-160111.589
ZZCI - CentOS Stream 8 - builder - x86_64 - 20230501-160107.084
ZZCI - CentOS Stream 8 - builder - x86_64 - 20230727-135233.501
ZZCI - CentOS Stream 8 - builder - x86_64 - 20230801-160108.418
ZZCI - CentOS Stream 8 - builder - x86_64 - 20231213-094027.766
ZZCI - CentOS Stream 8 - builder - x86_64 - 20240117-011746.201
ZZCI - CentOS Stream 8 - builder - x86_64 - 20240201-160121.488
ZZCI - CentOS Stream 8 - builder - x86_64 - 20240309-064327.830
ZZCI - CentOS Stream 8 - builder - x86_64 - 20240401-160147.446
ZZCI - CentOS Stream 8 - builder - x86_64 - 20240501-160131.499
ZZCI - CentOS Stream 8 - builder - x86_64 - 20240601-160217.263
ZZCI - CentOS Stream 8 - robot - x86_64 - 20220811-231817.668
ZZCI - CentOS Stream 8 - robot - x86_64 - 20230301-010147.625
ZZCI - CentOS Stream 8 - robot - x86_64 - 20230401-010209.151
ZZCI - CentOS Stream 8 - robot - x86_64 - 20231213-111243.663
ZZCI - CentOS Stream 8 - robot - x86_64 - 20240101-010215.978
ZZCI - CentOS Stream 8 - robot - x86_64 - 20240116-014504.639
ZZCI - CentOS Stream 8 - robot - x86_64 - 20240201-010245.776
ZZCI - CentOS Stream 8 - robot - x86_64 - 20240309-064350.911
ZZCI - CentOS Stream 8 - robot - x86_64 - 20240401-010224.970
ZZCI - CentOS Stream 8 - robot - x86_64 - 20240501-010211.041
ZZCI - CentOS Stream 8 - robot - x86_64 - 20240601-010231.803
ZZCI - OPNFV - apex - compute - 0
ZZCI - OPNFV - apex - compute - 1
ZZCI - OPNFV - apex - controller - 0
ZZCI - Ubuntu 16.04 - docker - x86_64 - 20190614-042302.610
ZZCI - Ubuntu 16.04 - gbp - 20190521-223526.319
ZZCI - Ubuntu 16.04 - kubernetes - 20190206-080347.936
ZZCI - Ubuntu 16.04 - kubernetes - 20190211-225526.126
ZZCI - Ubuntu 16.04 - mininet-ovs-25 - 20190416-121328.240
ZZCI - Ubuntu 16.04 - mininet-ovs-26 - 20190521-223726.040
ZZCI - Ubuntu 16.04 - mininet-ovs-28 - 20190415-091034.881
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20220201-040158.287
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20220501-040104.357
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20220601-040059.617
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20220701-040013.395
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20221001-040106.423
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20221201-040108.330
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20230101-040125.332
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20230301-040106.351
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20230401-040112.177
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20230501-040105.925
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20240101-040145.675
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20240201-040120.975
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20240301-040012.681
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20240306-000749.151
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20240326-112125.840
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20240501-040132.905
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20240601-040134.455
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20240701-040125.149
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20240801-040132.691
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20240901-040206.174
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20241201-040126.343
ZZCI - Ubuntu 18.04 - docker - x86_64 - 20250201-040221.796
ZZCI - Ubuntu 18.04 - helm - - 20210513-214525.779
ZZCI - Ubuntu 18.04 - helm - x86_64 - 20220501-140101.102
ZZCI - Ubuntu 18.04 - helm - x86_64 - 20220811-112321.717
ZZCI - Ubuntu 18.04 - helm - x86_64 - 20220915-235325.735
ZZCI - Ubuntu 18.04 - helm - x86_64 - 20221013-122339.021
ZZCI - Ubuntu 18.04 - helm - x86_64 - 20221101-140104.772
ZZCI - Ubuntu 18.04 - helm - x86_64 - 20221201-140107.142
ZZCI - Ubuntu 18.04 - helm - x86_64 - 20230301-140059.950
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20220201-180056.429
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20220501-180100.971
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20220601-180059.980
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20220701-180056.799
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20220801-180111.774
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20220915-223016.788
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20221013-083654.129
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20221101-180142.920
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20221201-180114.186
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20230301-180106.402
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20230401-180107.945
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20230501-180106.320
ZZCI - Ubuntu 18.04 - mininet-ovs-28 - x86_64 - 20230601-180106.003
ZZCI - Ubuntu 20.04 - builder - x86_64 - 20240820-011010.709
ZZCI - Ubuntu 20.04 - builder - x86_64 - 20240901-160214.010
ZZCI - Ubuntu 20.04 - builder - x86_64 - 20241101-160217.260
ZZCI - Ubuntu 20.04 - builder - x86_64 - 20241201-160151.330
ZZCI - Ubuntu 20.04 - builder - x86_64 - 20250101-160150.998
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20240326-112013.773
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20240401-160246.269
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20240501-160207.164
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20240601-160305.840
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20240701-160316.313
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20240801-160217.825
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20241101-160234.899
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20241201-160228.779
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20250101-160216.847
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20250201-160239.450
ZZCI - Ubuntu 20.04 - docker - x86_64 - 20250918-232438.133
ZZCI - Ubuntu 22.04 - builder - x86_64 - 20250201-010426.857
ZZCI - Ubuntu 22.04 - builder - x86_64 - 20250917-133034.447
ZZCI - Ubuntu 22.04 - devstack - x86_64 - 20231031-095146.118
ZZCI - Ubuntu 22.04 - docker - x86_64 - 20250201-170115.786
ZZCI - Ubuntu 22.04 - docker - x86_64 - 20250918-232437.783
ZZCI - Ubuntu 22.04 - mininet-ovs-217 - x86_64 - 20241024-123714.311
ZZCI - Ubuntu 22.04 - mininet-ovs-217 - x86_64 - 20241101-060158.442
ZZCI - Ubuntu 22.04 - mininet-ovs-217 - x86_64 - 20241201-060156.310
ZZCI - Ubuntu 22.04 - mininet-ovs-217 - x86_64 - 20250201-060151.911
ZZCI - Ubuntu 22.04 - mininet-ovs-217 - x86_64 - 20250917-133034.654
Creating Jenkins Jobs¶
Jenkins Job Builder takes simple descriptions of Jenkins jobs in YAML format and uses them to configure Jenkins.
Getting Jenkins Job Builder¶
OpenDaylight uses Jenkins Job Builder to translate our in-repo YAML job configuration into job descriptions suitable for consumption by Jenkins. When testing new Jenkins Jobs in the Jenkins Sandbox, you’ll need to use the jenkins-jobs executable to translate a set of jobs into their XML descriptions and upload them to the sandbox Jenkins server.
We document installing jenkins-jobs below.
Installing Jenkins Job Builder¶
We recommend using pip to assist with JJB installs, but we also document installing from a git repository manually. For both, we recommend using Python Virtual Environments to isolate JJB and its dependencies.
The builder/jjb/requirements.txt file contains the currently recommended JJB version. Because JJB is fairly unstable, it may be necessary to debug things by installing different versions. This is documented for both pip-assisted and manual installs.
Virtual Environments¶
For both pip-assisted and manual JJB installs, we recommend using Python Virtual Environments to manage JJB and its Python dependencies. The python-virtualenvwrapper tool can help you do so.
Documentation is available for installing python-virtualenvwrapper. On Linux systems with pip (typical), they amount to:
sudo pip install virtualenvwrapper
A virtual environment is simply a directory that you install Python programs into and then append to the front of your path, causing those copies to be found before any system-wide versions.
Create a new virtual environment for JJB.
# virtualenvwrapper uses this dir for virtual environments
$ echo $WORKON_HOME
/home/daniel/.virtualenvs
# Make a new virtual environment
$ mkvirtualenv jjb
# A new venv dir was created
(jjb)$ ls -rc $WORKON_HOME | tail -n 1
jjb
# The new venv was added to the front of this shell's path
(jjb)$ echo $PATH
/home/daniel/.virtualenvs/jjb/bin:<my normal path>
# Software installed to venv, like pip, is found before system-wide copies
(jjb)$ command -v pip
/home/daniel/.virtualenvs/jjb/bin/pip
With your virtual environment active, you should install JJB. Your install will be isolated to that virtual environment’s directory and only visible when the virtual environment is active.
You can easily leave and return to your venv. Make sure you activate it before each use of JJB.
(jjb)$ deactivate
$ command -v jenkins-jobs
# No jenkins-jobs executable found
$ workon jjb
(jjb)$ command -v jenkins-jobs
$WORKON_HOME/jjb/bin/jenkins-jobs
Installing JJB using pip¶
The recommended way to install JJB is via pip.
First, clone the latest version of the releng-builder-repo.
$ git clone --recursive https://git.opendaylight.org/gerrit/p/releng/builder.git
Before actually installing JJB and its dependencies, make sure you’ve created and activated a virtual environment for JJB.
$ mkvirtualenv jjb
The recommended version of JJB to install is the version specified in the builder/jjb/requirements.txt file.
# From the root of the releng/builder repo
(jjb)$ pip install -r jjb/requirements.txt
To validate that JJB was successfully installed you can run this command:
(jjb)$ jenkins-jobs --version
Note: Only the version of JJB pinned in the merged jjb/requirements.txt is
supported in CI. The ad-hoc override examples below are for local
troubleshooting and should not be committed.
To change the version of JJB specified by builder/jjb/requirements.txt to install from the latest commit to the master branch of JJB’s git repository:
$ cat jjb/requirements.txt
-e git+https://opendev.org/jjb/jenkins-job-builder#egg=jenkins-job-builder
To install from a tag, like 1.4.0:
$ cat jjb/requirements.txt
-e git+https://opendev.org/jjb/jenkins-job-builder@1.4.0#egg=jenkins-job-builder
Updating releng/builder repo or global-jjb¶
Follow these steps to update the releng/builder repo. The repo uses a submodule from a global-jjb repo so that common source can be shared across different projects. This requires updating the releng/builder repo periodically to pick up the changes. New versions of jjb could also require updating the releng/builder repo. Follow the previous steps earlier for updating jenkins-jobs using the builder/jjb/requirements.txt file. Ensure that the version listed in the file is the currently supported version, otherwise install a different version or simply upgrade using pip install –upgrade jenkins-job-builder.
The example below assumes the user has cloned releng/builder to ~/git/releng/builder. Update the repo, update the submodules and then submit a test to verify it works.
cd ~/git/releng/builder
git checkout master
git pull
git submodule update --init --recursive
jenkins-jobs --conf jenkins.ini test \
jjb/ netvirt-csit-1node-openstack-queens-upstream-stateful-fluorine
Installing JJB Manually¶
This section documents installing JJB from its manually cloned repository.
Note that installing via pip is typically simpler.
Checkout the version of JJB’s source you’d like to build.
For example, using master:
$ git clone https://opendev.org/jjb/jenkins-job-builder
Using a tag, like 1.4.0:
$ git clone https://opendev.org/jjb/jenkins-job-builder
$ cd jenkins-job-builder
$ git checkout tags/1.4.0
Before actually installing JJB and its dependencies, make sure you’ve created and activated a virtual environment for JJB.
$ mkvirtualenv jjb
You can then use JJB’s requirements.txt file to install its dependencies. Note that we’re not using sudo to install as root, since we want to make use of the venv we’ve configured for our current user.
# In the cloned JJB repo, with the desired version of the code checked out
(jjb)$ pip install -r requirements.txt
Then install JJB from the repo with:
(jjb)$ pip install .
To validate that JJB was successfully installed you can run this command:
(jjb)$ jenkins-jobs --version
Jenkins Job Templates¶
The OpenDaylight RelEng/Builder project provides jjb-templates that can be used to define basic jobs.
The Gerrit Trigger listed in the jobs are keywords that can be used to trigger the job to run manually by simply leaving a comment in Gerrit for the patch you wish to trigger against.
All jobs have a default build-timeout value of 360 minutes (6 hrs) but can be overridden via the opendaylight-infra-wrappers’ build-timeout property.
Job Categories & Triggers¶
Every patch uploaded (or updated) triggers the standard verify pipeline jobs. Draft changes and commit-message-only amendments are the only updates that do not trigger builds.
If you comment remerge on a change before it merges, Jenkins rebuilds the
current branch HEAD and (historically) triggered all every-patch jobs. Use this
to re-run a full set when a subset was manually triggered and you need a clean
baseline.
Feature / subset test jobs follow the pattern test-{project}-{feature} and
test-{project}-all (run broader functional suites). These are on-demand
and do not vote on Gerrit.
Job Parameter Reference¶
Common parameters (lf-* and legacy templates):
java-version: openjdk17 (default) or openjdk11 (legacy) – selects JDK toolchain.
sonarcloud-java-version / sonar-jdk: JDK for Sonar scanner (defaults to java-version).
maven / mvn-version / maven-version: mvn39, mvn38 – selects configured Maven install.
mvn-settings:
<project>-settings – custom settings.xml profile.mvn-goals: e.g. clean install -DskipTests – build phases/properties.
mvn-opts: e.g. -Xmx2g – JVM flags via MAVEN_OPTS/JAVA_TOOL_OPTIONS.
build-timeout: minutes (default 360) – override via wrapper property.
dependencies: comma-separated upstream merge job names triggering integration jobs.
stream: release stream identifier (e.g. master, a named release).
branch: Git branch to build (multi-branch definitions).
java-opts / jvm-opts: additional JVM flags (runtime/integration phases).
archive-artifacts: patterns (e.g.
target/*.log) to archive.email-upstream: tokens for upstream dependency notifications.
python-version (lf-python): comma-separated Python versions (e.g. 3.10,3.11).
go-version (lf-go): Go toolchain (e.g. 1.22.x).
gradle-version (lf-gradle): Gradle distribution version (e.g. 8.6).
enable-sonar / sonar: true to include Sonar stage.
skip-tests / skip-integration-tests: booleans to bypass test phases.
Core Job Templates (summary)
{project}-distribution-check-{stream} (recheck): Builds integration/distribution, runs SingleFeatureTest, guards autorelease.
{project}-integration-{stream} (auto): Triggers on upstream dependency merges (project.cfg DEPENDENCIES); disabled if none.
{project}-merge-{stream} (remerge): Builds HEAD after merge (or manually) and publishes artifacts to Nexus.
{project}-sonar (run-sonar): Runs Sonar analysis; re-run verify afterward to restore vote.
{project}-validate-autorelease-{stream} (recheck): Quick sanity test ensuring no dependency on features absent from release.
{project}-verify-{stream}-{maven}-{java-version} (recheck): Per-patch build + unit/integration tests.
{project}-verify-node-{stream} (recheck): NodeJS project build/test (requires nodedir/nodever params; runs npm install & test).
{project}-verify-python-{stream} / {project}-verify-tox-{stream} (recheck): Tox-driven test execution (set toxdir if tox.ini not at repo root). Template names are aliases.
Job Template |
Gerrit Trigger |
Purpose / Notes |
|---|---|---|
integration-patch-test-{stream} |
test-integration |
Builds a distribution including the patch, then triggers a CSIT subset (see integration-test-jobs.yaml). High resource/time cost (~2h); use selectively. Does not vote. |
integration-multipatch-test-{stream} |
multipatch-build |
Builds multiple patches in order (or by topic) across projects, then builds a distribution. Stores bundle URL (BUNDLE_URL) in console. Use multipatch-build-fast for quick builds. Does not vote. |
Maven Properties¶
We provide a properties which your job can take advantage of if you want to do trigger a different configuration depending on job type. You can create a profile that activates on a property listed below. The JJB templated jobs will activate the profile during the build to run any custom code configuration you wish to run for this job type.
-Dmerge : The Merge job sets this flag and is the same as setting the
Maven property <merge>true</merge>.
-Dsonar : The Sonar job sets this flag and is the same as setting the
Maven property <sonar>true</sonar>.
Jenkins Sandbox¶
URL: https://jenkins.opendaylight.org/sandbox
Jenkins Sandbox documentation is available in the LF Jenkins Sandbox Guide.