ansible/playbooks/groups/jenkins-cloud.yml
2015-01-24 22:24:07 +00:00

565 lines
17 KiB
YAML

- name: check/create instance for jenkins-master
hosts: jenkins-cloud # 209.132.184.153
user: root
gather_facts: False
tags:
- jenkins_master
vars_files:
- /srv/web/infra/ansible/vars/global.yml
- "/srv/private/ansible/vars.yml"
tasks:
- include: "{{ tasks }}/persistent_cloud.yml"
- include: "{{ tasks }}/growroot_cloud.yml"
- name: provision master
hosts: 209.132.184.153
user: root
gather_facts: True
tags:
- jenkins_master
vars_files:
- /srv/web/infra/ansible/vars/global.yml
- "/srv/private/ansible/vars.yml"
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
vars:
- resolvconf: resolv.conf/jenkins-cloud
roles:
- base
tasks:
- include: "{{ tasks }}/cloud_setup_basic.yml"
- name: make the jenkins path
action: file state=directory path=/var/lib/jenkins
- name: mount our persistent space
action: mount name=/var/lib/jenkins src='LABEL=jenkins' fstype=ext4 state=mounted
- name: install pkgs for jenkins
action: yum state=present pkg={{ item }}
with_items:
- vim
- dejavu-s\*
- fontconfig
- httpd
- openssh-clients
- git
- nrpe
tags:
- packages
- name: install java-1.8.0 except on rhel7 for jenkins
action: yum state=present pkg={{ item }}
with_items:
- java-1.8.0-openjdk
tags:
- packages
when: ansible_distribution_major_version != '7'
- name: add jenkins proxy config file for apache
action: copy src="{{ files }}/jenkins/master/jenkins-apache.conf"
dest=/etc/httpd/conf.d/jenkins-apache.conf
owner=root group=root mode=0644
notify:
- restart httpd
tags:
- config
- name: enable apache
action: service name=httpd state=running enabled=true
- name: add jenkins upstream repo
action: copy src="{{ files }}/jenkins/master/jenkins.repo"
dest=/etc/yum.repos.d/jenkins.repo
owner=root group=root
tags:
- config
- name: import jenkins upstream gpg key
action: copy src="{{ files }}/jenkins/master/jenkins-ci.org.key"
dest=/etc/pki/rpm-gpg/RPM-GPG-KEY-jenkins-ci.org
owner=root group=root
tags:
- config
- name: install pkgs for jenkins
action: yum state=present pkg={{ item }}
with_items:
- jenkins
tags:
- packages
- name: set the hostname to jenkins-osversion
action: command hostname jenkins-master-{{ dist_tag }}
tags:
- config
- name: make sure jenkins is stopped
action: service name=jenkins state=stopped
- name: clean any previous plugin deployments
action: file state=absent path=/var/lib/jenkins/plugins
- name: mkdir dir for jenkins data
action: file state=directory path=/var/lib/jenkins/plugins/ owner=jenkins group=jenkins
# - name: Download jenkins plugins
# get_url: url=https://updates.jenkins-ci.org/download/plugins/{{ item.name }}/{{ item.version }}/{{ item.name }}.hpi
# dest=/var/lib/jenkins/plugins/{{ item.name }}.hpi
# sha256sum={{ item.sha }}
# with_items:
# - name: bazaar
# version: '1.22'
# sha: d7ff0987c96e2a694257ecf897ceee376908c5f94abfd1d5efc32482e4d54141
# - name: chucknorris
# version: '0.5'
# sha: bd9df0507008255ad2ed046368d10a4d039a6cbcfefb53c71c1768cc0dcbf65b
# - name: cobertura
# version: '1.9.5'
# sha: a76bc1524efc5ba05672638001c0e951edd2a853d222efcfb035e02169e4252a
# - name: cvs
# version: '2.12'
# sha: 6e6dfd35e8501bf5f84a9d43d210db61165ce51a606327fc81f2efc5208478ba
# - name: external-monitor-job
# version: '1.2'
# sha: 8dd2644271d0138839490342833e9ff7f82772038f673f5ac6220193c587747d
# - name: git
# version: '2.2.5'
# sha: 92c51f33fbcbe858d05b40083d3c628f03b6ba5218626ee22db9a367947b7670
# - name: git-client
# version: '1.10.1'
# sha: 19de6979a1360bc022bba9e061c4f946e51f252912234453d7f70af62d089e65
# - name: instant-messaging
# version: '1.29'
# sha: b8fc1bff0c6f899f60d2d02b4ed321baf045fc0e5d4e0c3676d99197f94a8e5c
# - name: ldap
# version: '1.8'
# sha: 491905ec3675b6a5acf2098722c121732801fd6210e6ff54bc99d213b5b8ee58
# - name: matrix-auth
# version: '1.2'
# sha: a773c2fd6b2d70b2ff1c0466308290326d97f05b6fa72a217922997750aef39a
# - name: maven-plugin
# version: '2.6'
# sha: 3a3a1e1d7e3416ea85ec09f953f5b8e37d943ca55b8e4224bbcfd702bed72fa5
# - name: mercurial
# version: '1.50'
# sha: 934a6bd38e2109b97c915d80fdb6abc74a8ef4aff882b94ef0b1a274919ea407
# - name: openid
# version: '1.8'
# sha: fed09c7da7762323cf55c3b725493622a4a2460eab8622230497e35914ac9d7e
# - name: python
# version: '1.2'
# sha: e3358a945f21b84a8156237b0d621815a7822322e1180ae1e66d10798aaf1f56
# - name: scm-api
# version: '0.2'
# sha: cc856d8dc8b951cf9a195baa2bf7bbff0d12368534a6b973e43e2909141eff3f
# - name: ssh-agent
# version: '1.4.1'
# sha: ae8227bf219e96a4d76f36dc6d6e652ddd0209e8d9c4cf4483a07858d707ce6e
# - name: subversion
# version: '2.2'
# sha: 221ed61c8e4ef959bb316ea93d188e19c8f980edac0f1e45a6cd8d7e13808b51
# - name: translation
# version: '1.11'
# sha: 4d88b8d74ade119cef76827bd385693447fa68fa18fd1bfc8806aff9d931f00e
# - name: violations
# version: '0.7.11'
# sha: f8eacb53eb01f83f3702009a41cef89e520a72933671ac1ee9154d88bde2d67a
# - name: xunit
# version: '1.90'
# sha: 2beade6d7769db9d52ff147c7a491cd1e7c53b01c07b9eeb44daa27ee75b25ca
# - name: multiple-scms
# version: '0.3'
# sha: e79d7e855ffe0ad060d11ae1ce0b39f68e7fa031c6e831f60fe33e5ddb3392ac
# - name: credentials
# version: '1.16.1'
# sha: ae7e8ab317c03355390135d5eec683db7dceb5d513717d9fab624238a5ffe2bf
# - name: mailer
# version: '1.11'
# sha: 9217be3008f323ac0535d4fb34118ed2681d6170d2d7de2f38b99ba331c4a256
# - name: javadoc
# version: '1.2'
# sha: 4bde54b288b24d5deaa7f809df78373d3b37d683d4693ab42278f019252c86b9
# notify:
# - restart jenkins
# tags:
# - config
#
# - name: Download additional jenkins plugins (from the maven repo)
# get_url: url=http://maven.jenkins-ci.org/content/repositories/releases/org/jvnet/hudson/plugins/{{ item.name }}/{{ item.version }}/{{ item.name }}-{{ item.version }}.hpi
# dest=/var/lib/jenkins/plugins/{{ item.name }}.hpi
# sha256sum={{ item.sha }}
# with_items:
# - name: warnings
# version: '4.39'
# sha: 7652b7ed8971de932f46323aa8e0ddee2bcf4f14839296481ae79590e09f7606
# notify:
# - restart jenkins
# tags:
# - config
- name: Install custom jenkins plugins (from ansible bigfiles)
action: copy src="{{ bigfiles }}/jenkins/{{ item }}.hpi" dest=/var/lib/jenkins/plugins/{{ item }}.hpi
with_items:
- fedmsg
- bazaar
- chucknorris
- cobertura
- cvs
- external-monitor-job
- git
- git-client
- instant-messaging
- ldap
- matrix-auth
- maven-plugin
- mercurial
- openid
- python
- scm-api
- ssh-agent
- subversion
- translation
- violations
- xunit
- multiple-scms
- credentials
- mailer
- javadoc
- warnings
- ghprb
notify:
- restart jenkins
tags:
- config
- name: import jenkins configuration files
action: copy src={{ item }} owner=jenkins group=jenkins dest=/var/lib/jenkins/ backup=yes
with_fileglob:
- "{{ files }}/jenkins/master/*.xml"
tags:
- config
- name: Give the user jenkins the ownership of the /var/lib/jenkins
file: path=/var/lib/jenkins/
owner=jenkins group=jenkins recurse=yes
- name: add jenkins ssh priv key so it can connect to clients
action: copy src="{{ private }}/files/jenkins/ssh/jenkins_master" dest=/var/tmp/jenkins_master_id_rsa mode=600 owner=jenkins group=jenkins
tags:
- config
- name: add jenkins credentials it can connect to clients
action: copy src="{{ private }}/files/jenkins/ssh/credentials.xml" dest=/var/lib/jenkins/
tags:
- config
- name: start jenkins itself
action: service name=jenkins state=running
- name: wait for a dir to exist - this is just ugly
shell: while `true`; do [ -d /var/lib/jenkins/plugins/openid/WEB-INF/lib/ ] && break; sleep 5; done
async: 1800
poll: 20
- name: jenkins hotfix big file
copy: src={{ item }} dest=/var/lib/jenkins/plugins/openid/WEB-INF/lib/ group=jenkins mode=655
with_fileglob:
- "{{ bigfiles }}/hotfixes/jenkins/openid/*.jar"
notify:
- restart jenkins
handlers:
- include: "{{ handlers }}/restart_services.yml"
- name: setup fedmsg for the master (after jenkins has been installed)
hosts: 209.132.184.153
user: root
gather_facts: True
tags:
- jenkins_master
vars_files:
- /srv/web/infra/ansible/vars/global.yml
- "/srv/private/ansible/vars.yml"
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
roles:
- role: fedmsg/base
fedmsg_fqdn: jenkins.cloud.fedoraproject.org
handlers:
- include: "{{ handlers }}/restart_services.yml"
###################################################
# jenkins slaves
- name: check/create instance for jenkins-slaves
hosts: jenkins-slaves
user: root
gather_facts: False
tags:
- jenkins_workers
vars_files:
- /srv/web/infra/ansible/vars/global.yml
- "/srv/private/ansible/vars.yml"
vars:
- keypair: fedora-admin-20130801
- security_group: default
tasks:
- include: "{{ tasks }}/persistent_cloud.yml"
- include: "{{ tasks }}/growroot_cloud.yml"
- name: provision workers
hosts: jenkins-slaves
user: root
gather_facts: True
tags:
- jenkins_workers
vars_files:
- /srv/web/infra/ansible/vars/global.yml
- "/srv/private/ansible/vars.yml"
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
tasks:
- include: "{{ tasks }}/cloud_setup_basic.yml"
- name: add jenkins repos
action: copy src={{ item }} dest=/etc/yum.repos.d/ owner=root group=root
with_fileglob:
- "{{ files }}/jenkins/slaves/*.repo"
tags:
- config
- packages
- name: install pkgs for jenkins
action: yum state=present pkg={{ item }}
with_items:
- vim
- subversion
- bzr
- git
- rpmlint
- rpmdevtools
- mercurial
- mock
- gcc
- gcc-c++
- libjpeg-turbo-devel
- python-bugzilla
- python-pip
- python-virtualenv
- python-coverage
- pylint
- python-argparse
- python-nose
- python-BeautifulSoup
- python-fedora
- python-unittest2
- python-pep8
- python-psycopg2
- postgresql-devel # Required to install python-psycopg2 w/in a venv
- docbook-style-xsl # Required by gimp-help-2
- make # Required by gimp-help-2
- automake # Required by gimp-help-2
- libcurl-devel # Required by blockerbugs
- python-formencode # Required by javapackages-tools
- asciidoc # Required by javapackages-tools
- xmlto # Required by javapackages-tools
- pycairo-devel # Required by dogtail
- packagedb-cli # Required by FedoraReview
- xorg-x11-server-Xvfb # Required by fedora-rube
- libffi-devel # Required by bodhi/cffi/cryptography
- openssl-devel # Required by bodhi/cffi/cryptography
tags:
- packages
- name: install packages not (yet) available on el7 builder
action: yum state=present pkg={{ item }}
with_items:
- java-1.8.0-openjdk
- java-1.8.0-openjdk-devel
- python-straight-plugin
- pyflakes # Requested by user rholy (ticket #4175)
- dia # Required by javapackages-tools ticket #4279
when: ansible_distribution_version != "7.0"
tags:
- packages
- name: install pkgs for jenkins for fedora systems > F19
action: yum state=present pkg={{ item }}
when: is_fedora is defined and ansible_distribution_major_version > 20
with_items:
- sbt-extras
- name: install pkgs for jenkins for fedora systems
action: yum state=present pkg={{ item }}
when: is_fedora is defined
with_items:
- python3
- python-nose-cover3
- python3-nose-cover3
- glibc.i686
- glibc-devel.i686
- libstdc++.i686
- zlib-devel.i686
- ncurses-devel.i686
- libX11-devel.i686
- libXrender.i686
- libXrandr.i686
- nspr-devel ## Requested by 389-ds-base
- nss-devel
- svrcore-devel
- openldap-devel
- libdb-devel
- cyrus-sasl-devel
- icu
- libicu-devel
- gcc-c++
- net-snmp-devel
- lm_sensors-devel
- bzip2-devel
- zlib-devel
- openssl-devel
- tcp_wrappers
- pam-devel
- systemd-units
- policycoreutils-python
- openldap-clients
- perl-Mozilla-LDAP
- nss-tools
- cyrus-sasl-gssapi
- cyrus-sasl-md5
- libdb-utils
- systemd-units
- perl-Socket
- perl-NetAddr-IP
- pcre-devel ## End of request list for 389-ds-base
- maven # Required by xmvn https://fedorahosted.org/fedora-infrastructure/ticket/4054
- gtk3-devel # Required by dogtail
- glib2-devel # Required by Cockpit
- libgudev1-devel
- json-glib-devel
- gobject-introspection-devel
- libudisks2-devel
- NetworkManager-glib-devel
- systemd-devel
- accountsservice-devel
- pam-devel
- autoconf
- libtool
- intltool
- jsl
- python-scss
- gtk-doc
- krb5-devel
- sshpass
- perl-Locale-PO
- perl-JSON
- glib-networking
- realmd
- udisks2
- mdadm
- lvm2
- sshpass # End requires for Cockpit
- tito # Requested by msrb for javapackages-tools and xmvn (ticket#4113)
- pyflakes # Requested by user rholy (ticket #4175)
- devscripts-minimal # Required by FedoraReview
- firefox # Required for rube
- python-devel # Required for mpi4py
- python3-devel # Required for mpi4py
- pwgen # Required for mpi4py
- openmpi-devel # Required for mpi4py
- mpich2-devel # Required for mpi4py
- python-openid # Required by Ipsilon
- python-openid-teams # Required by Ipsilon
- python-openid-cla # Required by Ipsilon
- python-cherrypy # Required by Ipsilon
- m2crypto # Required by Ipsilon
- lasso-python # Required by Ipsilon
- python-sqlalchemy # Required by Ipsilon
- python-ldap # Required by Ipsilon
- python-pam # Required by Ipsilon
- freeipa-python # Required by Ipsilon
- httpd # Required by Ipsilon
- mod_auth_mellon # Required by Ipsilon
- postgresql-server # Required by Ipsilon
- mod_wsgi # Required by Ipsilon
- python-jinja2 # Required by Ipsilon
tags:
- packages
- name: drop current android SDK
when: is_fedora is defined
action: file state=absent path=/var/android
- name: mkdir dir for android SDK
when: is_fedora is defined
action: file state=directory path=/var/android owner=jenkins_slave group=jenkins_slave
- name: copy android SDK
when: is_fedora is defined
action: copy src="{{ bigfiles }}/jenkins/android-sdk-with-platform-17.tar.gz" dest=/var/android/ owner=jenkins_slave group=jenkins_slave
- name: extract android SDK
when: is_fedora is defined
command: tar -xvf /var/android/android-sdk-with-platform-17.tar.gz --owner=jenkins_slave --group=jenkins_slave -C /var/android/
- name: make /var/android belong to jenkins_slave
when: is_fedora is defined
action: file path=/var/android state=directory recurse=true owner=jenkins_slave group=jenkins_slave
- name: delete sdk archive
when: is_fedora is defined
action: file state=absent path=/var/android/android-sdk-with-platform-17.tar.gz
- name: Install newer android build-tools
when: is_fedora is defined
shell: echo y | /var/android/tools/android update sdk -u -a -t build-tools-19.1.0
- name: set the hostname to jenkins-osversion
action: command hostname jenkins-{{ dist_tag }}
tags:
- config
- name: setup jenkins_slave user
action: user name=jenkins_slave state=present createhome=yes system=no
tags:
- jenkinsuser
- name: setup jenkins_slave ssh key
action: authorized_key user=jenkins_slave key="{{ item }}"
with_file:
- "{{ private }}/files/jenkins/ssh/jenkins_master.pub"
- name: jenkins_slave to mock group
action: user name=jenkins_slave groups=mock
- name: add .gitconfig for jenkins_slave user
action: copy src="{{ files }}/jenkins/gitconfig" dest=/home/jenkins_slave/.gitconfig owner=jenkins_slave group=jenkins_slave mode=664
tags:
- config
- name: template sshd_config
copy: src="{{ item }}" dest=/etc/ssh/sshd_config mode=0600 owner=root group=root
with_first_found:
- "{{ files }}/jenkins/sshd_config_slave.{{ ansible_distribution }}"
- "{{ files }}/jenkins/sshd_config_slave"
notify:
- restart sshd
tags:
- config
- name: mkdir dir for jenkins data
action: file state=directory path=/mnt/jenkins owner=jenkins_slave group=jenkins_slave
handlers:
- include: "{{ handlers }}/restart_services.yml"