Project

General

Profile

Jenkins » History » Revision 10

Revision 9 (laforge, 03/05/2018 07:23 PM) → Revision 10/11 (laforge, 02/08/2020 12:16 PM)

{{>toc}} 

 h1. Continuous Integration with Jenkins 

 h2. What 

 The Osmocom Cellular Infrastructure software stack has grown to a size where it make sense to somehow track the state after each commit. The "Jenkins Software":https://jenkins.io/ allows us to do this. The installation can be found at http://jenkins.osmocom.org/jenkins and all of Osmocom is tracked there. The goal is to have all projects/repositories of the osmocom umbrella tracked there.  

 We are happy if people donate CPU time to be used as additional nodes (Build Slaves) to execute the compile jobs. Please contact laforge@gnumonks.org if you want to donate some. 

 h2. How 

 We are using Jenkins in a Docker container. as it comes from the FreeBSD port system. It runs using the standalone servlet container (Winstone Servlet Engine) and is behind one (IPv6) or two (IPv4) cherokee reverse proxies. Currently there are several build slaves, primarily a peair of Debian GNU/Linux 8 and 9 LXC containers on amd64 on each of the physical build hosts. amd64.. 

 See also [[osmocom-servers:Jenkins_Node_Setup]] 

 h3. Jenkins Job Builder 

 Initially we used manually-configured jenkins jobs using the Jenkins Web UI.    With a lot of projects, it's easy to introduce inconsistency and becomes difficult to maintain.    Instead, we step by step migrated to using "Jenkins Job Builder":https://docs.openstack.org/infra/jenkins-job-builder/ which allows us to describe build jobs in YAML syntax.    You can find our job descriptions at http://git.osmocom.org/osmo-ci/tree/jobs - and as always, contributions are welcome. 

 h3. Custom Build Helper Scripts 

 If you look into the jenkins job configuration of the individual jobs, you will notice that they use a custom helper script that is part of each Osmocom projects' git repository: @contrib/jenkins.sh@ (for an example, see http://git.osmocom.org/libosmo-netif/tree/contrib/jenkins.sh) 

 This @contrib/jenkins.sh@ expects that some common helper scripts from http://git.osmocom.org/osmo-ci are in your PATH at the time of execution.    The common helper scripts (such as @osmo-deps.sh@ or @osmo-build-dep.sh@).    Those helpers perform tasks similar to all osmocom projects, i.e. clone/update a dependency in the workspace of a build node.    The script will try to @git-clone@, @git-fetch@, @git-reset --hard@ the dependency. 

 h4. Building code like jenkins build slave would do it 

 During development, it sometimes is useful to build the code just like it is built on the jenkins build slave. 

 If you would like to do that, you should 
 # @git clone git://git.osmocom.org/osmo-ci@ 
 # set your shell @PATH@ to include the @osmo-ci/scripts@ directory 
 # set the @MAKE@ environment variable to your make command (@make@ or @gmake@) 
 # go to the root directory of the respective project git repo (e.g. libosmo-netif) 
 # execute @./contrib/jenkins.sh@ 

Add picture from clipboard (Maximum size: 48.8 MB)