osmo-ci/jobs
Oliver Smith 03cb833746 jobs: update trigger timers
Ensure we trigger building new OBS packages first, then wait plenty of
time until the binary packages are available (and run jobs in the
meantime that don't need them), and only after that we run the jobs
that need the binary packages.

Otherwise TTCN3 jobs may test the packages from the previous day, and
some jobs may fail completely due to packages not being completely built
yet. For example, yesterday the new Osmocom CNI releases were tagged,
which means the :latest packages also need to be rebuilt (-> building
all OBS packages takes longer). The osmocom-release-manuals and
-tarballs jobs failed, because the new binary packages were not
available yet when they ran.

Change all timers to the format "H 20 * * *" to have a deterministic
hour and semi-random minute based on the job name.

Change-Id: Ib68f9a78bae27a63706a8c95715bf6a244b7bf1d
2023-09-13 16:11:29 +00:00
..
README.adoc jobs: update trigger timers 2023-09-13 16:11:29 +00:00
coverity.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
gerrit-binpkgs.yml jobs/gerrit-binpkgs: don't hardcode distros 2023-07-31 08:22:09 +00:00
gerrit-lint.yml jobs/gerrit: increase num-to-keep to 1000 2023-04-03 11:11:34 +02:00
gerrit-verifications-comment.yml jobs: remove artifacts-days/num-to-keep: -1 2023-04-03 10:47:54 +02:00
gerrit-verifications-dahdi.yml jobs: master/gerrit: use debian bookworm (12) 2023-07-13 14:55:23 +02:00
gerrit-verifications.yml jobs/gerrit: osmo-dia2gsup: test debian 11 and 12 2023-08-23 16:59:28 +02:00
master-builds-dahdi.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
master-builds.yml jobs/master-builds: xgoldmon: remove osmo-ci dir 2023-08-30 12:25:52 +02:00
octsim_osmo-ccid-firmware.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
osmo-gsm-manuals-trigger.yml jobs: add build-discarder to all 2023-04-03 11:22:21 +02:00
osmo-gsm-tester-builder.yml update git URLs (git -> https; gitea/gerrit) 2022-08-13 04:02:51 +07:00
osmo-gsm-tester-runner.yml jobs/osmo-gsm-tester-runner: build debian-buster-jenkins 2023-08-01 11:35:00 +02:00
osmo-gsm-tester-trigger.yml jobs: add build-discarder to all 2023-04-03 11:22:21 +02:00
osmo-gsm-tester_run-gerrit.sh jobs: osmo-gsm-tester: Drop use of OSMO_GSM_TESTER_CONF for default conf dir 2020-05-07 19:16:15 +02:00
osmo-gsm-tester_run-prod.sh jobs: osmo-gsm-tester: Drop use of OSMO_GSM_TESTER_CONF for default conf dir 2020-05-07 19:16:15 +02:00
osmo-gsm-tester_run-rnd.sh jobs: osmo-gsm-tester: Drop use of OSMO_GSM_TESTER_CONF for default conf dir 2020-05-07 19:16:15 +02:00
osmo-gsm-tester_ttcn3.sh jobs: osmo-gsm-tester_ttcn3: Fix path to jenkins script 2020-06-09 14:10:46 +02:00
osmocom-api.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
osmocom-build-tags-against-master.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
osmocom-depcheck.yml jobs: add build-discarder to all 2023-04-03 11:22:21 +02:00
osmocom-list-commits.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
osmocom-obs-check-builders.yml jobs: add build-discarder to all 2023-04-03 11:22:21 +02:00
osmocom-obs-nhofmeyr.yml osmocom-obs-nhofmeyr.yml: edit to create initial version 2023-04-17 01:45:13 +02:00
osmocom-obs-rhizomatica.yml jobs/osmocom-obs-rhizomatica: add new jobs 2023-04-06 10:59:28 +02:00
osmocom-obs-sync.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
osmocom-obs-wireshark.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
osmocom-obs.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
osmocom-release-manuals.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
osmocom-release-tarballs.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
registry-rebuild-upload-fpga-build.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
registry-rebuild-upload-titan.yml jobs/registry-rebuild-upload-titan: use bookworm 2023-08-14 09:28:40 +00:00
registry-triggers.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
registry-update-base-images.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
repo-install-test.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
ttcn3-testsuites-kernel-git.yml jobs: remove artifacts-days/num-to-keep: -1 2023-04-03 10:47:54 +02:00
ttcn3-testsuites.yml jobs: update trigger timers 2023-09-13 16:11:29 +00:00
update-osmo-ci-on-slaves.yml jobs/update-osmo-ci: add ansicolor wrapper 2023-07-13 14:57:16 +02:00
update-osmo-python-on-slaves.yml jobs/update-osmo-python-on-slaves: update nodes 2023-04-03 10:41:04 +02:00

README.adoc

These jenkins.osmocom.org job definitions, managed by
https://docs.openstack.org/infra/jenkins-job-builder/index.html[Jenkins Job Builder]

*Prepare:*

Install jenkins-job-builder:

  apt-get install jenkins-job-builder

Have a jenkins-job-builder.ini file. One of

    ~/.config/jenkins_jobs/jenkins_jobs.ini
    /etc/jenkins_jobs/jenkins_jobs.ini

or place one in here and pass it to jenkins-jobs using the --conf file.

Make sure the file not world readable to minimally safeguard your jenkins password.
Instead of using your jenkins password, use an *API Token*. To retrieve your token go
to Jenkins via a Webbrowser, click on your Username in the right corner, click on configure,
click on *Show API Toke...*.

jenkins_jobs.ini:

    [jenkins]
    user=my_user_name
    password=my_api_token
    url=https://jenkins.osmocom.org/jenkins

and

    chmod go-rwx jenkins_jobs.ini

*Update a single job on jenkins.osmocom.org:*

    jenkins-jobs --conf jenkins_jobs.ini update gerrit-verifications.yml gerrit-osmo-msc

NOTE: when you supply a name not defined in that yml file, you will not get an
error message, just nothing will happen.

*Update all jobs of one file:*

    jenkins-jobs --conf jenkins_jobs.ini update gerrit-verifications.yml

*Update all jobs in all files:*

    jenkins-jobs --conf jenkins_jobs.ini update ./

*Troubleshooting:*

- 'jenkins.JenkinsException: create[gerrit-osmo-msc] failed'

jenkins.osmocom.org is not reachable, or URL in the config file is erratic.
Make sure it is exactly

    url=https://jenkins.osmocom.org/jenkins

- newlines:

Use 'key: |' to keep new lines in multiline values, e.g.:
  - shell: |
      echo hello
      echo world

See also:
* https://yaml-multiline.info/
* https://stackoverflow.com/a/21699210

- jobs named on cmdline are not updated:

Make sure the job name is correct, or just issue an entire yml file without
individual job names.

Also be aware that jobs are only actually updated when anything changed.

*Jenkins labels*

Most jenkins jobs should run a docker container and install all required
dependencies inside that, so we don't need to install them on the jenkins node.
These jobs don't need to set a label, they can just run on any generic jenkins
node that has docker available. So if you add a new job, you probably don't
need a label at all.

Existing jobs typically have a label set by the topic they belong to, e.g.:
- osmocom-master
- osmocom-gerrit
- ttcn3

Other labels indicate specific software/hardware works here, e.g.:
- coverity
- hdlc
- osmo-gsm-tester
- podman

*ccache*

The jobs from master-builds and gerrit-verifications use ccache. View the
statistics with SSH on the build nodes with:

 $ CCACHE_DIR=~/ccache/gerrit-verifications ccache -s
 $ CCACHE_DIR=~/ccache/master-builds ccache -s

Note that running multiple jobs in parallel influence the ccache statistics,
and it's impossible to tell which job caused which change in the stats (that's
why they are not printed at the end of each job, it would be confusing).

