From e54b5a56634cb1d57b32daf7f2720995bb6843e0 Mon Sep 17 00:00:00 2001 From: Chl Date: Fri, 17 Jan 2020 23:35:15 +0100 Subject: [PATCH] First commit --- README.md | 45 + ansible.cfg | 32 + inventory.yml | 16 + roles/jenkins-php-v1/defaults/main.yml | 47 + .../files/jenkins-stable.io.pem | 144 +++ .../files/jenkins-stable.io.pem.readme | 1 + roles/jenkins-php-v1/handlers/main.yml | 11 + roles/jenkins-php-v1/tasks/00_precheck.yml | 24 + .../tasks/10_jenkins-repository.yml | 65 ++ .../tasks/20_install-plugins.yml | 50 + roles/jenkins-php-v1/tasks/30_users.yml | 29 + .../tasks/40_configure-jenkins.yml | 85 ++ roles/jenkins-php-v1/tasks/50_create-jobs.yml | 18 + .../tasks/include_jobinstall.yml | 28 + .../tasks/include_saferestartandwait.yml | 16 + roles/jenkins-php-v1/tasks/main.yml | 41 + roles/jenkins-php-v1/templates/config.xml.j2 | 74 ++ .../templates/credentials.xml.j2 | 21 + .../jenkins-php-v1/templates/jenkins.list.j2 | 2 + ....model.JenkinsLocationConfiguration.xml.j2 | 6 + .../config.xml.17576.2020-01-17@03:26:59~ | 878 ++++++++++++++++++ .../templates/jobs/config.xml.j2 | 718 ++++++++++++++ .../jobs/config.xml.template-php-v1.j2 | 691 ++++++++++++++ site.yml | 5 + 24 files changed, 3047 insertions(+) create mode 100644 README.md create mode 100644 ansible.cfg create mode 100644 inventory.yml create mode 100644 roles/jenkins-php-v1/defaults/main.yml create mode 100644 roles/jenkins-php-v1/files/jenkins-stable.io.pem create mode 100644 roles/jenkins-php-v1/files/jenkins-stable.io.pem.readme create mode 100644 roles/jenkins-php-v1/handlers/main.yml create mode 100644 roles/jenkins-php-v1/tasks/00_precheck.yml create mode 100644 roles/jenkins-php-v1/tasks/10_jenkins-repository.yml create mode 100644 roles/jenkins-php-v1/tasks/20_install-plugins.yml create mode 100644 roles/jenkins-php-v1/tasks/30_users.yml create mode 100644 roles/jenkins-php-v1/tasks/40_configure-jenkins.yml create mode 100644 roles/jenkins-php-v1/tasks/50_create-jobs.yml create mode 100644 roles/jenkins-php-v1/tasks/include_jobinstall.yml create mode 100644 roles/jenkins-php-v1/tasks/include_saferestartandwait.yml create mode 100644 roles/jenkins-php-v1/tasks/main.yml create mode 100644 roles/jenkins-php-v1/templates/config.xml.j2 create mode 100644 roles/jenkins-php-v1/templates/credentials.xml.j2 create mode 100644 roles/jenkins-php-v1/templates/jenkins.list.j2 create mode 100644 roles/jenkins-php-v1/templates/jenkins.model.JenkinsLocationConfiguration.xml.j2 create mode 100644 roles/jenkins-php-v1/templates/jobs/config.xml.17576.2020-01-17@03:26:59~ create mode 100644 roles/jenkins-php-v1/templates/jobs/config.xml.j2 create mode 100644 roles/jenkins-php-v1/templates/jobs/config.xml.template-php-v1.j2 create mode 100644 site.yml diff --git a/README.md b/README.md new file mode 100644 index 0000000..4774b56 --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +**Important : this playbook is quick'n dirty and work in progress. Carefully review before using it.** + +This Ansible playbook aims at setting a Jenkins CI host linked to Gitea repositories. It will : +- install jenkins from pkg.jenkins.io +- install the default JDK +- install the Jenkins plugins requested for the jenkins-php.org templates +- create a jenkins user `gitea` with restricted access just to launch a job +- creates the specified jobs +- install NginX and set up 2 vhost as recommended in https://wiki.jenkins.io/display/JENKINS/Configuring+Content+Security+Policy + +Most of the configuration should be available in the inventory. + +It is launched usually like this : `ansible-playbook site.yml` + +## Prerequisite + +Hosts should be accessible via SSH as the root user (else, add the usual +`remote_user`/`become` instructions in ansible.cfg) and with the Python +prerequisite of Ansible (usually + +Only tested on Debian 10 amd64 so far, with Ansible 2.7.7. + +Note : to test or to limit to one particular host : +``` +ansible foo.bar.com -m ping +ansible-playbook -l foo.bar.com -C -D site.yml +``` + +## Directory layout + +We follow (more or less) the recommendations of +https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html +with : +- `site.yml` : *master playbook* +- `ansible.cfg` and `inventory` : the first one set up some default configurations and introduce the second one : the inventory. +- `roles/common/`, `roles/fooapp/` : the roles with their tree `tasks/main.yml`, `files/`, `handlers/main.yml`, ... +- `group_vars/group1.yml` and `host_vars/hostname1.yml` : variables dedicated to a group or a host respectively. + +Note : contrary to some recommendations, I prefer to set the maximum of variables in the inventory instead of `host_vars` and `group_vars`. For a small playbook like this one, it seems acceptable. + +## TODO + +- stop execution if host is running an untested system ? +- use jenkins-cli to maintain credentials.xml ? It's not really easy to manipulate in Ansible at the moment... +- update plugins, or at least display a warning when they are not up to date. diff --git a/ansible.cfg b/ansible.cfg new file mode 100644 index 0000000..b58ebfe --- /dev/null +++ b/ansible.cfg @@ -0,0 +1,32 @@ +# config file for ansible -- http://ansible.com/ +# ============================================== + +# nearly all parameters can be overridden in ansible-playbook +# or with command line flags. ansible will read ANSIBLE_CONFIG, +# ansible.cfg in the current working directory, .ansible.cfg in +# the home directory or /etc/ansible/ansible.cfg, whichever it +# finds first + +[defaults] + +# some basic default values... + +inventory = ./inventory.yml +#remote_tmp = /tmp/.ansible +remote_user = root +transport = ssh +remote_port = 22 +# We try not to load the hypervisor +forks = 3 + +# For the time being, we don't trigger handlers (for example +# restart SSH after modifying its config) when an error +# happened. +# It is the default Ansible behaviour but I prefer to explicitly +# set it here in case a change is needed later. +force_handlers = False + +#filter_plugins = ./plugins/filter_plugins + +#[privilege_escalation] +#become = True diff --git a/inventory.yml b/inventory.yml new file mode 100644 index 0000000..691d095 --- /dev/null +++ b/inventory.yml @@ -0,0 +1,16 @@ +all: + hosts: + test-jenkins-via-ansible.example.net: + jobs: + template-php-v1: # Job template (deactivated) which can be manually cloned. + foo: + repository_url: ssh://git@code.example.net:2020/foo + deploy_url: demos.xlii.si:/var/www/test1234 # TODO: not implemented yet + bar: + repository_url: ssh://git@code.example.net:2020/bar + vars: + # If you want this playbook to only install Jenkins and let + # him be managed by other means thereafter, you can change this + # variable globally or by host. + # By default : False + jenkins_installonly: False diff --git a/roles/jenkins-php-v1/defaults/main.yml b/roles/jenkins-php-v1/defaults/main.yml new file mode 100644 index 0000000..4ad359e --- /dev/null +++ b/roles/jenkins-php-v1/defaults/main.yml @@ -0,0 +1,47 @@ +--- + +jenkins_home: /var/lib/jenkins +jenkins_cli_jar_location: /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar +#jenkins_updates_url: +#jenkins_plugins_install_dependencies: +jenkins_admin_password_file: "{{ jenkins_home }}/secrets/initialAdminPassword" +jenkins_gitea_password_file: "{{ jenkins_home }}/secrets/giteaAnsiblePassword" +jenkins_cli_command: java -jar "{{ jenkins_cli_jar_location }}" -s http://localhost:8080/ -auth admin:$( cat "{{ jenkins_admin_password_file | quote }}" ) +jenkins_credential_keyid: deploykey1 +jenkins_credential_keydesc: Deploy key n.1 + +jenkins_plugins: + - credentials + - git-client + - ssh + - ant + - ws-cleanup # workspace-cleanup : I prefer to be clean at each build start + # Taken from jenkins-php.org + - checkstyle + - cloverphp + - crap4j + - dry + - htmlpublisher + - jdepend + - plot + - pmd + - violations + - warnings + - xunit + +jenkins_plugins_system_dependency: + - ant + - composer + - php-gd + - php-mysql + - php-pgsql + - php-xdebug # for the code coverage + - mariadb-server + - postgresql + - phpunit # TODO: test if we can use the /vendor one ? + - php-codesniffer + - phploc + - pdepend + - phpmd + - phpcpd + - phpdox diff --git a/roles/jenkins-php-v1/files/jenkins-stable.io.pem b/roles/jenkins-php-v1/files/jenkins-stable.io.pem new file mode 100644 index 0000000..bab880e --- /dev/null +++ b/roles/jenkins-php-v1/files/jenkins-stable.io.pem @@ -0,0 +1,144 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +mQGiBEmFQG0RBACXScOxb6BTV6rQE/tcJopAEWsdvmE0jNIRWjDDzB7HovX6Anrq +n7+Vq4spAReSFbBVaYiiOx2cGDymj2dyx2i9NAI/9/cQXJOU+RPdDzHVlO1Edksp +5rKn0cGPWY5sLxRf8s/tO5oyKgwCVgTaB5a8gBHaoGms3nNC4YYf+lqlpwCgjbti +3u1iMIx6Rs+dG0+xw1oi5FUD/2tLJMx7vCUQHhPRupeYFPoD8vWpcbGb5nHfHi4U +8/x4qZspAIwvXtGw0UBHildGpqe9onp22Syadn/7JgMWhHoFw5Ke/rTMlxREL7pa +TiXuagD2G84tjJ66oJP1FigslJzrnG61y85V7THL61OFqDg6IOP4onbsdqHby4VD +zZj9A/9uQxIn5250AGLNpARStAcNPJNJbHOQuv0iF3vnG8uO7/oscB0TYb8/juxr +hs9GdSN0U0BxENR+8KWy5lttpqLMKlKRknQYy34UstQiyFgAQ9Epncu9uIbVDgWt +y7utnqXN033EyYkcWx5EhLAgHkC7wSzeSWABV3JSXN7CeeOif7QiS29oc3VrZSBL +YXdhZ3VjaGkgPGtrQGtvaHN1a2Uub3JnPohjBBMRAgAjAhsDBgsJCAcDAgQVAggD +BBYCAwECHgECF4AFAko/7vYCGQEACgkQm30y8tUFguabhgCgi54IQR4rpJZ/uUHe +ZB879zUWTQwAniQDBO+Zly7Fsvm0Mcvqvl02UzxCiGAEExECACAFAkmFQG0CGwMG +CwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRCbfTLy1QWC5qtXAJ9hPRisOhkexWXJ +nXQMl9cOTvm4LgCdGint1TONoZ2I4JtOiFzOmeP3ju3RzcvNyQEQAAEBAAAAAAAA +AAAAAAAA/9j/4AAQSkZJRgABAQEAYABgAAD/4QBgRXhpZgAASUkqAAgAAAAEADEB +AgAZAAAAPgAAABBRAQABAAAAAUOQABFRBAABAAAAEgsAABJRBAABAAAAEgsAAAAA +AABNYWNyb21lZGlhIEZpcmV3b3JrcyA0LjAAAP/bAEMACAYGBwYFCAcHBwkJCAoM +FA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0 +Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy +MjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAK4AlgMBIgACEQEDEQH/xAAfAAAB +BQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0B +AgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygp +KjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImK +kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj +5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJ +Cgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGh +scEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZ +WmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1 +tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEA +AhEDEQA/APcBI/8Afb86XzH/AL7fnUYpwqRknmN/fP50u9v7x/OmCgUASb2/vH86 +Xe394/nTBS0AP3t/eP50u4+p/OmUopgO3H1NO3H1NR5xThQA7cfWlyfU0ylFMQ/J +9aXPvTKdQAuaM0lLQAtJmiigAzRSdqKAKApwpopc1mUOpRSUopgKKWkFLQAueKzr +zXbCwk2Tzxq3cFwK8v8Aih8V30aaTQ9DKtegYnuTyIvZR3b+VfP1/q17fzvLc3Ms +sjHJZ2JJNGr2HZdT6j8U/FbR/DcKsM3VxLkpGh6AetcI37Ql4Zcx6LAYx2aUgmvD +1ju7obgJHA7nmmmG4TqjDHtS+ZXL1sfVPhT4yeH/ABFNHaXYbS71zhVnYGNz6B+n +4HFejK2RmvhJJSDiTj6ivYvht8XptE8rSPEEklxpxwkFyTue39j6p+op3a3Javsf +RuacDVaC4juIUmhkWSKRQyspyGB7ipgasgfmlpoNLmgBaKSigBaKM0UAUBS0lKKz +KFFLSUooAdWR4o1qLw/4bvtSmZVEMRK57t2H51rCvJPj7etD4WsbQMQJ7jkDuFBN +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 +=fBn8 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/roles/jenkins-php-v1/files/jenkins-stable.io.pem.readme b/roles/jenkins-php-v1/files/jenkins-stable.io.pem.readme new file mode 100644 index 0000000..5957a71 --- /dev/null +++ b/roles/jenkins-php-v1/files/jenkins-stable.io.pem.readme @@ -0,0 +1 @@ +If you change this file, remember to also change its `id` in the corresponding task. diff --git a/roles/jenkins-php-v1/handlers/main.yml b/roles/jenkins-php-v1/handlers/main.yml new file mode 100644 index 0000000..99bdd90 --- /dev/null +++ b/roles/jenkins-php-v1/handlers/main.yml @@ -0,0 +1,11 @@ +--- + +- name: restart jenkins + service: name=jenkins state=restarted + +- name: safe-restart jenkins + shell: "{{ jenkins_cli_command }} safe-restart" + +# As of now (Ansible 2.7.7), Ansible doesn't support blocks in handlers +- name: safe-restart jenkins and wait + import_tasks: roles/jenkins-php-v1/tasks/include_saferestartandwait.yml diff --git a/roles/jenkins-php-v1/tasks/00_precheck.yml b/roles/jenkins-php-v1/tasks/00_precheck.yml new file mode 100644 index 0000000..b091622 --- /dev/null +++ b/roles/jenkins-php-v1/tasks/00_precheck.yml @@ -0,0 +1,24 @@ +--- + +# Etckeeper is a small fondness of mine, it semi-automatically +# keep track of /etc with git. +# Feel free to remove all this if you'rs not interested. +- name: detect etckeeper presence + shell: "which etckeeper" + ignore_errors: True + register: tmp + changed_when: False + +- name: Set fact about etckeeper presence + set_fact: + etckeeper_installed: "{{ tmp.rc == 0 }}" + +- name: Check that /etc is clean + shell: etckeeper unclean && echo "Uncommitted changes." && return 1 || return 0 + ignore_errors: True # we add a 'fail' task to tell the problem more explictly. + register: tmp + changed_when: False + when: etckeeper_installed +- fail: + msg: "Etckeeper is installed but there is uncommitted changes in /etc." + when: etckeeper_installed and tmp.rc != 0 diff --git a/roles/jenkins-php-v1/tasks/10_jenkins-repository.yml b/roles/jenkins-php-v1/tasks/10_jenkins-repository.yml new file mode 100644 index 0000000..b773613 --- /dev/null +++ b/roles/jenkins-php-v1/tasks/10_jenkins-repository.yml @@ -0,0 +1,65 @@ +--- + +# Add Jenkins repository for Debian +- name: Add Jenkins-stable.io repository key + apt_key: + id: "150FDE3F7787E7D11EF4E12A9B7D32F2D50582E6" + data: "{{ lookup('file', 'jenkins-stable.io.pem') }}" + state: present + register: tmp +- name: New APT sources - commit + command: "etckeeper commit 'apt: Jenkins repository key added by Ansible'" + when: tmp.changed and etckeeper_installed + +- name: Check if /etc/apt/sources.list.d/jenkins.list is managed by ansible + shell: "grep -ic '# This file is managed by Ansible' /etc/apt/sources.list.d/jenkins.list || true" + register: result + changed_when: false +- name: Config /etc/apt/sources.list.d/jenkins.list file + template: + src: "{{ item }}" + dest: /etc/apt/sources.list.d/jenkins.list + owner: root + group: root + mode: 0644 + backup: no + force: "{{ result.stdout is defined and result.stdout == '1' }}" # Only manage the file if the header is present + with_first_found: + - "jenkins.list.{{ ansible_fqdn }}.j2" + - "jenkins.list.j2" + register: tmp +- name: New APT sources - commit + command: "etckeeper commit 'apt: Jenkins repository added/changed by Ansible'" + when: tmp.changed and etckeeper_installed +- name: Update APT cache + apt: + update_cache: yes + when: tmp.changed + +# Install Jenkins +# (note: the Jenkins package doesn't wait for Java to be installed +# before trying to launch itself, so we install them separately) +# (note2: in case we go back downloading the .war, here is a command to +# verify it: jarsigner -verbose -certs -verify /tmp/jenkins.war +- name: Install Java + apt: + name: + - default-jdk + state: present +- name: Install Jenkins package + apt: + name: + - jenkins + state: present + register: result + +- name: Loop until Jenkins is available + get_url: + url: "http://localhost:8080/login" + dest: "/dev/null" + force: True + register: tmp + until: tmp.status_code is defined and tmp.status_code == 200 or result.changed == False + retries: 10 + delay: 5 + changed_when: False diff --git a/roles/jenkins-php-v1/tasks/20_install-plugins.yml b/roles/jenkins-php-v1/tasks/20_install-plugins.yml new file mode 100644 index 0000000..d179293 --- /dev/null +++ b/roles/jenkins-php-v1/tasks/20_install-plugins.yml @@ -0,0 +1,50 @@ +--- + +# Install plugins +# inspired by https://github.com/geerlingguy/ansible-role-jenkins MIT (Expat) / BSD) +# but we couldn't use jenkins_plugin's Ansible module because of crumb (CSRF) problems with our version + +# Get current plugin list +# Warning : it may not be up to date if Jenkins hasn't been restarted after last plugin install +- name: Get the current plugin list + shell: "{{ jenkins_cli_command }} list-plugins | awk '{ print $1 }'" + changed_when: False + check_mode: no + register: current_plugin_list + +## Update Jenkins so that plugin updates don't fail. +#- name: Create Jenkins updates directory. +# file: +# path: "{{ jenkins_home }}/updates" +# state: directory +# owner: jenkins +# group: jenkins +# +#- name: Download current plugin updates from Jenkins update site. +# get_url: +# url: "{{ jenkins_updates_url }}/update-center.json" +# dest: "{{ jenkins_home }}/updates/default.json" +# owner: jenkins +# group: jenkins +# mode: 0440 +# changed_when: false +# register: get_result +# until: get_result is success +# retries: 3 +# delay: 2 +# +#- name: Remove first and last line from json file. +# replace: +# path: "{{ jenkins_home }}/updates/default.json" +# regexp: "1d;$d" + +- name: Install Jenkins plugins. + shell: "{{ jenkins_cli_command }} install-plugin {{ item | quote }}" + with_items: "{{ jenkins_plugins }}" + when: item not in current_plugin_list.stdout_lines + notify: safe-restart jenkins and wait + +- name: Install system package needed by Jenkins plugins + apt: + name: "{{ jenkins_plugins_system_dependency }}" + state: present diff --git a/roles/jenkins-php-v1/tasks/30_users.yml b/roles/jenkins-php-v1/tasks/30_users.yml new file mode 100644 index 0000000..60aa9b7 --- /dev/null +++ b/roles/jenkins-php-v1/tasks/30_users.yml @@ -0,0 +1,29 @@ +--- + +- name: Check if Gitea user has already been created + stat: + path: "{{ jenkins_gitea_password_file }}" + register: result + +- name: Do we have to create the Gitea user + set_fact: + createGiteaUser: "{{ result.stat.exists is undefined or result.stat.exists == False }}" + +- name: Generate a password for the Gitea user + set_fact: + giteaPassword: "{{ lookup('password', '/dev/null chars=ascii_letters') }}" + when: createGiteaUser + +- name: Create Gitea user + shell: echo 'jenkins.model.Jenkins.instance.securityRealm.createAccount("gitea", "{{ giteaPassword | quote }}")' | "{{ jenkins_cli_command }}" groovy = + when: createGiteaUser + +- name: Upload the new password + copy: + content: "{{ giteaPassword }}" + dest: "{{ jenkins_gitea_password_file }}" + owner: jenkins + group: jenkins + mode: 0600 + when: createGiteaUser + #no_log: yes # FIXME: actually, we want to know it to tell the user to set a URL with it in Gitea. Add a debug msg maybe ? diff --git a/roles/jenkins-php-v1/tasks/40_configure-jenkins.yml b/roles/jenkins-php-v1/tasks/40_configure-jenkins.yml new file mode 100644 index 0000000..5e63a34 --- /dev/null +++ b/roles/jenkins-php-v1/tasks/40_configure-jenkins.yml @@ -0,0 +1,85 @@ +--- + +# Needed to write a config.xml which is not changed at each Ansible run +- name: Get current Jenkins version + shell: "{{ jenkins_cli_command }} version" + changed_when: False + check_mode: no + register: result +- name: Set fact about current Jenkins version + set_fact: + current_jenkins_version: "{{ result.stdout_lines[0] }}" + +- name: Upload main config.xml + template: + src: "{{ item }}" + dest: "{{ jenkins_home }}/config.xml" + owner: jenkins + group: jenkins + mode: 0644 + backup: yes + with_first_found: + - "config.xml.{{ ansible_fqdn }}.j2" + - "config.xml.j2" + notify: safe-restart jenkins and wait + +- name: Upload JenkinsLocationConfiguration.xml + template: + src: "{{ item }}" + dest: "{{ jenkins_home }}/jenkins.model.JenkinsLocationConfiguration.xml" + owner: jenkins + group: jenkins + mode: 0644 + backup: yes + with_first_found: + - "jenkins.model.JenkinsLocationConfiguration.xml.{{ ansible_fqdn }}.j2" + - "jenkins.model.JenkinsLocationConfiguration.xml.j2" + notify: safe-restart jenkins and wait + +# Generate a SSH RSA key pair if not already present +# (we do it without the Ansible module which is only available starting 2.8) +# (and we don't use become/become_user because it fails with a permission denied on /tmp/.ansible...) +- name: Generate SSH RSA key pair + command: su -c 'ssh-keygen -q -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""' - jenkins + args: + creates: "{{ jenkins_home }}/.ssh/id_rsa" + #become_user: jenkins # permission denied + #become: yes + register: result +- name: Retrieve the SSH private key + slurp: + src: "{{ jenkins_home }}/.ssh/id_rsa.pub" + register: tmp + when: result.changed +- name: Ouput public key + debug: + msg: "Don't forget to set the public key on the Git repository and the deploy target : {{ tmp.content | b64decode | trim }}" + when: result.changed + +# Upload this new key to the Jenkins credentials plugin system +# (the create/update/import-credential-as-xml is kinda cumbersome for our +# usecase. No way to export the key or get a MD5/SHA256 of it, so we just +# go for the credentials.xml file directly :) +- name: Retrieve the SSH private key + slurp: + src: "{{ jenkins_home }}/.ssh/id_rsa" + register: tmp + no_log: yes +- name: Set fact about SSH key + set_fact: + ssh_private_key: "{{ tmp.content | b64decode | trim }}" + no_log: yes +- name: Upload SSH RSA key pair as credential in Jenkins + template: + src: "{{ item }}" + dest: "{{ jenkins_home }}/credentials.xml" + owner: jenkins + group: jenkins + mode: 0600 + force: yes + backup: yes + with_first_found: + - "credentials.xml.{{ ansible_fqdn }}.j2" + - "credentials.xml.j2" + notify: safe-restart jenkins and wait + #shell: cat /tmp/tmp.xml | java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -s http://localhost:8080/ -auth admin:$( cat /var/lib/jenkins/secrets/initialAdminPassword ) create-credentials-by-xml system::system::jenkins _ diff --git a/roles/jenkins-php-v1/tasks/50_create-jobs.yml b/roles/jenkins-php-v1/tasks/50_create-jobs.yml new file mode 100644 index 0000000..32c4f61 --- /dev/null +++ b/roles/jenkins-php-v1/tasks/50_create-jobs.yml @@ -0,0 +1,18 @@ +--- + +# We need Jenkins to reboot if new plugins were installed. +- meta: flush_handlers + +- name: Get the list of jobs that already exist + shell: "{{ jenkins_cli_command }} list-jobs" + changed_when: False + check_mode: no + register: current_jobs_list + +# Loop on every job we maintain +- name: Manage each job + include_tasks: + file: include_jobinstall.yml + loop: "{{ lookup('dict', jobs ) }}" + loop_control: + loop_var: job diff --git a/roles/jenkins-php-v1/tasks/include_jobinstall.yml b/roles/jenkins-php-v1/tasks/include_jobinstall.yml new file mode 100644 index 0000000..629384c --- /dev/null +++ b/roles/jenkins-php-v1/tasks/include_jobinstall.yml @@ -0,0 +1,28 @@ +--- + +# When the job doesn't exist, we provide an empty XML, and then work +# directly on the jenkins_home/jobs/JOB/config.xml file +- name: Create a empty job + shell: "echo '' | {{ jenkins_cli_command }} create-job {{ job.key | quote }}" + when: job.key not in current_jobs_list.stdout_lines + +- name: Upload job config template + template: + src: "{{ item }}" + # if job exists, we write directly to jobs/JOBNAME/config.xml, else we write to the tmp file. + dest: "{{ jenkins_home + '/jobs/' + job.key + '/config.xml' }}" + mode: 0600 + owner: jenkins + group: jenkins + backup: yes + force: yes + with_first_found: + - "jobs/config.xml.{{ ansible_fqdn }}.{{ job.key }}.j2" + - "jobs/config.xml.{{ job.key }}.j2" + - "jobs/config.xml.{{ ansible_fqdn }}.j2" + - "jobs/config.xml.j2" + register: jobconfig + +- name: Reload the job + shell: "{{ jenkins_cli_command }} reload-job {{ job.key | quote }}" + when: jobconfig.changed diff --git a/roles/jenkins-php-v1/tasks/include_saferestartandwait.yml b/roles/jenkins-php-v1/tasks/include_saferestartandwait.yml new file mode 100644 index 0000000..da50db6 --- /dev/null +++ b/roles/jenkins-php-v1/tasks/include_saferestartandwait.yml @@ -0,0 +1,16 @@ +--- + +- name: safe-restart jenkins and wait (include) + block: + - name: safe-restart jenkins + shell: "{{ jenkins_cli_command }} safe-restart" + - name: Loop until Jenkins is available + get_url: + url: "http://localhost:8080/login" + dest: "/dev/null" + force: True + register: result + until: result.status_code is defined and result.status_code == 200 + retries: 10 + delay: 5 + changed_when: False diff --git a/roles/jenkins-php-v1/tasks/main.yml b/roles/jenkins-php-v1/tasks/main.yml new file mode 100644 index 0000000..fe69c43 --- /dev/null +++ b/roles/jenkins-php-v1/tasks/main.yml @@ -0,0 +1,41 @@ +--- + +# Usually, we only install Jenkins and let it live its life, +# so if it seems to be already installed, we skip this task. +- name: Check if /var/lib/jenkins exists + stat: + path: "{{ jenkins_home }}" + register: result +- name: No going further if jenkinsonlyinstall is set and Jenkins is already installed + set_fact: + gogogo: "{{ jenkins_installonly is undefined or jenkins_installonly == False or result.stat.isdir is undefined or result.stat.isdir == False }}" + +- name: Warning about confidentiality + pause: + prompt: "Warning: this role will manage and display a lot of passwords and keys readable through the Ansible log and the process infos on each host. Sorry..." + seconds: 1 # TODO: 10 + when: gogogo + + +# Pre-check +- include_tasks: roles/jenkins-php-v1/tasks/00_precheck.yml + when: gogogo + +# Install Jenkins via the upstream repository +- include_tasks: roles/jenkins-php-v1/tasks/10_jenkins-repository.yml + when: gogogo + +- include_tasks: roles/jenkins-php-v1/tasks/20_install-plugins.yml + when: gogogo + +# At the moment, groups or roles are kinda overkill +# (but it probably will get back on us at the end...) +- include_tasks: roles/jenkins-php-v1/tasks/30_users.yml + when: gogogo + +# Big configuration step : ACL, SSH keys aka. credentials, etc. +- include_tasks: roles/jenkins-php-v1/tasks/40_configure-jenkins.yml + when: gogogo + +- include_tasks: roles/jenkins-php-v1/tasks/50_create-jobs.yml + when: gogogo diff --git a/roles/jenkins-php-v1/templates/config.xml.j2 b/roles/jenkins-php-v1/templates/config.xml.j2 new file mode 100644 index 0000000..7b394b9 --- /dev/null +++ b/roles/jenkins-php-v1/templates/config.xml.j2 @@ -0,0 +1,74 @@ + + + + {{ current_jenkins_version }} + RUNNING + 1 + NORMAL + true + + com.cloudbees.plugins.credentials.CredentialsProvider.Create:admin + com.cloudbees.plugins.credentials.CredentialsProvider.Delete:admin + com.cloudbees.plugins.credentials.CredentialsProvider.ManageDomains:admin + com.cloudbees.plugins.credentials.CredentialsProvider.Update:admin + com.cloudbees.plugins.credentials.CredentialsProvider.View:admin + hudson.model.Computer.Build:admin + hudson.model.Computer.Configure:admin + hudson.model.Computer.Connect:admin + hudson.model.Computer.Create:admin + hudson.model.Computer.Delete:admin + hudson.model.Computer.Disconnect:admin + hudson.model.Hudson.Administer:admin + hudson.model.Hudson.Read:admin + hudson.model.Hudson.Read:gitea + hudson.model.Item.Build:admin + hudson.model.Item.Build:gitea + hudson.model.Item.Cancel:admin + hudson.model.Item.Configure:admin + hudson.model.Item.Create:admin + hudson.model.Item.Delete:admin + hudson.model.Item.Discover:admin + hudson.model.Item.Read:admin + hudson.model.Item.Read:gitea + hudson.model.Item.Workspace:admin + hudson.model.Item.Workspace:gitea + hudson.model.Run.Delete:admin + hudson.model.Run.Update:admin + hudson.model.View.Configure:admin + hudson.model.View.Create:admin + hudson.model.View.Delete:admin + hudson.model.View.Read:admin + hudson.scm.SCM.Tag:admin + + + true + false + + true + + ${JENKINS_HOME}/workspace/${ITEM_FULL_NAME} + ${ITEM_ROOTDIR}/builds + + + + + + 0 + + + + all + false + false + + + + all + -1 + + + false + + + + \ No newline at end of file diff --git a/roles/jenkins-php-v1/templates/credentials.xml.j2 b/roles/jenkins-php-v1/templates/credentials.xml.j2 new file mode 100644 index 0000000..da3bdc0 --- /dev/null +++ b/roles/jenkins-php-v1/templates/credentials.xml.j2 @@ -0,0 +1,21 @@ + + + + + + + + + + GLOBAL + {{ jenkins_credential_keyid }} + {{ jenkins_credential_keydesc }} + jenkins + + {{ ssh_private_key }} + + + + + + \ No newline at end of file diff --git a/roles/jenkins-php-v1/templates/jenkins.list.j2 b/roles/jenkins-php-v1/templates/jenkins.list.j2 new file mode 100644 index 0000000..d79e302 --- /dev/null +++ b/roles/jenkins-php-v1/templates/jenkins.list.j2 @@ -0,0 +1,2 @@ +# This file is managed by Ansible +deb http://pkg.jenkins.io/debian-stable binary/ diff --git a/roles/jenkins-php-v1/templates/jenkins.model.JenkinsLocationConfiguration.xml.j2 b/roles/jenkins-php-v1/templates/jenkins.model.JenkinsLocationConfiguration.xml.j2 new file mode 100644 index 0000000..baa1ba8 --- /dev/null +++ b/roles/jenkins-php-v1/templates/jenkins.model.JenkinsLocationConfiguration.xml.j2 @@ -0,0 +1,6 @@ + + + + + http://{{ inventory_hostname }}:8080/ + \ No newline at end of file diff --git a/roles/jenkins-php-v1/templates/jobs/config.xml.17576.2020-01-17@03:26:59~ b/roles/jenkins-php-v1/templates/jobs/config.xml.17576.2020-01-17@03:26:59~ new file mode 100644 index 0000000..0432fdf --- /dev/null +++ b/roles/jenkins-php-v1/templates/jobs/config.xml.17576.2020-01-17@03:26:59~ @@ -0,0 +1,878 @@ + + + + <img type="image/svg+xml" height="300" src="ws/build/pdepend/overview-pyramid.svg" width="500"></img> +<img type="image/svg+xml" height="300" src="ws/build/pdepend/dependencies.svg" width="500"></img> + false + + + 2 + + + ssh://gb@code.bugness.org:2020/chl/webcollek-tmp-jenkins + deploykey1 + + + + + */master + + + false + + + + true + false + false + false + + + + false + + + false + + + + + + + + + + low + [WARNINGS] + + true + false + false + false + + + + + + + + + + + + + + + + + + + false + false + true + + + + + + + + PHP Runtime + + + + + + + low + [CHECKSTYLE] + + true + false + false + false + + + + + + + + + + + + + + + + + + + false + false + false + build/logs/checkstyle.xml + + + + + low + [PMD] + + true + false + false + false + + + + + + + + + + + + + + + + + + + false + false + false + build/logs/pmd.xml + + + + + low + [DRY] + + true + false + false + false + + + + + + + + + + + + + + + + + + + false + false + false + build/logs/pmd-cpd.xml + 50 + 25 + + + + + A - Lines of code + Lines of Code + + + build/logs/phploc.csv + + csv + + Lines of Code (LOC) + Non-Comment Lines of Code (NCLOC) + Comment Lines of Code (CLOC) + Logical Lines of Code (LLOC) + + INCLUDE_BY_STRING + Lines of Code (LOC),Comment Lines of Code (CLOC),Non-Comment Lines of Code (NCLOC),Logical Lines of Code (LLOC) + + + Lines of Code (LOC) + Comment Lines of Code (CLOC) + Non-Comment Lines of Code (NCLOC) + Logical Lines of Code (LLOC) + + + + false + + + phploc + 100 + 123.csv + 0 + + false + false + false + false + + + + + B - Structures Containers + Count + + + build/logs/phploc.csv + + csv + + Directories + Namespaces + Files + + INCLUDE_BY_STRING + Directories,Files,Namespaces + + + Directories + Files + Namespaces + + + + false + + + phploc + 100 + 1107599928.csv + 0 + + false + false + false + false + + + + + C - Average Length + Average Lines of Code + + + build/logs/phploc.csv + + csv + + Average Class Length (LLOC) + Average Function Length (LLOC) + Average Method Length (LLOC) + + INCLUDE_BY_STRING + Average Class Length (LLOC),Average Method Length (LLOC),Average Function Length (LLOC) + + + Average Class Length (LLOC) + Average Method Length (LLOC) + Average Function Length (LLOC) + + + + false + + + phploc + 100 + 523405415.csv + 0 + + false + false + false + false + + + + + D - Relative Cyclomatic Complexity + Cyclomatic Complexity by Structure + + + build/logs/phploc.csv + + csv + + Cyclomatic Complexity / Number of Methods + Cyclomatic Complexity / Lines of Code + + INCLUDE_BY_STRING + Cyclomatic Complexity / Lines of Code,Cyclomatic Complexity / Number of Methods + + + Cyclomatic Complexity / Lines of Code + Cyclomatic Complexity / Number of Methods + + + + false + + + phploc + 100 + 186376189.csv + 0 + + false + false + false + false + + + + + E - Types of Classes + Count + + + build/logs/phploc.csv + + csv + + Abstract Classes + Classes + Concrete Classes + + INCLUDE_BY_STRING + Classes,Abstract Classes,Concrete Classes + + + Classes + Abstract Classes + Concrete Classes + + + + false + + + phploc + 100 + 594356163.csv + 0 + + false + false + false + false + + + + + F - Types of Methods + Count + + + build/logs/phploc.csv + + csv + + Static Methods + Methods + Non-Static Methods + Non-Public Methods + Public Methods + + INCLUDE_BY_STRING + Methods,Non-Static Methods,Static Methods,Public Methods,Non-Public Methods + + + Methods + Non-Static Methods + Static Methods + Public Methods + Non-Public Methods + + + + false + + + phploc + 100 + 1019987862.csv + 0 + + false + false + false + false + + + + + G - Types of Constants + Count + + + build/logs/phploc.csv + + csv + + Class Constants + Constants + Global Constants + + INCLUDE_BY_STRING + Constants,Global Constants,Class Constants + + + Constants + Global Constants + Class Constants + + + + false + + + phploc + 100 + 217648577.csv + 0 + + false + false + false + false + + + + + I - Testing + Count + + + build/logs/phploc.csv + + csv + + Test Methods + Test Classes + + INCLUDE_BY_STRING + Test Classes,Test Methods + + + Test Classes + Test Methods + + + + false + + + phploc + 100 + 174807245.csv + 0 + + false + false + false + false + + + + + AB - Code Structure by Logical Lines of Code + Logical Lines of Code + + + build/logs/phploc.csv + + csv + + LLOC outside functions or classes + Classes Length (LLOC) + Logical Lines of Code (LLOC) + Functions Length (LLOC) + + INCLUDE_BY_STRING + Logical Lines of Code (LLOC),Classes Length (LLOC),Functions Length (LLOC),LLOC outside functions or classes + + + Logical Lines of Code (LLOC) + Classes Length (LLOC) + Functions Length (LLOC) + LLOC outside functions or classes + + + + false + + + phploc + 100 + 946905520.csv + 0 + + false + false + false + false + + + + + H - Types of Functions + Count + + + build/logs/phploc.csv + + csv + + Functions + Named Functions + Anonymous Functions + + INCLUDE_BY_STRING + Functions,Named Functions,Anonymous Functions + + + Functions + Named Functions + Anonymous Functions + + + + false + + + phploc + 100 + 1174623854.csv + 0 + + false + false + false + false + + + + + BB - Structure Objects + Count + + + build/logs/phploc.csv + + csv + + Constants + Functions + Interfaces + Traits + Methods + Classes + + INCLUDE_BY_STRING + Interfaces,Traits,Classes,Methods,Functions,Constants + + + Interfaces + Traits + Classes + Methods + Functions + Constants + + + + false + + + phploc + 100 + 1234245913.csv + 0 + + false + false + false + false + + + + + + + true + build/coverage + build/logs/clover.xml + false + + 70 + 80 + + + + + + build/logs/crap4j.xml + + + + + + API Documentation + build/api + index.html + false + + true + false + **/* + true + + + + + + + build/logs/junit.xml + false + true + true + true + + + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + + 3000 + true + + + + + build/logs/jdepend.xml + + + + + + + checkstyle + + checkstyle + 10 + 999 + 999 + false + build/logs/checkstyle.xml + + + + codenarc + + codenarc + 10 + 999 + 999 + false + + + + + cpd + + cpd + 10 + 999 + 999 + false + build/logs/pmd-cpd.xml + + + + cpplint + + cpplint + 10 + 999 + 999 + false + + + + + csslint + + csslint + 10 + 999 + 999 + false + + + + + findbugs + + findbugs + 10 + 999 + 999 + false + + + + + fxcop + + fxcop + 10 + 999 + 999 + false + + + + + gendarme + + gendarme + 10 + 999 + 999 + false + + + + + jcreport + + jcreport + 10 + 999 + 999 + false + + + + + jslint + + jslint + 10 + 999 + 999 + false + + + + + pep8 + + pep8 + 10 + 999 + 999 + false + + + + + perlcritic + + perlcritic + 10 + 999 + 999 + false + + + + + pmd + + pmd + 10 + 999 + 999 + false + build/logs/pmd.xml + + + + pylint + + pylint + 10 + 999 + 999 + false + + + + + simian + + simian + 10 + 999 + 999 + false + + + + + stylecop + + stylecop + 10 + 999 + 999 + false + + + + + 100 + + + default + + + + + + false + + + false + + + \ No newline at end of file diff --git a/roles/jenkins-php-v1/templates/jobs/config.xml.j2 b/roles/jenkins-php-v1/templates/jobs/config.xml.j2 new file mode 100644 index 0000000..9eb61d1 --- /dev/null +++ b/roles/jenkins-php-v1/templates/jobs/config.xml.j2 @@ -0,0 +1,718 @@ + + + <img type="image/svg+xml" height="300" src="ws/build/pdepend/overview-pyramid.svg" width="500"></img> +<img type="image/svg+xml" height="300" src="ws/build/pdepend/dependencies.svg" width="500"></img> + false + + + 2 + + + {{ job.value.repository_url is defined | ternary(job.value.repository_url, '') }} + {{ jenkins_credential_keyid }} + + + + + {{ job.value.branch_spec is defined | ternary(job.value.branch_spec, '*/master') }} + + + false + + + + true + false + false + false + + + + false + + + false + + + + + + + + + + low + [WARNINGS] + + true + false + false + false + + + + + + + + + + + + + + + + + + + false + false + true + + + + PHP Runtime + + + + + + + low + [CHECKSTYLE] + + true + false + + + + + + + + + + + + + + + + + + + false + build/logs/checkstyle.xml + + + + + low + [PMD] + + true + false + + + + + + + + + + + + + + + + + + + false + build/logs/pmd.xml + + + + + low + [DRY] + + true + false + + + + + + + + + + + + + + + + + + + false + build/logs/pmd-cpd.xml + 50 + 25 + + + + + A - Lines of code + Lines of Code + + + build/logs/phploc.csv + + + phploc + 100 + 123.csv + 0 + + false + + + B - Structures Containers + Count + + + build/logs/phploc.csv + + + phploc + 100 + 1107599928.csv + 0 + + false + + + C - Average Length + Average Lines of Code + + + build/logs/phploc.csv + + + phploc + 100 + 523405415.csv + 0 + + false + + + D - Relative Cyclomatic Complexity + Cyclomatic Complexity by Structure + + + build/logs/phploc.csv + + + phploc + 100 + 186376189.csv + 0 + + false + + + E - Types of Classes + Count + + + build/logs/phploc.csv + + + phploc + 100 + 594356163.csv + 0 + + false + + + F - Types of Methods + Count + + + build/logs/phploc.csv + + + phploc + 100 + 1019987862.csv + 0 + + false + + + G - Types of Constants + Count + + + build/logs/phploc.csv + + + phploc + 100 + 217648577.csv + 0 + + false + + + I - Testing + Count + + + build/logs/phploc.csv + + + phploc + 100 + 174807245.csv + 0 + + false + + + AB - Code Structure by Logical Lines of Code + Logical Lines of Code + + + build/logs/phploc.csv + + + phploc + 100 + 946905520.csv + 0 + + false + + + H - Types of Functions + Count + + + build/logs/phploc.csv + + + phploc + 100 + 1174623854.csv + 0 + + false + + + BB - Structure Objects + Count + + + build/logs/phploc.csv + + + phploc + 100 + 1234245913.csv + 0 + + false + + + + + true + build/coverage + build/logs/clover.xml + false + + 70 + 80 + + + + + + build/logs/crap4j.xml + + + + + + API Documentation + build/api + index.html + true + htmlpublisher-wrapper.html + + + + + + + build/logs/junit.xml + true + true + true + + + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + + + build/logs/jdepend.xml + + + + + + + + + + checkstyle + + checkstyle + 10 + 999 + 999 + false + build/logs/checkstyle.xml + + + + codenarc + + codenarc + 10 + 999 + 999 + false + + + + + cpd + + cpd + 10 + 999 + 999 + false + build/logs/pmd-cpd.xml + + + + cpplint + + cpplint + 10 + 999 + 999 + false + + + + + csslint + + csslint + 10 + 999 + 999 + false + + + + + findbugs + + findbugs + 10 + 999 + 999 + false + + + + + fxcop + + fxcop + 10 + 999 + 999 + false + + + + + gendarme + + gendarme + 10 + 999 + 999 + false + + + + + jcreport + + jcreport + 10 + 999 + 999 + false + + + + + jslint + + jslint + 10 + 999 + 999 + false + + + + + pep8 + + pep8 + 10 + 999 + 999 + false + + + + + pmd + + pmd + 10 + 999 + 999 + false + build/logs/pmd.xml + + + + pylint + + pylint + 10 + 999 + 999 + false + + + + + simian + + simian + 10 + 999 + 999 + false + + + + + stylecop + + stylecop + 10 + 999 + 999 + false + + + + + 100 + + + default + + + + + + false + + + false + + + \ No newline at end of file diff --git a/roles/jenkins-php-v1/templates/jobs/config.xml.template-php-v1.j2 b/roles/jenkins-php-v1/templates/jobs/config.xml.template-php-v1.j2 new file mode 100644 index 0000000..ad16338 --- /dev/null +++ b/roles/jenkins-php-v1/templates/jobs/config.xml.template-php-v1.j2 @@ -0,0 +1,691 @@ + + + + <img type="image/svg+xml" height="300" src="ws/build/pdepend/overview-pyramid.svg" width="500"></img> +<img type="image/svg+xml" height="300" src="ws/build/pdepend/dependencies.svg" width="500"></img> + false + + + true + true + false + false + + false + + + + + + + + + + low + [WARNINGS] + + true + false + false + false + + + + + + + + + + + + + + + + + + + false + false + true + + + + PHP Runtime + + + + + + + low + [CHECKSTYLE] + + true + false + + + + + + + + + + + + + + + + + + + false + build/logs/checkstyle.xml + + + + + low + [PMD] + + true + false + + + + + + + + + + + + + + + + + + + false + build/logs/pmd.xml + + + + + low + [DRY] + + true + false + + + + + + + + + + + + + + + + + + + false + build/logs/pmd-cpd.xml + 50 + 25 + + + + + A - Lines of code + Lines of Code + + + build/logs/phploc.csv + + + phploc + 100 + 123.csv + 0 + + false + + + B - Structures Containers + Count + + + build/logs/phploc.csv + + + phploc + 100 + 1107599928.csv + 0 + + false + + + C - Average Length + Average Lines of Code + + + build/logs/phploc.csv + + + phploc + 100 + 523405415.csv + 0 + + false + + + D - Relative Cyclomatic Complexity + Cyclomatic Complexity by Structure + + + build/logs/phploc.csv + + + phploc + 100 + 186376189.csv + 0 + + false + + + E - Types of Classes + Count + + + build/logs/phploc.csv + + + phploc + 100 + 594356163.csv + 0 + + false + + + F - Types of Methods + Count + + + build/logs/phploc.csv + + + phploc + 100 + 1019987862.csv + 0 + + false + + + G - Types of Constants + Count + + + build/logs/phploc.csv + + + phploc + 100 + 217648577.csv + 0 + + false + + + I - Testing + Count + + + build/logs/phploc.csv + + + phploc + 100 + 174807245.csv + 0 + + false + + + AB - Code Structure by Logical Lines of Code + Logical Lines of Code + + + build/logs/phploc.csv + + + phploc + 100 + 946905520.csv + 0 + + false + + + H - Types of Functions + Count + + + build/logs/phploc.csv + + + phploc + 100 + 1174623854.csv + 0 + + false + + + BB - Structure Objects + Count + + + build/logs/phploc.csv + + + phploc + 100 + 1234245913.csv + 0 + + false + + + + + true + build/coverage + build/logs/clover.xml + false + + 70 + 80 + + + + + + build/logs/crap4j.xml + + + + + + API Documentation + build/api + index.html + true + htmlpublisher-wrapper.html + + + + + + + build/logs/junit.xml + true + true + true + + + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + + + build/logs/jdepend.xml + + + + + + + + + + checkstyle + + checkstyle + 10 + 999 + 999 + false + build/logs/checkstyle.xml + + + + codenarc + + codenarc + 10 + 999 + 999 + false + + + + + cpd + + cpd + 10 + 999 + 999 + false + build/logs/pmd-cpd.xml + + + + cpplint + + cpplint + 10 + 999 + 999 + false + + + + + csslint + + csslint + 10 + 999 + 999 + false + + + + + findbugs + + findbugs + 10 + 999 + 999 + false + + + + + fxcop + + fxcop + 10 + 999 + 999 + false + + + + + gendarme + + gendarme + 10 + 999 + 999 + false + + + + + jcreport + + jcreport + 10 + 999 + 999 + false + + + + + jslint + + jslint + 10 + 999 + 999 + false + + + + + pep8 + + pep8 + 10 + 999 + 999 + false + + + + + pmd + + pmd + 10 + 999 + 999 + false + build/logs/pmd.xml + + + + pylint + + pylint + 10 + 999 + 999 + false + + + + + simian + + simian + 10 + 999 + 999 + false + + + + + stylecop + + stylecop + 10 + 999 + 999 + false + + + + + 100 + + + default + + + + + diff --git a/site.yml b/site.yml new file mode 100644 index 0000000..4a17bc8 --- /dev/null +++ b/site.yml @@ -0,0 +1,5 @@ +--- +- name: "Role for Jenkins/CI instances management" + hosts: all + roles: + - jenkins-php-v1