Statistics
| Branch: | Tag: | Revision:

root / docs / src / ci.rst @ 972820a2

History | View | Annotate | Download (4.2 kB)

1 5bde09a4 Georgios Gousios
Continuous integration with Jenkins
2 972820a2 Kostas Papadimitriou
-----------------------------------
3 948121ee Georgios Gousios
4 948121ee Georgios Gousios
Preparing a GIT mirror
5 972820a2 Kostas Papadimitriou
**********************
6 948121ee Georgios Gousios
7 271baf11 Nikos Skalkotos
Jenkins cannot currently work with Git over encrypted HTTP. To solve this
8 271baf11 Nikos Skalkotos
problem we currently mirror the central Git repository locally on the jenkins
9 271baf11 Nikos Skalkotos
installation machine. To setup such a mirror do the following:
10 948121ee Georgios Gousios
11 c469ca86 Kostas Papadimitriou
edit .netrc::
12 948121ee Georgios Gousios
13 c469ca86 Kostas Papadimitriou
    machine code.grnet.gr
14 c469ca86 Kostas Papadimitriou
    login accountname
15 c469ca86 Kostas Papadimitriou
    password accountpasswd
16 948121ee Georgios Gousios
17 c469ca86 Kostas Papadimitriou
Create the mirror::
18 948121ee Georgios Gousios
19 c469ca86 Kostas Papadimitriou
    git clone --mirror https://code.grnet.gr/git/synnefo synnefo
20 948121ee Georgios Gousios
21 c469ca86 Kostas Papadimitriou
Setup cron to pull from the mirror periodically. Ideally, Git mirror updates
22 c469ca86 Kostas Papadimitriou
should run just before Jenkins jobs check the mirror for changes::
23 948121ee Georgios Gousios
24 c469ca86 Kostas Papadimitriou
    4,14,24,34,44,54 * * * * cd /path/to/mirror && git fetch && git remote prune origin
25 948121ee Georgios Gousios
26 948121ee Georgios Gousios
Jenkins setup
27 972820a2 Kostas Papadimitriou
*************
28 5bde09a4 Georgios Gousios
29 271baf11 Nikos Skalkotos
The following instructions will setup Jenkins to run synnefo tests with the
30 271baf11 Nikos Skalkotos
SQLite database. To run the tests on MySQL and/or Postgres, step 5 must be
31 271baf11 Nikos Skalkotos
replicated. Also, the correct configuration file must be copied (line 6 of the
32 271baf11 Nikos Skalkotos
build script).
33 5bde09a4 Georgios Gousios
34 6940515d Georgios Gousios
1. Install and start Jenkins. On Debian Squeeze:
35 5bde09a4 Georgios Gousios
36 6940515d Georgios Gousios
   wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | apt-key add -
37 5bde09a4 Georgios Gousios
   echo "deb http://pkg.jenkins-ci.org/debian binary/" >>/etc/apt/sources.list
38 6940515d Georgios Gousios
   echo "deb http://ppa.launchpad.net/chris-lea/zeromq/ubuntu lucid main" >> /etc/apt/sources.list
39 6940515d Georgios Gousios
   sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C7917B12  
40 5bde09a4 Georgios Gousios
   sudo apt-get update
41 5bde09a4 Georgios Gousios
   sudo apt-get install jenkins
42 5bde09a4 Georgios Gousios
43 75aae73a Georgios Gousios
   Also install the following packages:
44 75aae73a Georgios Gousios
45 75aae73a Georgios Gousios
   apt-get install python-virtualenv libcurl3-gnutls libcurl3-gnutls-dev
46 75aae73a Georgios Gousios
                   uuid-dev libmysqlclient-dev libpq-dev libsqlite-dev
47 6940515d Georgios Gousios
                   python-dev libzmq-dev
48 75aae73a Georgios Gousios
49 5bde09a4 Georgios Gousios
2. After Jenkins starts, go to
50 5bde09a4 Georgios Gousios
51 5bde09a4 Georgios Gousios
   http://$HOST:8080/pluginManager/
52 5bde09a4 Georgios Gousios
53 5bde09a4 Georgios Gousios
   and install the following plug-ins at
54 5bde09a4 Georgios Gousios
55 5bde09a4 Georgios Gousios
   -Jenkins Cobertura Plugin
56 5bde09a4 Georgios Gousios
   -Jenkins Email Extension Plugin
57 5bde09a4 Georgios Gousios
   -Jenkins GIT plugin
58 5bde09a4 Georgios Gousios
   -Jenkins SLOCCount Plug-in
59 5bde09a4 Georgios Gousios
   -Hudson/Jenkins Violations plugin
60 5bde09a4 Georgios Gousios
61 75aae73a Georgios Gousios
3. Configure the Jenkins user's Git details:
62 75aae73a Georgios Gousios
   su jenkins
