Add build_slaves module for Jenkins slaves

Still need to add nexus_password to eyaml.
This commit is contained in:
Andrew Bayer 2014-12-01 11:47:42 -08:00
parent 00997c586a
commit fe3c3ab5e1
11 changed files with 394 additions and 4 deletions

View File

@ -2,5 +2,6 @@
dnsclient::searchorder: 'apache.org'
dnsclient::nameserver1: '8.8.8.8'
dnsclient::nameserver2: '8.8.4.4'
dnsclient::nameservers:
- '8.8.8.8'
- '8.8.4.4'

View File

@ -43,6 +43,14 @@ apt::sources:
key_server: 'pgp.mit.edu'
include_deb: true
include_src: false
'lxc_docker':
location: 'https://get.docker.io/ubuntu'
release: 'docker'
repos: 'main'
key: 'A88D21E9'
key_server: 'hkp://keyserver.ubuntu.com:80'
include_deb: true
include_src: false
apt::force:
'orthrus':
@ -97,3 +105,149 @@ subversionclient::packages:
subversionclient::svn_conf_config: '/etc/subversion/config'
subversionclient::svn_conf_servers: '/etc/subversion/servers'
build_slaves::jenkins::jenkins_pub_key: 'AAAAB3NzaC1yc2EAAAABIwAAAIEAtxkcKDiPh1OaVzaVdc80daKq2sRy8aAgt8u2uEcLClzMrnv/g19db7XVggfT4+HPCqcbFbO3mtVnUnWWtuSEpDjqriWnEcSj2G1P53zsdKEu9qCGLmEFMgwcq8b5plv78PRdAQn09WCBI1QrNMypjxgCKhNNn45WqV4AD8Jp7/8='
build_slaves::jenkins::jenkins_packages:
- asf-build-apache-ant-1.9.4
- asf-build-apache-forrest-0.9
- asf-build-apache-maven-2.2.1
- asf-build-apache-maven-3.0.4
- asf-build-apache-maven-3.2.1
- asf-build-clover-ant-2.4.3
- asf-build-findbugs-2.0.3
- asf-build-harmony-jdk-713673
- asf-build-ibmjava2-142
- asf-build-ibmjava2-amd64-142
- asf-build-ibm-java2-i386-50
- asf-build-ibm-java2-x86-64-50
- asf-build-ibm-java-i386-60
- asf-build-ibm-java-x86-64-60
- asf-build-ibm-java-x86-64-70
- asf-build-j2sdk1.4.2-19
- asf-build-jdk1.5.0-17-32
- asf-build-jdk1.5.0-17-64
- asf-build-jdk1.5.0-22-32
- asf-build-jdk1.5.0-22-64
- asf-build-jdk1.6.0-11-32
- asf-build-jdk1.6.0-11-64
- asf-build-jdk1.6.0-20-32
- asf-build-jdk1.6.0-20-32-unlimited-security
- asf-build-jdk1.6.0-20-64
- asf-build-jdk1.6.0-27-32
- asf-build-jdk1.6.0-27-64
- asf-build-jdk1.6.0-45-32
- asf-build-jdk1.6.0-45-64
- asf-build-jdk1.7.0-04
- asf-build-jdk1.7.0-25-32
- asf-build-jdk1.7.0-25-64
- asf-build-jdk1.7.0-32
- asf-build-jdk1.7.0-55
- asf-build-jdk1.7.0-64
- asf-build-jdk1.8.0
- asf-build-jira-cli-2.1.0
build_slaves::distro_packages:
- ant
- asciidoc
- autoconf
- automake
- bison
- build-essential
- cabal-install
- cmake
- cppcheck
- curl
- debhelper
- devscripts
- dh-make
- emacs24-nox
- erlang-base
- erlang-dev
- erlang-eunit
- flex
- g++
- g++-4.8-multilib
- g++-multilib
- gcc-multilib
- ghc
- git-core
- golang
- golang-go
- lib32bz2-1.0
- lib32ncurses5
- lib32z1
- libapr1-dev
- libbit-vector-perl
- libboost-dev
- libboost-filesystem-dev
- libboost-program-options-dev
- libboost-system-dev
- libboost-test-dev
- libc6-dev-i386
- libclass-accessor-class-perl
- libcppunit-dev
- libcurl4-nss-dev
- libcurl4-openssl-dev
- libevent-dev
- libfuse-dev
- libghc-binary-dev
- libghc-hashable-dev
- libghc-http-dev
- libghc-network-dev
- libghc-unordered-containers-dev
- libghc-vector-dev
- libglib2.0-dev
- libjpeg8-dev
- liblzo2-dev
- liblua5.2-dev
- libmono-system-web2.0-cil
- libqt4-dev
- libsasl2-dev
- libsnappy-dev
- libssl-dev
- libstdc++-4.8-dev
- libsvn-dev
- libswt-gtk-3-java
- libswt-gtk-3-jni
- libtool
- libxml-xpath-perl
- libz-dev
- linux-headers-3.13.0-36
- linux-headers-3.13.0-36-generic
- linux-image-3.13.0-36-generic
- linux-image-3.13.0-36-lowlatency
- lua5.2
- lxc-docker
- mingw32
- mingw32-binutils
- mingw32-runtime
- mono-devel
- mono-gmcs
- nodejs
- nodejs-dev
- nodejs-legacy
- npm
- nsis
- php-pear
- php5
- php5-cli
- php5-dev
- pkg-config
- protobuf-compiler
- python-all
- python-all-dbg
- python-all-dev
- python-boto
- python-dev
- python-pip
- python-setuptools
- python-support
- re2c
- ruby
- ruby-dev
- screen
- sharutils
- sloccount
- tmux
- unzip
- xvfb

