jenkins' docs

This commit is contained in:
Tomas Kopecek 2017-02-20 14:04:59 +01:00 committed by Mike McLean
parent ff57095e70
commit 5ad5fc9ad2
3 changed files with 150 additions and 1 deletions

View file

@ -0,0 +1,144 @@
Unit tests in Fedora's Jenkins
==============================
We're using Fedora's `Jenkins <https://jenkins.fedorainfracloud.org/job/koji>`_
infrastructure for automatically running unit tests for new commits in
master branch.
Current setup uses periodical checking of koji's git and when new commits are
seen, tests are run. Normal developer needn't to care about his workflow, but can
use it for his advantage as it can run tests for him with platforms he has no
access to. Currently are tests run on Fedora 24, Fedora 25 and CentOS 6
platforms.
Usage
-----
If you need any change in jenkins setup, please file a pagure issue. As part
of solving issue, this documentation must be updated to reflect current state
in jenkins.
If you want to run tests against specific repo (your or official branch), log
in to jenkins (via FAS unified login), navigate to `Build with parameters
<https://jenkins.fedorainfracloud.org/job/koji/build?delay=0sec>`_ and put
your repository url to ``REPO`` and name of branch to ``BRANCH``.
``BRANCH_TO`` could be left blank as it is default set to *master*. Pressing
``BUILD`` should give you link to running build in all supported
environments.
Configuration
-------------
- Public access is for everyone with no need to log in to jenkins.
- Admin access is via same interface and currently tkopecek and mikem have
access there. If you need access for yourself (you're probably part of
brew/koji team) create jira in BREW project requesting this.
Prerequisite for this is Fedora account (probably same one you are using
for work in pagure).
- Setup - Following items are set-up via
https://jenkins.fedorainfracloud.org/job/koji/configure
- Please don't change access rules (*Enable project-based security*
fields) unless you've a corresponding jira for that, so every change of
access is tracked there.
- *Job notifications* - when jenkins job finishes, it will send some info to
pagure. Such call will add a comment to PR. For this REST hook needs to
be configured:
* Format: JSON
* Protocol: HTTP
* Event: Job Finalized
* URL: <url taken from koji pagure settings which will look similar to https://pagure.io/api/0/ci/jenkins//koji/<hash>/build-finished
* Timeout: 30000
* Log: 0
- *This build is parametrized* (checkbox set to true) - it allows jenkins
to use other branches than master (especially for PRs). Three parameters
are defined there:
* REPO - The repository for the pull request.
* BRANCH - The branch for the pull request.
* BRANCH_TO - A branch into which the pull request should be merged.
- *Discard Old Builds*
* Strategy: Rotation
* Days to keep build: 20
* Max # of builds to keep: empty
- *Disable build* - it could be used if a lot of failing build happens with
no vision of early recovery - temporarily suspend jenkins jobs
- *Execute concurrent builds if necessary* - We currently have no need of this
- *Restrict where this project can be run* - Fedora 24 is used for now which means 'F24' value
- *Source Code Management*
* Git
* Repositories
* Repository URL: https://pagure.io/koji.git
* Credentials: none
* Branches to build: origin/master
- *Build triggers*
* *Trigger builds remotely*: true
* Authentication tokens: <token from koji pagure settings>
* *Poll SCM*:
* Schedule: H/5 * * * *
- *Build* - most important part - script which runs tests itself. Here you can also add missing requirements which will get installed via pip (not via rpms from F24!)
.. code-block:: shell
# setup virtual environment
rm -rf kojienv
virtualenv --system-site-packages kojienv
source kojienv/bin/activate
# install python requirements via pip, you can also specify exact versions here
# three steps are because of EL7 target. packaging is required by setuptools
# which are required by other packages. Not working in one transaction
pip install pip packaging --upgrade --ignore-installed
pip install setuptools --upgrade --ignore-installed
pip install nose psycopg2 python-qpid-proton mock coverage --upgrade --ignore-installed
# rehash package to be sure updated versions are used
hash -r
# merge PR into main repository
if [ -n "$REPO" -a -n "$BRANCH" ]; then
git config --global user.email "test@example.com"
git config --global user.name "Tester"
git remote rm proposed || true
git remote add proposed "$REPO"
git fetch proposed
git checkout "origin/${BRANCH_TO:-master}"
git merge --no-ff "proposed/$BRANCH" -m "Merge PR"
fi
# remove possible coverage output and run tests
coverage erase
PYTHONPATH=hub/.:cli/.:plugins/hub/.:plugins/cli/. nosetests --with-coverage --cover-package .
coverage xml
# run additional tests if configured
#pylint . > pylint_report.txt
#pep8 . > pep8_report.txt
# kill virtual environment
deactivate
- *Post-build actions*
* *Publish Cobertura Coverage report*: coverage.xml - this will create coverage report accessible via jenkins web ui
* *E-mail notification*:
* Recipients: tkopecek@redhat.com brew-devel@redhat.com
* Send separate e-mails to individuals who broke the build
- *Send messages to fedmsg*

View file

@ -33,7 +33,6 @@ Contents
using_the_koji_build_system
writing_a_plugin
writing_koji_code
content_generators
content_generator_metadata
HowTos

View file

@ -631,6 +631,8 @@ Here are some guidelines on producing preferable pull requests.
with new code
- Please maintain backward-compatibility up to RHEL 5 (which means
Python 2.4)
- Check, that unit tests are not broken. Simply run ``make test`` in main
directory of your branch.
Note that the core development team for Koji is small, so it may take a few
days for someone to reply to your request.
@ -669,3 +671,7 @@ You will need to install the following packages to actually run the tests.
Please note that it is currently not supported to use *virtualenv* when hacking
on Koji.
Unit tests are run automatically for any commit in master branch. We use
Fedora's jenkins instance for that. Details are given here: :doc:`Unit tests
in Fedora's Jenkins <configuring_jenkins>`.