63 75aae73a Georgios Gousios
   git config --global user.email "buildbot@lists.grnet.gr"
64 75aae73a Georgios Gousios
   git config --global user.name "Buildbot"
65 75aae73a Georgios Gousios
66 75aae73a Georgios Gousios
4. Make sure that all system-level dependencies specified in README.develop
67 5bde09a4 Georgios Gousios
   are correctly installed
68 5bde09a4 Georgios Gousios
69 c469ca86 Kostas Papadimitriou
5. Create a new "free-style software" job and set the following values::
70 c469ca86 Kostas Papadimitriou
71 c469ca86 Kostas Papadimitriou
    Project name: synnefo
72 c469ca86 Kostas Papadimitriou
    Source Code Management: Git
73 c469ca86 Kostas Papadimitriou
    URL of repository: Jenkins Git does not support HTTPS for checking out directly
74 c469ca86 Kostas Papadimitriou
                        from the repository. The temporary solution is to checkout
75 c469ca86 Kostas Papadimitriou
                        with a cron script in a directory and set the checkout path
76 c469ca86 Kostas Papadimitriou
                        in this field
77 c469ca86 Kostas Papadimitriou
    Branches to build: master and perhaps others
78 c469ca86 Kostas Papadimitriou
    Git->Advanced->Local subdirectory for repo (optional): synnefo
79 c469ca86 Kostas Papadimitriou
    Git->Advanced->Prune remote branches before build: check
80 c469ca86 Kostas Papadimitriou
    Repository browser: redmineweb,
81 c469ca86 Kostas Papadimitriou
                         URL: https://code.grnet.gr/projects/synnefo/repository/
82 c469ca86 Kostas Papadimitriou
    Build Triggers->Poll SCM: check
83 c469ca86 Kostas Papadimitriou
                     Schedule: # every five minutes
84 c469ca86 Kostas Papadimitriou
                   0,5,10,15,20,25,30,35,40,45,50,55 * * * * 
85 c469ca86 Kostas Papadimitriou
86 c469ca86 Kostas Papadimitriou
    Build -> Add build step-> Execute shell
87 c469ca86 Kostas Papadimitriou
88 c469ca86 Kostas Papadimitriou
    Command::
89 c469ca86 Kostas Papadimitriou
90 c469ca86 Kostas Papadimitriou
        #!/bin/bash -ex
91 c469ca86 Kostas Papadimitriou
        cd synnefo
92 c469ca86 Kostas Papadimitriou
        mkdir -p reports
93 c469ca86 Kostas Papadimitriou
        /usr/bin/sloccount --duplicates --wide --details api util ui logic auth > reports/sloccount.sc
94 c469ca86 Kostas Papadimitriou
        cp conf/ci/manage.py .
95 c469ca86 Kostas Papadimitriou
        if [ ! -e requirements.pip ]; then cp conf/ci/pip-1.2.conf requirements.pip; fi
96 c469ca86 Kostas Papadimitriou
        cat settings.py.dist conf/ci/settings.py.sqlite > settings.py
97 c469ca86 Kostas Papadimitriou
        python manage.py update_ve
98 c469ca86 Kostas Papadimitriou
        python manage.py hudson api db logic 
99 c469ca86 Kostas Papadimitriou
100 c469ca86 Kostas Papadimitriou
    Post-build Actions->Publish JUnit test result report: check
101 c469ca86 Kostas Papadimitriou
                         Test report XMLs: synnefo/reports/TEST-*.xml
102 c469ca86 Kostas Papadimitriou
103 c469ca86 Kostas Papadimitriou
    Post-build Actions->Publish Cobertura Coverage Report: check
104 c469ca86 Kostas Papadimitriou
                         Cobertura xml report pattern: synnefo/reports/coverage.xml
105 c469ca86 Kostas Papadimitriou
106 c469ca86 Kostas Papadimitriou
    Post-build Actions->Report Violations: check
107 c469ca86 Kostas Papadimitriou
                         pylint[XML filename pattern]: synnefo/reports/pylint.report
108 c469ca86 Kostas Papadimitriou
109 c469ca86 Kostas Papadimitriou
    Post-build Actions->Publish SLOCCount analysis results
110 c469ca86 Kostas Papadimitriou
                         SLOCCount reports: synnefo/reports/sloccount.sc
111 c469ca86 Kostas Papadimitriou
                         (also, remember to install sloccount at /usr/bin)
112 c469ca86 Kostas Papadimitriou
113 c469ca86 Kostas Papadimitriou
.. seealso::
114 c469ca86 Kostas Papadimitriou
    http://sites.google.com/site/kmmbvnr/home/django-hudson-tutorial