View File

@ -0,0 +1,2 @@
modulepath = /etc/puppet/modules:/etc/puppet/3rdParty

View File

@ -0,0 +1,5 @@
hiera_include("classes")
node default {
include build_slaves::jenkins
}

View File

@ -0,0 +1,6 @@
#!/bin/bash
export TOOLS_HOME=${HOME}/tools
export ANT_HOME=$TOOLS_HOME/ant/latest
export MAVEN_HOME=$TOOLS_HOME/maven/latest
export PATH=${ANT_HOME}/bin:${MAVEN_HOME}/bin:$PATH

View File

@ -0,0 +1,51 @@
#
# This file is managed by puppet. Do not edit it directly.
#
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
#
#Where:
#<domain> can be:
# - an user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to
# - rtprio - max realtime priority
#
#<domain> <type> <item> <value>
#
jenkins soft nofile 60000
jenkins hard nofile 60000
jenkins soft nproc 10240
jenkins hard nproc 10240
# End of file

View File

@ -0,0 +1,9 @@
class build_slaves (
$distro_packages = [],
) {
package { $distro_packages:
ensure => installed,
}
}

View File

@ -0,0 +1,113 @@
class build_slaves::jenkins (
$nexus_password = '',
$jenkins_pub_key = '',
$jenkins_packages = []
) {
require stdlib
require build_slaves
group { 'jenkins':
ensure => present,
}
user { 'jenkins':
ensure => present,
require => Group['jenkins'],
shell => '/bin/bash',
managehome => true,
}
file { '/usr/local/jenkins':
require => User['jenkins'],
ensure => directory,
owner => 'jenkins',
group => 'jenkins',
}
file { '/home/jenkins/tools':
require => File['/usr/local/jenkins'],
ensure => 'link',
target => '/usr/local/jenkins',
}
file { '/home/jenkins/.ssh':
require => User['jenkins'],
ensure => directory,
owner => 'jenkins',
group => 'jenkins',
mode => '0700'
}
file { '/home/jenkins/env.sh':
ensure => present,
mode => 0755,
source => 'puppet:///modules/build_slaves/jenkins_env.sh',
owner => 'jenkins',
group => 'jenkins',
}
ssh_authorized_key { 'jenkins':
ensure => present,
require => User['jenkins'],
user => 'jenkins',
type => 'ssh-rsa',
key => 'AAAAB3NzaC1yc2EAAAABIwAAAIEAtxkcKDiPh1OaVzaVdc80daKq2sRy8aAgt8u2uEcLClzMrnv/g19db7XVggfT4+HPCqcbFbO3mtVnUnWWtuSEpDjqriWnEcSj2G1P53zsdKEu9qCGLmEFMgwcq8b5plv78PRdAQn09WCBI1QrNMypjxgCKhNNn45WqV4AD8Jp7/8='
}
file { '/home/jenkins/.m2':
require => User['jenkins'],
ensure => directory,
owner => 'jenkins',
group => 'jenkins',
mode => '0755'
}
file { '/home/jenkins/.buildr':
require => User['jenkins'],
ensure => directory,
owner => 'jenkins',
group => 'jenkins',
mode => '0755'
}
file { "/home/jenkins/.m2/settings.xml":
require => File['/home/jenkins/.m2'],
ensure => $ensure,
path => "/home/jenkins/.m2/settings.xml",
owner => 'jenkins',
group => 'jenkins',
mode => '0640',
content => template('build_slaves/m2_settings.erb')
}
file { "/home/jenkins/.buildr/settings.yaml":
require => File['/home/jenkins/.buildr'],
ensure => $ensure,
path => "/home/jenkins/.buildr/settings.yaml",
owner => 'jenkins',
group => 'jenkins',
mode => '0640',
content => template('build_slaves/buildr_settings.erb')
}
file { "/etc/security/limits.d/jenkins.conf":
ensure => file,
owner => root,
group => root,
mode => 0644,
source => "puppet:///modules/build_slaves/jenkins_limits.conf",
require => File["/etc/security/limits.d"],
}
file_line { "USERGROUPS_ENAB":
path => '/etc/login.defs',
line => 'USERGROUPS_ENAB no',
match => '^USERGROUPS_ENAB.*'
}
package { $jenkins_packages:
require => Apt::Source['lxc_docker'],
ensure => installed,
}
}

