Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


Place to store data required to build up a CI for any Fuel plugin

Subscribe to updates I use fuel-plugin-ci

Statistics on fuel-plugin-ci

Number of watchers on Github 10
Number of open issues 0
Main language Puppet
Open pull requests 0+
Closed pull requests 0+
Last commit over 4 years ago
Repo Created over 4 years ago
Repo Last Updated over 2 years ago
Size 350 KB
Homepage http://openstack.org
Organization / Authoropenstack
Page Updated
Do you use fuel-plugin-ci? Leave a review!
View fuel-plugin-ci activity
View on github
Book a Mock Interview With Me (Silicon Valley Engineering Leader, 100s of interviews conducted)
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating fuel-plugin-ci for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

Fuel Plugin CI


Components, concept

.. image:: pics/Fuel-plugin-CI.png

Jenkins and web server for logs installation

First you should install puppet master and run the manifests.

All nodes described in manifests/site.pp file.

CI needs the following amount of nodes:

  • one node for jenkins master
  • one more for jenkins slave
  • one for log publication.

These nodes should be described in manifests/site.pp with necessary classes:


  class { '::fuel_project::jenkins::slave':}
  class { '::fuel_project::jenkins::master':}
  class { '::fuel_project::web':}

Run install script sudo puppet-manifests/bin/install_puppet_master.sh on every node.

Gerrit Integration overview +++++++++++++++++++++++++++

