RETIRED, Place to store data required to build up a CI for any Fuel plugin
Go to file
Jenkins a50dd7bb69 Merge "Adds minimum documentation into README.rst file" 2015-12-18 10:16:26 +00:00
hardware-configuration add hardware authentication via expect example 2015-12-18 03:44:07 +03:00
iso-updater fix iso_updater.sh 2015-12-18 10:31:21 +03:00
jjb add publish logs job 2015-12-18 02:22:05 +03:00
plugin-test-examples/plugin_test change test_smoke_bvt.py 2015-12-18 03:18:03 +03:00
puppet-manifests remove trash 2015-12-14 19:16:40 +03:00
.gitmodules add plugin tests example 2015-12-18 03:05:12 +03:00
.gitreview Added .gitreview 2015-12-08 11:07:48 +00:00
README.rst Adds minimum documentation into README.rst file 2015-12-18 13:10:42 +03:00

README.rst

Fuel Plugin CI

Overview

Components, concept

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.

  1. Make sure you have gerrit account on review.openstack.org:

    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

  1. The settings looks as follows:

    <pic>

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

    <pic>

  3. 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. 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). 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 Ant Plugin build timeout plugin conditional buildstep Copy Artifact Plugin Credentials Plugin CVS Plug-in description setter plugin Email Extension Plugin Environment Injector Plugin External Monitor Job Type Plugin Gerrit Trigger GIT client plugin GIT plugin Groovy Heavy Job Plugin HTML Publisher plugin Javadoc Plugin Job Configuration History Plugin JUnit Plugin LDAP Plugin Locale plugin Mailer Plugin MapDB API Plugin Matrix Authorization Strategy Plugin Matrix Project Plugin Maven Integration plugin Multijob plugin Multiple SCMs plugin OWASP Markup Formatter Plugin PAM Authentication plugin Parameterized Trigger plugin Publish Over SSH PWauth Security Realm Run Condition Plugin SCM API Plugin Script Security Plugin Self-Organizing Swarm Plug-in Modules Simple Theme Plugin SSH Agent Plugin SSH Credentials Plugin SSH Slaves plugin Subversion Plug-in Throttle Concurrent Builds Plug-in Timestamper Token Macro Plugin Translation Assistance plugin Windows Slaves Plugin Workflow: Step API

Jenkins jobs installation

Jenkins Job Builder takes simple descriptions of Jenkins jobs in YAML or JSON 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

JJB requires config file to running:

[jenkins]
user=jenkins
password=1234567890abcdef1234567890abcdef
url=https://jenkins.example.com

Running:

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

We have some examples in our repo, it depersonalized copy of our real jobs. Dont install it without reworking. You should replace necessary paths and variables.

Plugin test templates

Most of necessary functions can be found in fuel-qa framework.

All functional tests should be stored in plugins git repository. There should be special folder named plugin_test. Fuel-qa framework should be submodule in plugin_test folder. You can add submodule by this command: git submodule add https://github.com/openstack/fuel-qa

<pic>

There is simple test in repository. It deploys an openstack cluster, installs the test plugin and enables it.

There are two folders: helpers and tests. Helpers consists two files with important functions: * prepare_test_plugin - install the plugin to master node * activate_plugin - activate the plugin * assign_net_provider - allow to choose network type for cluster * deploy_cluster - deploy a cluster

Next folder is tests and it includes tests. There is only one important file named test_smoke_bvt.py. It describes a class of test plugin and 2 tests. First of them just install the plugin and enable it, another try to deploy a cluster.

Hardware test examples

Main problem of hardware configuration is authorization. SSH does not allow enter password in script non interactively. But we can use expect utility for resolve this problem.

You should install the util on jenkins-slave first:

apt-get install expect

Example of script that use expect for auth on cisco switch and show 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 run every 2-3 hours.

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

  1. Check for the latest community iso. Using w3m utility script checks https://www.fuel-infra.org/release/status url and choose right tab:
  • the first tab is 8.0 now, we need 2nd tab with Fuel 7.0.
  • Then we parse it and get Fuel release string.

Note

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

  1. Download torrent file from http://seed.fuel-infra.org/fuelweb-iso/ via aria2 console torrent client.
  2. Check for errors and delete folder if there is an error.
  3. Sync downloaded iso with jenkins slave. You should have necessary users with rsa keys set.