View File

@ -0,0 +1,5 @@
repositories:
release_to:
url: https://repository.apache.org/content/repositories/snapshots
username: ci-hudson
password: <%= nexus_password %>

View File

@ -0,0 +1,28 @@
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>struts2.snapshots</id>
<username>wesw</username>
</server>
<server>
<id>apache.snapshots.https</id>
<username>ci-hudson</username>
<password><%= nexus_password %></password>
</server>
</servers>
<mirrors>
<mirror>
<id>Nexus</id>
<mirrorOf>apache.snapshots</mirrorOf>
<name>Nexus</name>
<url>http://repository.apache.org/snapshots</url>
</mirror>
</mirrors>
</settings>

View File

@ -11,9 +11,25 @@ Facter.add("asfosname") do
end
end
Facter.add("ipaddress_primary") do
setcode do
if Facter.value('ipaddress_eth0')
Facter.value('ipaddress_eth0')
elsif Facter.value('ipaddress_em0')
Facter.value('ipaddress_em0')
elsif Facter.value('ipaddress_eth1')
Facter.value('ipaddress_eth1')
elsif Facter.value('ipaddress_em1')
Facter.value('ipaddress_em1')
else
Facter.value('ipaddress')
end
end
end
Facter.add("asfcolo") do
setcode do
ipadd = Facter.value('ipaddress')
ipadd = Facter.value('ipaddress_primary')
case ipadd
when /^140.211.11.([0-9]+)$/
"osuosl"
@ -36,7 +52,7 @@ Facter.add("asfcolo") do
when /^162.209.6.([0-9]+)$/
"rax-vpc-us-mid"
else
'No Colo could be automatically determined'
"yahoo"
end
end
end