In general, the installation should meet the following requirements:

  • Anonymous users can read all projects.

  • All registered users can perform informational code review (+/-1) on any project.

  • Jenkins can perform verification (blocking or approving: +/-1).

  • All registered users can create changes.

  • Members of core group can perform full code review (blocking or approving: +/- 2) and submit changes to be merged.

  • Make sure you have gerrit account on review.openstack.org (see this <http://docs.openstack.org/infra/system-config/gerrit.html>_ for the reference)::

    ssh -p 29418 review.openstack.org "gerrit create-account \ --group 'Third-Party CI' \ --full-name 'Some CI Bot' \ --email ci-bot@third-party.org \ --ssh-key 'ssh-rsa AAAAB3Nz...zaUCse1P ci-bot@third-party.org' \ some-ci-bot

Jenkins gerrit plugin configuration +++++++++++++++++++++++++++++++++++

. The settings look as follows:

.. image:: pics/settings.png

. It's main gerrit configuration window. You should add a gerrit server.

.. image:: pics/settings-full.png

. Vote configuration.

. Log publication

The result of job are artifacts - logs and packages. Logs should be published on special web servers, where it can be accessible via gerrit. The web server deploys with puppet class fuel_project::web.

Logs copy via ssh by job fuel-plugins.publish_logs. You should add new user with rsa key installed and necessary path accessible for write (like /var/www/logs).

The REPORTED_JOB_URL variable is responsible for url of logs in gerrit.

Jenkins plugins installation

We recommend to install these plugins for Jenkins. Some of them are necessary for CI and other is just useful and make your jenkins experience easier:

  • AnsiColor <https://wiki.jenkins-ci.org/display/JENKINS/AnsiColor+Plugin>_
  • Ant Plugin <https://wiki.jenkins-ci.org/display/JENKINS/AnsiColor+Plugin>_
  • build timeout plugin <https://wiki.jenkins-ci.org/display/JENKINS/Build-timeout+Plugin>_
  • conditional buildstep <https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin>_
  • Copy Artifact Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin>_
  • Credentials Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Credentials+Plugin>_
  • CVS Plug-in <https://wiki.jenkins-ci.org/display/JENKINS/CVS+Plugin>_
  • description setter plugin <https://wiki.jenkins-ci.org/display/JENKINS/Description+Setter+Plugin>_
  • Email Extension Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin>_
  • Environment Injector Plugin <https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin>_
  • External Monitor Job Type Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Monitoring+external+jobs>_
  • Gerrit Trigger <https://wiki.jenkins-ci.org/display/JENKINS/Gerrit+Trigger>_
  • GIT client plugin <https://wiki.jenkins-ci.org/display/JENKINS/Git+Client+Plugin>_
  • GIT plugin <https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin>_
  • Groovy <https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin>_
  • Heavy Job Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Heavy+Job+Plugin>_
  • HTML Publisher plugin <https://wiki.jenkins-ci.org/display/JENKINS/HTML+Publisher+Plugin>_
  • Javadoc Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Javadoc+Plugin>_
  • Job Configuration History Plugin <https://wiki.jenkins-ci.org/display/JENKINS/JobConfigHistory+Plugin>_
  • JUnit Plugin <https://wiki.jenkins-ci.org/display/JENKINS/JUnit+Plugin>_
  • LDAP Plugin <https://wiki.jenkins-ci.org/display/JENKINS/LDAP+Plugin>_
  • Locale plugin <https://wiki.jenkins-ci.org/display/JENKINS/Locale+Plugin>_
  • Mailer Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Mailer>_
  • MapDB API Plugin <https://wiki.jenkins-ci.org/display/JENKINS/MapDB+API+Plugin>_
  • Matrix Authorization Strategy Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Matrix+Authorization+Strategy+Plugin>_
  • Matrix Project Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Matrix+Project+Plugin>_
  • Maven Integration plugin <https://wiki.jenkins-ci.org/display/JENKINS/Maven+Project+Plugin>_
  • Multijob plugin <https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin>_
  • Multiple SCMs plugin <https://wiki.jenkins-ci.org/display/JENKINS/Multiple+SCMs+Plugin>_
  • OWASP Markup Formatter Plugin <https://wiki.jenkins-ci.org/display/JENKINS/OWASP+Markup+Formatter+Plugin>_
  • PAM Authentication plugin <https://wiki.jenkins-ci.org/display/JENKINS/PAM+Authentication+Plugin>_
  • Parameterized Trigger plugin <https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin>_
  • Publish Over SSH <https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+SSH+Plugin>_
  • PWauth Security Realm <http://wiki.hudson-ci.org/display/HUDSON/pwauth>_
  • Run Condition Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Run+Condition+Plugin>_
  • SCM API Plugin <https://wiki.jenkins-ci.org/display/JENKINS/SCM+API+Plugin>_
  • Script Security Plugin <https://wiki.jenkins-ci.org/display/JENKINS/Script+Security+Plugin>_
  • Self-Organizing Swarm Plug-in Modules <https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin>_
  • Simple Theme Plugin <http://wiki.jenkins-ci.org/display/JENKINS/Simple+Theme+Plugin>_
  • SSH Agent Plugin <https://wiki.jenkins-ci.org/display/JENKINS/SSH+Agent+Plugin>_
  • SSH Credentials Plugin <https://wiki.jenkins-ci.org/display/JENKINS/SSH+Credentials+Plugin>_
  • SSH Slaves plugin <http://wiki.jenkins-ci.org/display/JENKINS/SSH+Slaves+plugin>_
  • Subversion Plug-in <http://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin>_
  • Throttle Concurrent Builds Plug-in <http://wiki.jenkins-ci.org/display/JENKINS/Throttle+Concurrent+Builds+Plugin>_
  • Timestamper <https://wiki.jenkins-ci.org/display/JENKINS/Timestamper>_
  • Token Macro Plugin <http://wiki.jenkins-ci.org/display/JENKINS/Token+Macro+Plugin>_
  • Translation Assistance plugin <http://wiki.jenkins-ci.org/display/JENKINS/Translation+Assistance+Plugin>_
  • Windows Slaves Plugin <http://wiki.jenkins-ci.org/display/JENKINS/Windows+Slaves+Plugin>_
  • Workflow: Step API <https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin>_

Jenkins jobs installation

Jenkins Job Builder <http://docs.openstack.org/infra/jenkins-job-builder/>_ takes simple descriptions of Jenkins <http://jenkins-ci.org/>_ jobs in YAML <http://www.yaml.org/>_ or JSON <http://json.org/>_ format and uses them to configure Jenkins.

To install JJB, run the following commands::

git clone https://git.openstack.org/openstack-infra/jenkins-job-builder
cd jenkins-job-builder && sudo python setup.py install

Before running JJB you need to prepare a config file with the following info (fill it with your own values)::


And update a JJB configuration using the file from the previous step::

jenkins-jobs --conf yourconf.ini update path_to_repo/jjb

You may find some examples in this repo. They're depersonalized copies of real jobs, so dont install them without reworking. Please replace necessary paths and variables to make them work again.

Plugin test templates

Most of necessary functions can be found in fuel-qa <https://github.com/openstack/fuel-qa>_ framework.

All functional tests should be stored in plugins git repository in a special folder namedplugin_test. Fuel-qa framework should be submodule in theplugin_test` folder. You can add submodule by this command:

git submodule add https://github.com/openstack/fuel-qa

In the folder ./plugin-test-examples/plugin_test you may find two simple tests. The first one installs a test plugin, creates a cluster and enables the plugin for this cluster. The second one deploys a cluster with the plugin enabled.

There are two subfolders here: helpers and tests. Helpers contains two files with important functions:

  • prepare_test_plugin - installs the plugin to master node
  • activate_plugin - activates the plugin
  • assign_net_provider - allows to choose network type for cluster
  • deploy_cluster - deploys a cluster

The next folder includes tests. In the example provided with this repo there is only one important file named test_smoke_bvt.py. It describes a class TestPlugin and 2 tests mentioned earlier.

Hardware test examples

The main problem of hardware configuration is authorization. SSH does not allow to enter a password in a script non interactively, so expect utility may be used to avoid the problem.

You should install the util on jenkins-slave first::

  apt-get install expect

Here is an example of a script that uses expect for auth on a switch and shows its configuration::

spawn ssh root@$switch_ip set timeout 500 expect yes/no { send yes\r expect *?assword { send $switch_pass\r } } *?assword { send $switch_pass\r } expect # { send show run } expect # { send exit\r }

Fuel ISO updating

There is a script fuel-plugin-ci/iso-updater/get_iso.sh.

It should be added to cron and executed every 2-3 hours.

This script checks for a new community build of Fuel and if there is a new version available, it downloads such. You can run the script on a jenkins-slave node or any web server if you have many slave nodes. Here is how the script works:

. Check for the latest community iso. Check the

https://www.fuel-infra.org/release/status url using the w3m utility and chooses the right tab:

  • the first tab is 8.0 now, so it needs the 2nd tab with Fuel 7.0.

  • Then it parses the tab and gets a Fuel release string.

    .. note:: if new Fuel version is available, you should fix the script and change a tab number. Also output may change between linux distros and last cut field may change.

. Download torrent file from http://seed.fuel-infra.org/fuelweb-iso/ via aria2 console torrent client.

. Check for errors and delete folder if there is an error.

. Sync downloaded iso with a jenkins slave. You should have necessary users with rsa keys set.

fuel-plugin-ci list of languages used
Other projects in Puppet