*timers*

A lot of the jenkins jobs run daily with a timer:

 triggers:
   - timed: "H 20 * * *"

or weekly:

 triggers:
   - timed: "H 20 * * H"

Use H for the minute / day of week, to have it derivated as hash of the job
name. Replace 20 with the hour (UTC) the job should run.

The jobs follow this timetable, to ensure we don't attempt to use binary
packages before they have been built (leading to failing jobs).

 18:00 - 21:00 OBS related
   18:XX osmocom-obs-sync (sync Debian:12 etc. with openSUSE OBS)
   19:XX osmocom-obs-wireshark
   20:XX osmocom-obs (new binary packages start building on OBS!)

 22:00 - 03:00 Jobs that don't need binary packages
   22:XX coverity
   22:XX octsim_osmo-ccid-firmware
   22:XX osmo-gsm-tester-runner (virtual)
   23:XX master-builds-dahdi
   00:XX osmocom-api
   00:XX registry-update-base-images
   01:XX osmocom-build-tags-against-master
   01:XX osmocom-list-commits
   02:XX registry-triggers
   02:XX registry-rebuild-upload-fpga-build (weekly)

 04:00 - 18:00 Jobs that need binary packages
   ttcn3-testsuites
   04:XX osmocom-release-manuals
   05:XX osmocom-release-tarballs
   06:XX repo-install-test

master-builds: to avoid complexity, these run throughout the day (H H * * *).