From f9842d6b4769b2e89f77954997957545a3e47b8b Mon Sep 17 00:00:00 2001 From: Seth Vidal Date: Mon, 17 Dec 2012 22:21:50 +0000 Subject: [PATCH] add 3 new persistent instances for jenkins cloud - 2 workers and a master add config for the above add a common group playbook that handles setting up all of them --- files/jenkins/master/config.xml | 101 +++++++++++++ inventory/host_vars/209.132.184.117 | 11 ++ inventory/host_vars/209.132.184.118 | 10 ++ inventory/host_vars/209.132.184.119 | 11 ++ inventory/inventory | 10 ++ playbooks/groups/jenkins-cloud.yml | 213 ++++++++++++++++++++++++++++ 6 files changed, 356 insertions(+) create mode 100644 files/jenkins/master/config.xml create mode 100644 inventory/host_vars/209.132.184.117 create mode 100644 inventory/host_vars/209.132.184.118 create mode 100644 inventory/host_vars/209.132.184.119 create mode 100644 playbooks/groups/jenkins-cloud.yml diff --git a/files/jenkins/master/config.xml b/files/jenkins/master/config.xml new file mode 100644 index 0000000000..5ec9f71d82 --- /dev/null +++ b/files/jenkins/master/config.xml @@ -0,0 +1,101 @@ + + + + 1.486 + 0 + NORMAL + true + + hudson.model.Hudson.Administer:admin + hudson.model.Hudson.Administer:pingou + hudson.model.Hudson.Administer:skvidal + hudson.model.Hudson.ConfigureUpdateCenter:admin + hudson.model.Hudson.ConfigureUpdateCenter:pingou + hudson.model.Hudson.ConfigureUpdateCenter:skvidal + hudson.model.Hudson.Read:admin + hudson.model.Hudson.Read:anonymous + hudson.model.Hudson.Read:pingou + hudson.model.Hudson.Read:skvidal + hudson.model.Hudson.RunScripts:admin + hudson.model.Hudson.RunScripts:pingou + hudson.model.Hudson.RunScripts:skvidal + hudson.model.Hudson.UploadPlugins:admin + hudson.model.Hudson.UploadPlugins:pingou + hudson.model.Hudson.UploadPlugins:skvidal + hudson.model.Item.Read:anonymous + + + +https://admin.stg.fedoraproject.org/accounts/openid/yadis + + + ${ITEM_ROOTDIR}/workspace + ${ITEM_ROOTDIR}/builds + + false + + + + + + + + Fedora17 + + /mnt/jenkins/ + 3 + NORMAL + + + 209.132.184.119 + 22 + jenkins_slave + /home/jenkins_master/.ssh/id_rsa + + + + + + EL6 + + /mnt/jenkins/ + 3 + NORMAL + + + 209.132.184.118 + 22 + jenkins_slave + /home/jenkins_master/.ssh/id_rsa + + + + + + 5 + 0 + + + + All + false + false + + + + All + 0 + + + false + X-Forwarded-For + + + + + diff --git a/inventory/host_vars/209.132.184.117 b/inventory/host_vars/209.132.184.117 new file mode 100644 index 0000000000..34c2da37e5 --- /dev/null +++ b/inventory/host_vars/209.132.184.117 @@ -0,0 +1,11 @@ +--- +instance_type: m1.small +image: emi-B8793915 +keypair: admin +security_group: jenkins +zone: fedoracloud +hostbase: jenkins-master- +public_ip: 209.132.184.117 +root_auth_users: pingou skvidal +description: jenkins cloud master +volumes: ['-d /dev/vdb vol-5A7639B9'] diff --git a/inventory/host_vars/209.132.184.118 b/inventory/host_vars/209.132.184.118 new file mode 100644 index 0000000000..f1dbec6cd3 --- /dev/null +++ b/inventory/host_vars/209.132.184.118 @@ -0,0 +1,10 @@ +--- +instance_type: m1.large +image: emi-B8793915 +keypair: admin +security_group: jenkins +zone: fedoracloud +hostbase: jenkins-el6 +public_ip: 209.132.184.118 +root_auth_users: pingou skvidal +description: jenkins el6 worker/slave diff --git a/inventory/host_vars/209.132.184.119 b/inventory/host_vars/209.132.184.119 new file mode 100644 index 0000000000..edab933629 --- /dev/null +++ b/inventory/host_vars/209.132.184.119 @@ -0,0 +1,11 @@ +--- +instance_type: m1.large +image: emi-B5BA397D +keypair: admin +security_group: jenkins +zone: fedoracloud +hostbase: jenkins-f17 +public_ip: 209.132.184.118 +root_auth_users: pingou skvidal +description: jenkins f17 worker/slave + diff --git a/inventory/inventory b/inventory/inventory index 691e56aa84..0f8944a285 100644 --- a/inventory/inventory +++ b/inventory/inventory @@ -330,6 +330,16 @@ virthost-comm01.qa.fedoraproject.org #f17 twisted testbot - ticket 3537 209.132.184.112 +[jenkins-slaves] +209.132.184.118 +209.132.184.119 + +[jenkins-cloud:children] +jenkins-slaves + +[jenkins-cloud] +jenkins.cloud.fedoraproject.org + [osuosl] gallery01.dev.fedoraproject.org diff --git a/playbooks/groups/jenkins-cloud.yml b/playbooks/groups/jenkins-cloud.yml new file mode 100644 index 0000000000..7a85dd1a4b --- /dev/null +++ b/playbooks/groups/jenkins-cloud.yml @@ -0,0 +1,213 @@ +- name: check/create instance for jenkins-master + hosts: 209.132.184.117 + user: root + gather_facts: False + + vars_files: + - /srv/web/infra/ansible/vars/global.yml + - ${private}/vars.yml + + tasks: + - include: $tasks/persistent_cloud.yml + +- name: provision master + hosts: jenkins.cloud.fedoraproject.org + user: root + gather_facts: True + + vars_files: + - /srv/web/infra/ansible/vars/global.yml + - ${private}/vars.yml + - ${vars}/${ansible_distribution}.yml + + tasks: + - include: $tasks/cloud_setup_basic.yml + - include: $tasks/postfix_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=installed pkg=$item + with_items: + - vim + - dejavu-s\* + - fontconfig + - java-1.6.0-openjdk + tags: + - packages + + - name: add jenkins upstream repo + action: template src=$files/jenkins/master/jenkins.repo dest=/etc/yum.repos.d/jenkins.repo + owner=root group=root + tags: + - config + + - name: import jenkins upstream gg key + action: template 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=installed pkg=$item + with_items: + - jenkins + tags: + - packages + + - name: set the hostname to jenkins-osversion + action: command hostname jenkins-master-${dist_tag} + tags: + - config + + - name: mkdir dir for jenkins data + action: file state=directory path=/var/lib/jenkins/plugins/ owner=jenkins group=jenkins + + - name: import jenkins plugins + action: template src=$item owner=jenkins group=jenkins + dest=/var/lib/jenkins/plugins/ + with_fileglob: $files/jenkins/master/plugins/*.hpi + tags: + - config + + - name: import jenkins configuration files + action: template src=$item owner=jenkins group=jenkins dest=/var/lib/jenkins/ + with_fileglob: $files/jenkins/master/*.xml + tags: + - config + + - name: set the jenkins port to 80 instead of 8080 + action: command sed -i -e 's|JENKINS_PORT="8080"|JENKINS_PORT="80"|' /etc/sysconfig/jenkins + tags: + - config + + - name: add jenkins-admin-keys for ssh as root + action: copy src=$files/jenkins/jenkins-admin-keys dest=/root/.ssh/authorized_keys mode=600 backup=true + tags: + - config + + - name: add jenkins ssh priv key so it can connect to clients + action: copy src=$private/files/jenkins/ssh/jenkins_master dest=/root/.ssh/id_rsa mode=600 + tags: + - config + + - name: start jenkins itself + action: service name=jenkins state=running + + + handlers: + - include: $handlers/restart_services.yml + +################################################### +# jenkins slaves + +- name: check/create instance for jenkins-slaves + hosts: jenkins-slaves + user: root + gather_facts: False + + vars_files: + - /srv/web/infra/ansible/vars/global.yml + - ${private}/vars.yml + + tasks: + - include: $tasks/persistent_cloud.yml + +- name: provision master + hosts: jenkins-slaves + user: root + gather_facts: True + + vars_files: + - /srv/web/infra/ansible/vars/global.yml + - ${private}/vars.yml + - ${vars}/${ansible_distribution}.yml + + tasks: + - include: $tasks/cloud_setup_basic.yml + + - include: $tasks/cloud_setup_basic.yml + - name: install pkgs for jenkins + action: yum state=installed pkg=$item + with_items: + - vim + - java-1.7.0-openjdk + - subversion + - bzr + - git + - rpmlint + - rpmdevtools + - mercurial + - mock + - python-bugzilla + - python-straight-plugin + - python-pip + - python-virtualenv + - python-coverage + - pylint + - python-argparse + - python-nose + - python-BeautifulSoup + - python-fedora + - python-unittest2 + - python-pep8 + tags: + - packages + + - name: install pkgs for jenkins for fedora systems + action: yum state=installed pkg=$item + only_if: '$is_fedora' + with_items: + - python3 + - python-nose-cover3 + - python3-nose-cover3 + tags: + - packages + + - 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='$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: template src=$files/jenkins/gitconfig dest=/home/jenkins_slave/.gitconfig owner=jenkins_slave group=jenkins_slave mode=664 + tags: + - config + + - name: template sshd_config + action: template src=$item dest=/etc/ssh/sshd_config mode=0600 owner=root group=root + first_available_file: + - $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 + + - name: add jenkins-admin-keys for ssh'ing as root + action: copy src=$files/jenkins/jenkins-admin-keys dest=/root/.ssh/authorized_keys mode=600 backup=true + tags: + - config + + + handlers: + - include: $handlers/restart_services.yml +