From 4f3e316ff60ce4eadf2cf0094f91ece71236591a Mon Sep 17 00:00:00 2001 From: Olivier Locard Date: Mon, 15 May 2017 18:23:43 +0200 Subject: [PATCH 01/10] Ensure Sonar is running by waiting for Process[web] is up in the log file. --- tasks/main.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index 74e75f7..6cd4d2d 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -57,8 +57,11 @@ - name: Ensure Sonar is running and set to start on boot. service: name=sonar state=started enabled=yes -- name: Allow Sonar time to build on first start. - pause: seconds=180 +- name: Ensure Sonar is started. + wait_for: + path: /usr/local/sonar/logs/sonar.log + delay: 10 + search_regex: 'app\[o\.s\.p\.m\.Monitor\] Process\[web\] is up' when: sonar_symlink.changed - name: Make sure Sonar is responding on the configured port. From 1239d9f090051f266e5dae83a0eae610f7758372 Mon Sep 17 00:00:00 2001 From: Olivier LOCARD Date: Thu, 13 Oct 2016 14:32:17 +0200 Subject: [PATCH 02/10] Improvement: Add install_method - move, copy, symlink. --- README.md | 4 ++++ defaults/main.yml | 3 +++ tasks/main.yml | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/README.md b/README.md index 751564f..62ab34d 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,10 @@ The value of `sonar.web.context`. Setting this to something like `/sonar` allows JDBC settings for a connection to a MySQL database. Defaults presume the database resides on localhost and is only accessible on the SonarQube server itself. + sonar_install_method: "move" + +The way you want the install to be done. By default **move** is a rename of the versionned directory into _sonar_. You can set to **link** to create a symlink _sonar_ targeting the versionned directory. You can set to **copy** to copy the versionned directory into _sonar_ and remove the versionned directory (use case: dedicated filesystem). + ## Dependencies - geerlingguy.java diff --git a/defaults/main.yml b/defaults/main.yml index 695d721..a15676f 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -9,6 +9,9 @@ sonar_version_directory: "sonarqube-{{ sonar_version }}" sonar_web_context: '' +# Default: move - Values: move, copy, link +sonar_install_method: "move" + # MySQL database connection details. sonar_mysql_username: sonar sonar_mysql_password: sonar diff --git a/tasks/main.yml b/tasks/main.yml index 3a7af1c..5b2c391 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -29,6 +29,32 @@ shell: > mv /usr/local/{{ sonar_version_directory }} /usr/local/sonar creates=/usr/local/sonar/COPYING + when: sonar_install_method|lower == 'move' + +- name: Check /usr/local/sonar is a directory. + file: + path: /usr/local/sonar + state: directory + when: (sonar_install_method|lower == 'move' or sonar_install_method|lower == 'copy') + +- name: Copy Sonar into place. + shell: > + cp -r /usr/local/{{ sonar_version_directory }}/* /usr/local/sonar + creates=/usr/local/sonar/COPYING + when: sonar_install_method|lower == 'copy' + +- name: Clean the origin of the copy. + file: + path: /usr/local/{{ sonar_version_directory }} + state: absent + when: sonar_install_method|lower == 'copy' + +- name: Add sonar symlink to the installed version. + file: + src: /usr/local/{{ sonar_version_directory }} + dest: /usr/local/sonar + state: link + when: sonar_install_method|lower == 'link' - include: configure.yml From 653853bdea9953f9fa1d3444d75faebff880e8c5 Mon Sep 17 00:00:00 2001 From: Olivier LOCARD Date: Wed, 13 Jul 2016 16:42:47 +0200 Subject: [PATCH 03/10] Add plugins installation - basics. --- README.md | 6 ++++++ defaults/main.yml | 3 +++ tasks/main.yml | 1 + tasks/plugins.yml | 12 ++++++++++++ 4 files changed, 22 insertions(+) create mode 100644 tasks/plugins.yml diff --git a/README.md b/README.md index 751564f..22c0ec0 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,12 @@ The URL from which SonarQube will be downloaded, and the resulting directory nam The value of `sonar.web.context`. Setting this to something like `/sonar` allows you to set the context where Sonar can be accessed (e.g. `hostname/sonar` instead of `hostname`). + sonar_plugins_dir: /usr/local/sonar/extensions/plugins + sonar_plugins_url: [] + +Directory where downloaded plugins will be installed. +List of the urls where to download each plugin. + sonar_mysql_username: sonar sonar_mysql_password: sonar diff --git a/defaults/main.yml b/defaults/main.yml index 695d721..b2ada7a 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -9,6 +9,9 @@ sonar_version_directory: "sonarqube-{{ sonar_version }}" sonar_web_context: '' +sonar_plugins_dir: /usr/local/sonar/extensions/plugins +sonar_plugins_url: [] + # MySQL database connection details. sonar_mysql_username: sonar sonar_mysql_password: sonar diff --git a/tasks/main.yml b/tasks/main.yml index 3a7af1c..e1e13ac 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -31,6 +31,7 @@ creates=/usr/local/sonar/COPYING - include: configure.yml +- include: plugins.yml - name: Symlink sonar bin. file: diff --git a/tasks/plugins.yml b/tasks/plugins.yml new file mode 100644 index 0000000..5731fee --- /dev/null +++ b/tasks/plugins.yml @@ -0,0 +1,12 @@ +--- +- name: Ensure plugins folder. + file: + path: "{{ sonar_plugins_dir }}" + state: directory + +- name: Install Sonar plugins. + get_url: + url: "{{ item }}" + dest: "{{ sonar_plugins_dir }}" + with_items: "{{ sonar_plugins_url }}" + notify: restart sonar From e2a75cb146af89f52996df78ebf74dc87735ed9c Mon Sep 17 00:00:00 2001 From: Olivier Locard Date: Tue, 23 May 2017 10:35:37 +0200 Subject: [PATCH 04/10] Remove lower of sonar_install_method --- tasks/main.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index 5b2c391..98aed7d 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -29,32 +29,32 @@ shell: > mv /usr/local/{{ sonar_version_directory }} /usr/local/sonar creates=/usr/local/sonar/COPYING - when: sonar_install_method|lower == 'move' + when: sonar_install_method == 'move' - name: Check /usr/local/sonar is a directory. file: path: /usr/local/sonar state: directory - when: (sonar_install_method|lower == 'move' or sonar_install_method|lower == 'copy') + when: (sonar_install_method == 'move' or sonar_install_method == 'copy') - name: Copy Sonar into place. shell: > cp -r /usr/local/{{ sonar_version_directory }}/* /usr/local/sonar creates=/usr/local/sonar/COPYING - when: sonar_install_method|lower == 'copy' + when: sonar_install_method == 'copy' - name: Clean the origin of the copy. file: path: /usr/local/{{ sonar_version_directory }} state: absent - when: sonar_install_method|lower == 'copy' + when: sonar_install_method == 'copy' - name: Add sonar symlink to the installed version. file: src: /usr/local/{{ sonar_version_directory }} dest: /usr/local/sonar state: link - when: sonar_install_method|lower == 'link' + when: sonar_install_method == 'link' - include: configure.yml From 1624c62c870de067fd1494480f033ae7d3dd266a Mon Sep 17 00:00:00 2001 From: Olivier LOCARD Date: Tue, 5 Jul 2016 15:44:32 +0200 Subject: [PATCH 05/10] Add clean workspace. --- tasks/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tasks/main.yml b/tasks/main.yml index 3a7af1c..0a4202c 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -64,3 +64,8 @@ - name: Make sure Sonar is responding on the configured port. wait_for: port=9000 delay=3 timeout=300 + +- name: Clean workspace. + file: + path: "{{ workspace }}/{{ sonar_version_directory }}.zip" + state: absent \ No newline at end of file From 73973298448a13637e467de998be0e3397b89171 Mon Sep 17 00:00:00 2001 From: Olivier LOCARD Date: Tue, 5 Jul 2016 16:45:00 +0200 Subject: [PATCH 06/10] Add task Verify Sonar installation. --- tasks/main.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tasks/main.yml b/tasks/main.yml index 0a4202c..3654da3 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -12,11 +12,16 @@ password: "{{ sonar_mysql_password }}" with_items: "{{ sonar_mysql_allowed_hosts }}" +- name: Verify Sonar installation. + stat: path=/usr/local/sonar/bin/linux-x86-64/sonar.sh + register: sonar_installed + - name: Download Sonar. get_url: url: "{{ sonar_download_url }}" dest: "{{ workspace }}/{{ sonar_version_directory }}.zip" validate_certs: "{{ sonar_download_validate_certs }}" + when: sonar_installed.stat.exists == False - name: Unzip Sonar. unarchive: @@ -68,4 +73,4 @@ - name: Clean workspace. file: path: "{{ workspace }}/{{ sonar_version_directory }}.zip" - state: absent \ No newline at end of file + state: absent From 0aaf05559f111fd91af9396f4653d74c6dcbbfe0 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini Date: Mon, 14 Aug 2017 15:51:58 -0300 Subject: [PATCH 07/10] added postgres support --- defaults/main.yml | 19 +++++++++++++------ meta/main.yml | 3 ++- tasks/configure.yml | 20 +++++--------------- tasks/configure_mysql.yml | 29 +++++++++++++++++++++++++++++ tasks/configure_postgres.yml | 33 +++++++++++++++++++++++++++++++++ tasks/main.yml | 13 ------------- tests/requirements.yml | 2 +- 7 files changed, 83 insertions(+), 36 deletions(-) create mode 100644 tasks/configure_mysql.yml create mode 100644 tasks/configure_postgres.yml diff --git a/defaults/main.yml b/defaults/main.yml index 695d721..9e10730 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -9,14 +9,21 @@ sonar_version_directory: "sonarqube-{{ sonar_version }}" sonar_web_context: '' -# MySQL database connection details. -sonar_mysql_username: sonar -sonar_mysql_password: sonar +# The Database engine. +# possible values: postgres and mysql +sonar_database_engine: postgres + +# Database connection details -sonar_mysql_host: localhost -sonar_mysql_port: "3306" -sonar_mysql_database: sonar +sonar_database_username: sonar +sonar_database_password: sonar +sonar_database_host: localhost +# mysqlsql default port is 3306 and the postgres' is 5432 +sonar_database_port: "5432" +sonar_database_name: sonar + +# MySQL database connection details. sonar_mysql_allowed_hosts: - "127.0.0.1" - "::1" diff --git a/meta/main.yml b/meta/main.yml index 874f041..072584d 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -1,7 +1,8 @@ --- dependencies: - geerlingguy.java - - geerlingguy.mysql + - {role: 'geerlingguy.postgresql', when: sonar_database_engine == 'postgres', become: yes} + - {role: 'geerlingguy.mysql', when: sonar_database_engine == 'mysql'} galaxy_info: author: geerlingguy diff --git a/tasks/configure.yml b/tasks/configure.yml index 8e7900a..232b506 100644 --- a/tasks/configure.yml +++ b/tasks/configure.yml @@ -1,16 +1,6 @@ --- -- name: Configure SonarQube JDBC settings for MySQL. - lineinfile: - dest: /usr/local/sonar/conf/sonar.properties - regexp: "{{ item.regexp }}" - line: "{{ item.line }}" - notify: restart sonar - with_items: - - regexp: "^sonar.jdbc.username" - line: "sonar.jdbc.username={{ sonar_mysql_username }}" - - regexp: "^sonar.jdbc.password" - line: "sonar.jdbc.password={{ sonar_mysql_password }}" - - regexp: "^sonar.jdbc.url" - line: "sonar.jdbc.url=jdbc:mysql://{{ sonar_mysql_host }}:{{ sonar_mysql_port }}/{{ sonar_mysql_database }}?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance" - - regexp: "^sonar.web.context" - line: "sonar.web.context={{ sonar_web_context }}" +- include: configure_mysql.yml + when: sonar_database_engine == "mysql" + +- include: configure_postgres.yml + when: sonar_database_engine == "postgres" \ No newline at end of file diff --git a/tasks/configure_mysql.yml b/tasks/configure_mysql.yml new file mode 100644 index 0000000..ab3bc18 --- /dev/null +++ b/tasks/configure_mysql.yml @@ -0,0 +1,29 @@ +--- +- name: Create a database for Sonar. + mysql_db: + name: "{{ sonar_database_name }}" + state: present + +- name: Create a sonar user. + mysql_user: + name: "{{ sonar_database_username }}" + host: "{{ item }}" + priv: "{{ sonar_database_name }}.*:ALL" + password: "{{ sonar_database_password }}" + with_items: "{{ sonar_mysql_allowed_hosts }}" + +- name: Configure SonarQube JDBC settings for MySQL. + lineinfile: + dest: /usr/local/sonar/conf/sonar.properties + regexp: "{{ item.regexp }}" + line: "{{ item.line }}" + notify: restart sonar + with_items: + - regexp: "^sonar.jdbc.username" + line: "sonar.jdbc.username={{ sonar_database_username }}" + - regexp: "^sonar.jdbc.password" + line: "sonar.jdbc.password={{ sonar_database_password }}" + - regexp: "^sonar.jdbc.url" + line: "sonar.jdbc.url=jdbc:mysql://{{ sonar_database_host }}:{{ sonar_database_port }}/{{ sonar_database_name }}?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance" + - regexp: "^sonar.web.context" + line: "sonar.web.context={{ sonar_web_context }}" \ No newline at end of file diff --git a/tasks/configure_postgres.yml b/tasks/configure_postgres.yml new file mode 100644 index 0000000..bc689ff --- /dev/null +++ b/tasks/configure_postgres.yml @@ -0,0 +1,33 @@ +--- +- name: Create a database for Sonar. + become: yes + become_user: "{{ postgresql_user }}" + postgresql_db: + name: "{{ sonar_database_name }}" + encoding: UTF-8 + state: present + +- name: Create a sonar user. + become: yes + become_user: "{{ postgresql_user }}" + postgresql_user: + name: "{{ sonar_database_username }}" + password: "{{ sonar_database_password }}" + db: "{{ sonar_database_name }}" + priv: "ALL" + +- name: Configure SonarQube JDBC settings for Postgres. + lineinfile: + dest: /usr/local/sonar/conf/sonar.properties + regexp: "{{ item.regexp }}" + line: "{{ item.line }}" + notify: restart sonar + with_items: + - regexp: "^sonar.jdbc.username" + line: "sonar.jdbc.username={{ sonar_database_username }}" + - regexp: "^sonar.jdbc.password" + line: "sonar.jdbc.password={{ sonar_database_password }}" + - regexp: "^sonar.jdbc.url" + line: "sonar.jdbc.url=jdbc:postgresql://{{ sonar_database_host }}:{{ sonar_database_port }}/{{ sonar_database_name }}" + - regexp: "^sonar.web.context" + line: "sonar.web.context={{ sonar_web_context }}" \ No newline at end of file diff --git a/tasks/main.yml b/tasks/main.yml index 3a7af1c..28925be 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,17 +1,4 @@ --- -- name: Create a database for Sonar. - mysql_db: - name: "{{ sonar_mysql_database }}" - state: present - -- name: Create a sonar user. - mysql_user: - name: "{{ sonar_mysql_username }}" - host: "{{ item }}" - priv: "{{ sonar_mysql_database }}.*:ALL" - password: "{{ sonar_mysql_password }}" - with_items: "{{ sonar_mysql_allowed_hosts }}" - - name: Download Sonar. get_url: url: "{{ sonar_download_url }}" diff --git a/tests/requirements.yml b/tests/requirements.yml index 5a495b1..8d526c0 100644 --- a/tests/requirements.yml +++ b/tests/requirements.yml @@ -1,4 +1,4 @@ --- - src: geerlingguy.repo-remi - src: geerlingguy.java -- src: geerlingguy.mysql +- src: geerlingguy.mysql \ No newline at end of file From 7d39733e553184b17dd6d2cbdaa302985290f002 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini Date: Mon, 14 Aug 2017 16:40:09 -0300 Subject: [PATCH 08/10] correcting travisCI tests by adding postgres role as deps --- tests/requirements.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/requirements.yml b/tests/requirements.yml index 8d526c0..9cbad8a 100644 --- a/tests/requirements.yml +++ b/tests/requirements.yml @@ -1,4 +1,5 @@ --- - src: geerlingguy.repo-remi - src: geerlingguy.java -- src: geerlingguy.mysql \ No newline at end of file +- src: geerlingguy.mysql +- src: geerlingguy.postgresql \ No newline at end of file From a025bb9edfbae6ddc7ce95189b54f4d71e6fe653 Mon Sep 17 00:00:00 2001 From: Ricardo Zanini Date: Mon, 14 Aug 2017 16:58:27 -0300 Subject: [PATCH 09/10] setting mysql vars --- tests/test-latest.yml | 2 ++ tests/test-lts.yml | 4 ++++ tests/test-web_context.yml | 2 ++ 3 files changed, 8 insertions(+) diff --git a/tests/test-latest.yml b/tests/test-latest.yml index ea93bec..6e8a5a6 100644 --- a/tests/test-latest.yml +++ b/tests/test-latest.yml @@ -4,6 +4,8 @@ vars: # Latest version of SonarQube, from http://www.sonarqube.org/downloads/ sonar_version: 5.6.1 + sonar_database_engine: "mysql" + sonar_database_port: "3306" pre_tasks: - name: Update apt cache. diff --git a/tests/test-lts.yml b/tests/test-lts.yml index 2c32844..75a5c39 100644 --- a/tests/test-lts.yml +++ b/tests/test-lts.yml @@ -1,6 +1,10 @@ --- - hosts: all + vars: + sonar_database_engine: "mysql" + sonar_database_port: "3306" + pre_tasks: - name: Update apt cache. apt: update_cache=yes cache_valid_time=600 diff --git a/tests/test-web_context.yml b/tests/test-web_context.yml index f0a27f7..c226c26 100644 --- a/tests/test-web_context.yml +++ b/tests/test-web_context.yml @@ -3,6 +3,8 @@ vars: sonar_web_context: "/sonar" + sonar_database_engine: "mysql" + sonar_database_port: "3306" pre_tasks: - name: Update apt cache. From 7b358fba652e334691ab16d9a54f9ef1cc5b62e1 Mon Sep 17 00:00:00 2001 From: Olivier Locard Date: Tue, 16 Jan 2018 16:18:27 +0100 Subject: [PATCH 10/10] Fixes #7 : Add run as user. --- README.md | 8 ++++++++ defaults/main.yml | 2 ++ tasks/configure.yml | 6 ++++++ tasks/main.yml | 19 +++++++++++++++++++ 4 files changed, 35 insertions(+) diff --git a/README.md b/README.md index 751564f..24129d3 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,14 @@ The value of `sonar.web.context`. Setting this to something like `/sonar` allows JDBC settings for a connection to a MySQL database. Defaults presume the database resides on localhost and is only accessible on the SonarQube server itself. + sonar_user: sonar + +Change Sonar default user running Sonar. + + sonar_group: sonar + +Change Sonar default group of the user running Sonar. + ## Dependencies - geerlingguy.java diff --git a/defaults/main.yml b/defaults/main.yml index 695d721..12d04de 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -7,6 +7,8 @@ sonar_version: 4.5.6 sonar_download_url: "https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-{{ sonar_version }}.zip" sonar_version_directory: "sonarqube-{{ sonar_version }}" +sonar_user: sonar +sonar_group: "{{ sonar_user }}" sonar_web_context: '' # MySQL database connection details. diff --git a/tasks/configure.yml b/tasks/configure.yml index 8e7900a..2957d44 100644 --- a/tasks/configure.yml +++ b/tasks/configure.yml @@ -14,3 +14,9 @@ line: "sonar.jdbc.url=jdbc:mysql://{{ sonar_mysql_host }}:{{ sonar_mysql_port }}/{{ sonar_mysql_database }}?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance" - regexp: "^sonar.web.context" line: "sonar.web.context={{ sonar_web_context }}" + +- name: Ensure SonarQube runs as user. + lineinfile: + dest: /usr/local/sonar/bin/linux-x86-64/sonar.sh + regexp: ^#?RUN_AS_USER + line: "RUN_AS_USER={{ sonar_user }}" diff --git a/tasks/main.yml b/tasks/main.yml index 3a7af1c..cdd4590 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,4 +1,16 @@ --- +- name: Ensure sonar group is created. + group: + name: "{{ sonar_group }}" + state: present + +- name: Ensure sonar user is created. + user: + name: "{{ sonar_user }}" + group: "{{ sonar_group }}" + createhome: no + home: /usr/local/sonar + - name: Create a database for Sonar. mysql_db: name: "{{ sonar_mysql_database }}" @@ -55,6 +67,13 @@ mode: 0755 when: "ansible_service_mgr == 'systemd'" +- name: Ensure ownership of SonarQube objects. + file: + path: /usr/local/sonar + owner: "{{ sonar_user }}" + group: "{{ sonar_group }}" + recurse: yes + - name: Ensure Sonar is running and set to start on boot. service: name=sonar state=started enabled=yes