Page MenuHomePhabricator

Continuous Integration Setup
Updated 630 Days AgoPublic

THESE ARE JUST SOME NOTES FROM STEFAN RIGHT NOW. NOT A FULL DOCUMENTATION

Continuous Integration Setup

General:

We use Jenkins as our CI server and host it under http://build.enlightenment.org/ . Our master server does not run any actual builds but only handles build triggers and runs the Web UI. The actual builds are performed on our builds slaves. So far we have the following build slaves:

  1. e5-build-gentoo-cross1: Serves a mingw 64 cross build env for cross builds for Windows
  2. e5-build-gentoo-x32-1: Build slave with x32 architecture.
  3. e5-build-gentoo-x86-1: Build slave with x86 (32 bit) architecture.
  4. e5-build-gentoo-x86_64-1: Build slave with x86_64 (64 bit) architecture.
  5. e3: Dedicated machine which is supposed to run performance tests.

Projects:

  • EFL master branch
  • EFL stable branch
  • Elementary master branch
  • Elementary stable branch
  • Evas Generic Loaders master branch
  • Evas Generic Loaders stable branch
  • Emotion Generic Players master branch
  • Emotion Generic Players stable branch
  • Enlightenment master branch
  • Enlightenment stable branch
  • Terminology master branch
  • Rage master branch
  • Exactness master branch
  • Python EFL

Job types:

All of the project above are combined with one or more of the following different job types to create the actual build jobs:

  • GCC x86_64
  • GCC x86
  • Clang x86_64
  • Clang x86
  • Mingw x86_64 (only for efl and elementary) disabled right now
  • GCC x32 (only for efl)

Configure option jobs:

We also have a few extra jobs for specific configure options which are not enabled by default but should be covered by building for them:

  • DRM/Wayland for EFL
  • XCB for EFL
  • Misc for EFL (harfbuzz, web-p, liblz4, xinput22, xine, multisense, lua-old)
  • Debug profile EFL (nightly)
  • Dev profile EFL (nightly)
  • Release profile EFL (nightly)

Build Trigger:

  • Changely build jobs coming from git push notificatioins
  • Nightly build jobs coming from cron schedules inside Jenkins
  • A third trigger is planned but not done yet. It would trigger new builds from patches submitted to our review system.

Changely jobs:

As mentioned in the trigger section above we have changely triggers runnign after every push to the project git repository. The actual build happening inside the job looks mostly like this:

  • autogen & configure
  • make
  • make check (only changely_efl_gcc_x86_64)
  • make install

Nightly jobs:

Similar to the changely jobs we have some that covers the heavier tests on our code and are only run during the night (FIXME: add exact time) triggered by a cron schedule inside Jenkins:

  • autogen & configure
  • Coverity build and submit (only nightly_XXX_gcc_x86_64)
  • Clang static analyser scan-build (only nightly_XXX_clang_x86_64)
  • Coverage with make check
  • make
  • make examples (only nightly_efl_gcc_x86_64)
  • make install
  • make distcheck
  • make doc

Dependency chains:

Once a build was performed successfully we archive the generated artifacts and use them in builds depending on it. We also trigger downstream project after a upstream project build to verify that we did not break anything for them.

  • EFL triggers Terminology, E, Rage and exactness after a successful build

Misc:

  • ABI checker job disabled right now
  • Expedite perf job (nightly) disabled right now
  • Exactness Elm screenshots
  • Exactness Edje screenshots (nightly) disabled right now
  • Address Sanitizer option available in jobs

Notifications:

  • E-Mail on job state change. Failed to succeeded or the other way around.
  • IRC notifications. Disabled right now due to problems with hanging jobs on IRC notify.

Ideas to reduce load:

  • Make sure we really only poll SCM from the trigger jobs not from every single one
  • Use git post scripts to notify from git repo to Jenkins that a new build should run
  • Remove support for x32
  • Remove changely jobs for gcc x86 and clang x86_64? They will still be run on the nightly builds.
    • Remove the stepping stone and run both in parallel
  • Remove scan-build support? (Or at least have it disabled for all builds)
  • Remove or fix coverage graph generation script
  • Only one build for all special EFL options? (wayland, drm, xcb, systemd, harfbuzz, wep-p, xinput2.2)
  • Run doc target on nightly only on specific architectures not on all of them
Last Author
stefan_schmidt
Last Edited
Mar 20 2017, 4:24 AM
Projects
None
Subscribers
None