diff --git a/.gitmodules b/.gitmodules index 180a9f7..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +0,0 @@ -[submodule "roles/jenkins"] - path = roles/jenkins - url = https://github.com/geerlingguy/ansible-role-jenkins.git -[submodule "roles/java"] - path = roles/java - url = https://github.com/geerlingguy/ansible-role-java.git diff --git a/roles/java b/roles/java deleted file mode 160000 index 14df32c..0000000 --- a/roles/java +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 14df32ccb7cb6060d3b11e1c702c2741684eda97 diff --git a/roles/java/defaults/main.yml b/roles/java/defaults/main.yml new file mode 100644 index 0000000..014432d --- /dev/null +++ b/roles/java/defaults/main.yml @@ -0,0 +1,6 @@ +--- +# defaults/main.yml +# define default variable values here + +java_packages: + - openjdk-7-jdk diff --git a/roles/java/handlers/main.yml b/roles/java/handlers/main.yml new file mode 100644 index 0000000..78a2b67 --- /dev/null +++ b/roles/java/handlers/main.yml @@ -0,0 +1,9 @@ +--- +# handlers/main.yml +# define handlers here + +#- name: restart +# service: name= state=restarted + +#- name: stop +# service: name= state=stopped diff --git a/roles/java/meta/main.yml b/roles/java/meta/main.yml new file mode 100644 index 0000000..edcec77 --- /dev/null +++ b/roles/java/meta/main.yml @@ -0,0 +1,8 @@ +--- +# meta/main.yml +# define dependancies here + +# dependencies: + # - { role: geerlingguy.java } + +dependencies: [] \ No newline at end of file diff --git a/roles/java/tasks/main.yml b/roles/java/tasks/main.yml new file mode 100644 index 0000000..8b64b3b --- /dev/null +++ b/roles/java/tasks/main.yml @@ -0,0 +1,12 @@ +--- +# tasks/main.yml +# define tasks here + +# install packages +- name: Update apt cache. + apt: update_cache=yes cache_valid_time=86400 + +- name: Ensure Java is installed. + apt: "name={{ item }} state=installed" + with_items: java_packages + diff --git a/roles/java/vars/_extravars.yml b/roles/java/vars/_extravars.yml new file mode 100644 index 0000000..0bee844 --- /dev/null +++ b/roles/java/vars/_extravars.yml @@ -0,0 +1,10 @@ +--- +# vars/_extravars.yml +# define extra variable values here +# this file should be loaded via an include_vars statement in the task. +# often this is used for managing differences in os. + +# Variable setup. +#- name: Include OS-Specific variables +# include_vars: "{{ ansible_os_family }}.yml" + diff --git a/roles/jenkins b/roles/jenkins deleted file mode 160000 index 0b3c51a..0000000 --- a/roles/jenkins +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0b3c51a7933d59e1dde3cbe3d137a157901945ec diff --git a/roles/jenkins/defaults/main.yml b/roles/jenkins/defaults/main.yml new file mode 100644 index 0000000..1a2452b --- /dev/null +++ b/roles/jenkins/defaults/main.yml @@ -0,0 +1,35 @@ +--- +# defaults/main.yml +# define default variable values here + +jenkins_repo_url: deb http://pkg.jenkins-ci.org/debian binary/ +jenkins_repo_key_url: http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key + +jenkins_connection_delay: 5 +jenkins_connection_retries: 60 +jenkins_hostname: localhost +jenkins_port: 8080 +jenkins_jar_location: /opt/jenkins-cli.jar +jenkins_home: /var/lib/jenkins +jenkins_plugins: + - git + - scm-sync-configuration + - ssh + - ansible + - bitbucket-pullrequest-builder + - windows-slaves + - ssh-slaves + - ant + - cloudbees-folder + - role-strategy + - phing + - build-pipeline-plugin + - delivery-pipeline-plugin + - deployment-sphere + - ownership + +jenkins_git_user: jenkins +jenkins_git_email: jenkins@xai-corp.net + + +http_standard_port: 80 \ No newline at end of file diff --git a/roles/jenkins/handlers/main.yml b/roles/jenkins/handlers/main.yml new file mode 100644 index 0000000..e9b24a9 --- /dev/null +++ b/roles/jenkins/handlers/main.yml @@ -0,0 +1,12 @@ +--- +# handlers/main.yml +# define handlers here + +#- name: restart +# service: name= state=restarted + +#- name: stop +# service: name= state=stopped + +- name: restart jenkins + service: name=jenkins state=restarted \ No newline at end of file diff --git a/roles/jenkins/meta/main.yml b/roles/jenkins/meta/main.yml new file mode 100644 index 0000000..2a372b2 --- /dev/null +++ b/roles/jenkins/meta/main.yml @@ -0,0 +1,7 @@ +--- +# meta/main.yml +# define dependancies here + +dependencies: + - {role: java } + - {role: nginx } diff --git a/roles/jenkins/tasks/main.yml b/roles/jenkins/tasks/main.yml new file mode 100644 index 0000000..3ff2eb8 --- /dev/null +++ b/roles/jenkins/tasks/main.yml @@ -0,0 +1,96 @@ +--- +# tasks/main.yml +# define tasks here + +# install packages +- name: Ensure dependencies are installed. + apt: pkg=curl state=installed + +- name: Add Jenkins apt repository key. + apt_key: + url: "{{ jenkins_repo_key_url }}" + state: present + +- name: Add Jenkins apt repository. + apt_repository: + repo: "{{ jenkins_repo_url }}" + state: present + update_cache: yes + +- name: Ensure Jenkins is installed. + apt: pkg=jenkins state=installed + +# start jenkins +- name: Ensure Jenkins is started and runs on startup. + service: name=jenkins state=started enabled=yes + +- name: Wait for Jenkins to start up. + shell: curl --head --silent http://{{ jenkins_hostname }}:8080/cli/ + register: result + until: result.stdout.find("200 OK") != -1 + retries: "{{ jenkins_connection_retries }}" + delay: "{{ jenkins_connection_delay }}" + changed_when: false + +# install cli +- name: Get the jenkins-cli jarfile from the Jenkins server. + get_url: + url: "http://{{ jenkins_hostname }}:8080/jnlpJars/jenkins-cli.jar" + dest: "{{ jenkins_jar_location }}" + register: jarfile_get + until: "'OK' in jarfile_get.msg or 'file already exists' in jarfile_get.msg" + retries: 5 + delay: 10 + +# - name: Copy ssh key for authentication + # copy: src={ HOME }/.ssh/jenkins.pub dest="/var/lib/jenkins/.ssh/" + +# configure jenkins +# - name: Update jenkins config + # lineinfile: dest=/var/lib/jenkins/config.xml regexp={{ item.reg }} line={{ item.line }} + # with_items: + # - {"reg": ".*", "line": "false"} + +# setup .gitconfig +- name: Setup .gitconfig for jenkins user + template: dest="{{ jenkins_home }}/.gitconfig" src="gitconfig.j2" owner="jenkins" group="jenkins" + +# update and install plugins +- name: Create Jenkins updates folder. + file: + path: /var/lib/jenkins/updates + owner: jenkins + group: jenkins + mode: 0755 + state: directory + +- name: Update Jenkins plugin data. + shell: > + curl -L https://updates.jenkins-ci.org/update-center.json | sed '1d;$d' > /var/lib/jenkins/updates/default.json + creates=/var/lib/jenkins/updates/default.json + +- name: Permissions for default.json updates info. + file: + path: /var/lib/jenkins/updates/default.json + owner: jenkins + group: jenkins + mode: 0755 + +- name: Install Jenkins plugins. + command: > + java -jar {{ jenkins_jar_location }} -s http://{{ jenkins_hostname }}:8080/ install-plugin {{ item }} + creates=/var/lib/jenkins/plugins/{{ item }}.jpi + with_items: jenkins_plugins + notify: restart jenkins + +- name: setup folder for jenkins slave on localhost + file: state=directory path=/var/lib/jenkins-slave owner=jenkins group=jenkins mode=0777 + +# install nginx as proxy +- name: Copy the nginx configuration file + template: src=nginx.jenkins.conf.j2 dest=/etc/nginx/sites-available/jenkins.conf + +- name: Enable Jenkins Nginx configuration + file: src=/etc/nginx/sites-available/jenkins.conf dest=/etc/nginx/sites-enabled/jenkins.conf state=link + notify: + - reload nginx diff --git a/roles/jenkins/templates/gitconfig.j2 b/roles/jenkins/templates/gitconfig.j2 new file mode 100644 index 0000000..1823025 --- /dev/null +++ b/roles/jenkins/templates/gitconfig.j2 @@ -0,0 +1,3 @@ +[user] + email = {{ jenkins_git_user }} + name = {{ jenkins_git_user }} \ No newline at end of file diff --git a/roles/jenkins/templates/nginx.jenkins.conf.j2 b/roles/jenkins/templates/nginx.jenkins.conf.j2 new file mode 100644 index 0000000..dfbdded --- /dev/null +++ b/roles/jenkins/templates/nginx.jenkins.conf.j2 @@ -0,0 +1,56 @@ +server { + listen {{ http_standard_port }}; + + server_name {{ jenkins_hostname }}; + + access_log /var/log/nginx/jenkins_access.log; + error_log /var/log/nginx/jenkins_error.log; + + location /userContent { + # Have nginx handle all the static requests to the userContent folder files + # NOTE: This is the $JENKINS_HOME dir + root /var/lib/jenkins/; + if (!-f $request_filename){ + # This file does not exist, might be a directory or a /**view** url + rewrite (.*) /$1 last; + break; + } + sendfile on; + } + + location @jenkins { + sendfile off; + proxy_pass http://127.0.0.1:{{ jenkins_port }}; + proxy_redirect default; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_max_temp_file_size 0; + + # This is the maximum upload size + client_max_body_size 10m; + client_body_buffer_size 128k; + + proxy_connect_timeout 90; + proxy_send_timeout 90; + proxy_read_timeout 90; + + proxy_buffer_size 4k; + proxy_buffers 4 32k; + proxy_busy_buffers_size 64k; + proxy_temp_file_write_size 64k; + } + + location / { + # This is the jenkins web root directory (mentioned in the /etc/default/jenkins file) + root /var/run/jenkins/war/; + + # Optional configuration to detect and redirect iPhones + if ($http_user_agent ~* '(iPhone|iPod)') { + rewrite ^/$ /view/iphone/ redirect; + } + + try_files $uri @jenkins; + } +} \ No newline at end of file diff --git a/roles/jenkins/vars/_extravars.yml b/roles/jenkins/vars/_extravars.yml new file mode 100644 index 0000000..0bee844 --- /dev/null +++ b/roles/jenkins/vars/_extravars.yml @@ -0,0 +1,10 @@ +--- +# vars/_extravars.yml +# define extra variable values here +# this file should be loaded via an include_vars statement in the task. +# often this is used for managing differences in os. + +# Variable setup. +#- name: Include OS-Specific variables +# include_vars: "{{ ansible_os_family }}.yml" +