Version information
This version is compatible with:
- Puppet Enterprise >=3.0.0 <4.0.0
- Puppet >=3.4.0 <4.0.0
- , , , , ,
Start using this module
Add this module to your Puppetfile:
mod 'mkrakowitzer-jira', '999.999.999'
Learn more about managing modules with a PuppetfileDocumentation
#JIRA Module
:warning: This module has moved to the puppet-community namespace on github and the puppet namespace on puppetforge.
https://forge.puppetlabs.com/puppet
https://github.com/puppet-community/puppet-jira
####Table of Contents
- Overview
- Module Description - What the module does and why it is useful
- Setup - The basics of getting started with JIRA
- Usage - Configuration options and additional functionality
- Reference - An under-the-hood peek at what the module is doing and how
- Limitations - OS compatibility, etc.
- Development - Guide for contributing to the module
- Testing - How to test the JIRA module
- Contributors
##Overview
This module allows you to install, upgrade and manage Atlassian JIRA.
##Module Description
This module installs/upgrades Atlassian's Enterprise Issue Tracking and project management tool. The JIRA module also manages the JIRA configuration files with Puppet.
##Setup
-
JIRA requires a Java Developers Kit (JDK) or Java Run-time Environment (JRE) platform to be installed on your server's operating system. Oracle JDK / JRE (formerly Sun JDK / JRE) versions 7 and 8 are currently supported by Atlassian.
-
JIRA requires a relational database to store its issue data. This module currently supports PostgreSQL 8.4 to 9.x and MySQL 5.x and Oracle 11g and Microsoft SQL Server 2008 & 2012. We suggest using puppetlabs-postgresql/puppetlabs-mysql modules to configure/manage the database. The module uses PostgreSQL as a default.
-
Whilst not required, for production use we recommend using nginx/apache as a reverse proxy to JIRA. We suggest using the jfryman/nginx puppet module.
If installing to an existing JIRA instance, it is your responsibility to backup your database. We also recommend that you backup your JIRA home directory and that you align your current JIRA version with the version you intend to use with puppet JIRA module.
You must have your database setup with the account user that JIRA will use. This can be done using the puppetlabs-postgresql and puppetlabs-mysql modules.
When using this module to upgrade JIRA, please make sure you have a database/JIRA home backup.
When using MySQL, We call the jira::mysql_connector class to install the MySQL java connector directory from mysql.com as per Atlassian's documented recommendations.
This puppet module will automatically download the JIRA zip from Atlassian and extracts it into /opt/jira/atlassian-jira-$version. The default JIRA home is /home/jira.
If you would prefer to use Hiera then see jira.yaml file for available options.
#####Basic example
class { 'jira':
javahome => '/opt/java',
}
A complete example with postgres/nginx/JIRA is available here.
######Upgrades to JIRA
Jira can be upgraded by incrementing this version number. This will STOP the running instance of Jira and attempt to upgrade. You should take caution when doing large version upgrades. Always backup your database and your home directory. The jira::facts class is required for upgrades.
class { 'jira':
javahome => '/opt/java',
version => '6.3.7',
}
class { 'jira::facts': }
######Upgrades to the JIRA puppet Module mkrakowitzer-deploy has been replaced with nanliu-staging as the default module for deploying the JIRA binaries. You can still use mkrakowitzer-deploy with the staging_or_deploy => 'deploy'
class { 'jira':
javahome => '/opt/java',
staging_or_deploy => 'deploy',
}
##Reference
###Classes
####Public Classes
jira
: Main class, manages the installation and configuration of JIRAjira::facts
: Enable external facts for running instance of JIRA. This class is required to handle upgrades of jira. As it is an external fact, we chose not to enable it by default.
####Private Classes
jira::install
: Installs JIRA binariesjira::config
: Modifies jira/tomcat configuration filesjira::service
: Manage the JIRA service.jira::mysql_connector
: Install/Manage the MySQL Java connector
###Parameters
####JIRA parameters####
#####$version
Specifies the version of JIRA to install, defaults to latest available at time of module upload to the forge. It is recommended to pin the version number to avoid unnecessary upgrades of JIRA.
#####$product
Product name, defaults to jira
#####$format
The default file format of the JIRA install file, defaults to tar.gz
#####$installdir
The directory to install to, defaults to '/opt/jira'
#####$homedir
The default home directory of JIRA, defaults to '/home/jira'
#####$user
The user to run/install JIRA as, defaults to 'jira'
#####$group
The group to run/install JIRA as, defaults to 'jira'
#####$uid
The uid of the JIRA user, defaults to next available (undef)
#####$gid
The gid of the JIRA user, defaults to next available (undef)
#####$shell
The shell of the JIRA user, defaults to '/bin/true'
####database parameters####
#####$db
Which database to use for JIRA, defaults to 'postgresql'. Can be 'postgresql', 'mysql', 'oracle' or 'sqlserver'.
#####$dbuser
The default database user for JIRA, defaults to 'jiraadm'
#####$dbpassword
The password for the database user, defaults to 'mypassword'
#####$dbserver
The hostname of the database server, defaults to 'localhost'
#####$dbname
The name of the database, defaults to 'jira'. If using oracle this should be the SID.
#####$dbport
The port of the database, defaults to '5432'. MySQL runs on '3306'. Oracle runs on '1521'. SQL Server runs on '1433'.
#####$dbdriver
The database driver to use, defaults to 'org.postgresql.Driver'. Can be 'org.postgresql.Driver', 'com.mysql.jdbc.Driver', 'oracle.jdbc.OracleDriver' or 'net.sourceforge.jtds.jdbc.Driver'.
#####$dbtype
Database type, defaults to 'postgres72'. Can be 'postgres72', 'mysql', 'oracle10g', or 'mssql'. Atlassian only supports Oracle 11g, even so this value should be as documented here.
#####$poolsize
The connection pool size to the database, defaults to 20
#####$dburl
This parameter is not required nor do we recommend setting it. However it can be used to customize the database connection string.
#####$enable_connection_pooling
Configure database settings if you are pooling connections, defaults to 'false'
#####$poolMinSize
defaults to 20
#####$poolMaxSize
defaults to 20
#####$poolMaxWait
defaults to 30000
#####$validationQuery
defaults to undef
#####$minEvictableIdleTime
defaults to 60000
#####$timeBetweenEvictionRuns
defaults to undef
#####$poolMaxIdle
defaults to 20
#####$poolRemoveAbandoned
defaults to true
#####$poolRemoveAbandonedTimout
defaults to 300
#####$poolTestWhileIdle
defaults to true
#####$poolTestOnBorrow
defaults to true
####MySQL Java Connector parameters####
#####mysql_connector_manage
Manage the MySQL Java Connector with the JIRA module, defaults to 'true'
#####mysql_connector_version
Specifies the version of MySQL Java Connector you would like installed. Defaults to '5.1.34',
#####$mysql_connector_product
Product name, defaults to 'mysql-connector-java'
#####$mysql_connector_format
The default file format of the MySQL Java Connector install file, defaults to tar.gz
#####$mysql_connector_install
Installation directory of the MySQL connector. Defaults to '/opt/MySQL-connector'
#####$mysql_connector_URL
The URL used to download the MySQL Java Connector installation file.
Defaults to 'http://cdn.mysql.com/Downloads/Connector-J'
####JVM Java parameters####
#####$javahome
The JAVA_HOME directory, defaults to undef. This is a required parameter
#####$jvm_xms
The initial memory allocation pool for a Java Virtual Machine. defaults to '256m'
#####$jvm_xmx
Maximum memory allocation pool for a Java Virtual Machine. defaults to '1024m'
#####$jvm_permgen
Increase max permgen size for a Java Virtual Machine. defaults to '256m'
#####$jvm_optional
defaults to '-XX:-HeapDumpOnOutOfMemoryError'
#####$java_opts
defaults to ''
####Miscellaneous parameters####
#####$downloadURL
The URL used to download the JIRA installation file. Defaults to 'http://www.atlassian.com/software/jira/downloads/binary/'
#####$staging_or_deploy
Choose whether to use nanliu-staging, or mkrakowitzer-deploy. Defaults to 'staging' to use nanliu-staging as it is puppetlabs approved. Alternative option is 'deploy' to use mkrakowitzer-deploy.
#####$service_manage
Manage the JIRA service, defaults to 'true'
#####$service_ensure
Manage the JIRA service, defaults to 'running'
#####$service_enable
Defaults to 'true'
#####$service_subscribe
Restart the jira service in response to this subscription
#####$service_notify
Notify other puppet resources to refresh after the jira service
#####$stop_jira
If the jira service is managed outside of puppet the stop_jira parameter can be used to shut down jira for upgrades. Defaults to 'service jira stop && sleep 15'
#####$proxy = {}
Defaults to {}, See examples on how to use.
#####$contextpath = ""
Defaults to an empty string (""). Will add a path to the Tomcat Server Context.
####Tomcat parameters####
#####$tomcatAddress
IP address to listen on. Defaults to all addresses.
#####$tomcatPort
Port to listen on, defaults to 8080,
#####$tomcatMaxThreads
Defaults to '150'
#####$tomcatAcceptCount
Defaults to '100'
##Usage
####A more complex example
class { 'jira':
version => '6.0.1',
installdir => '/opt/atlassian-jira',
homedir => '/opt/atlassian-jira/jira-home',
user => 'jira',
group => 'jira',
dbpassword => 'secret',
dbserver => 'localhost',
javahome => '/opt/java/jdk1.7.0_21/',
downloadURL => 'http://myserver/pub/development-tools/atlassian/',
}
A Hiera example
This example is used in production for 2000 users in an traditional enterprise environment. Your mileage may vary. The dbpassword can be stored using eyaml hiera extension.
jira::version: '6.2.7'
jira::installdir: '/opt/atlassian/atlassian-jira'
jira::homedir: '/opt/atlassian/application-data/jira-home'
jira::user: 'jira'
jira::group: 'jira'
jira::shell: '/bin/bash'
jira::dbserver: 'dbvip.example.co.za'
jira::javahome: '/opt/java'
jira::java_opts: >
-Dhttp.proxyHost=proxy.example.co.za
-Dhttp.proxyPort=8080
-Dhttps.proxyHost=proxy.example.co.za
-Dhttps.proxyPort=8080
-Dhttp.nonProxyHosts=localhost\|127.0.0.1\|172.*.*.*\|10.*.*.*
-XX:+UseLargePages'
jira::dbport: '5439'
jira::dbuser: 'jira'
jira::jvm_xms: '1G'
jira::jvm_xmx: '3G'
jira::jvm_permgen: '384m'
jira::service_manage: false
jira::enable_connection_pooling: 'true'
jira::env:
- 'http_proxy=proxy.example.co.za:8080'
- 'https_proxy=proxy.example.co.za:8080'
jira::proxy:
scheme: 'https'
proxyName: 'jira.example.co.za'
proxyPort: '443'
jira::contextpath: '/jira'
Reverse proxy can be configured as a hash as part of the JIRA resource
proxy => {
scheme => 'https',
proxyName => 'www.example.com',
proxyPort => '443',
},
Enable external facts for puppet version. These facts are required to be enabled in order to upgrade to new JIRA versions smoothly.
class { 'jira::facts': }
##Limitations
- Puppet 3.4+
- Puppet Enterprise
The puppetlabs repositories can be found at: http://yum.puppetlabs.com/ and http://apt.puppetlabs.com/
-
RedHat 6/7
-
CentOS 6/7
-
Scientific 6/7
-
Oracle Linux 6/7
-
Ubuntu 12.04/14.04
-
Debian 7
-
PostgreSQL
-
MySQL 5.x
-
Oracle 11G with Oracle 11.2.x drivers
-
Microsoft SQL Server 2005/2008/2012 with JTDS driver (included in non-WAR version)
We plan to support other Linux distributions and possibly Windows in the near future.
##Development
Please feel free to raise any issues here for bug fixes. We also welcome feature requests. Feel free to make a pull request for anything and we make the effort to review and merge. We prefer with tests if possible.
##Testing - How to test the JIRA module Using puppetlabs_spec_helper. Simply run:
bundle install && bundle exec rake spec
to get results.
ruby-1.9.3-p484/bin/ruby -S rspec spec/classes/jira_install_spec.rb --color
.
Finished in 0.38159 seconds
1 example, 0 failures
Using Beaker - Puppet Labs cloud enabled acceptance testing tool..
The beaker tests will install oracle Java to /opt/java. When running the beaker tests you agree that you accept the oracle java license.
bundle install
BEAKER_set=ubuntu-server-12042-x64 bundle exec rake beaker
BEAKER_set=ubuntu-server-1404-x64 bundle exec rake beaker
BEAKER_set=debian-73-x64 bundle exec rake beaker
BEAKER_set=centos-64-x64 bundle exec rake beaker
BEAKER_set=centos-70-x64 bundle exec rake beaker
BEAKER_set=centos-64-x64-pe bundle exec rake beaker
To save build time it is useful to host the installation files locally on a web server. You can use the download_url environment variable to overwrite the default.
export download_url="'http://my.local.server/'"
##Contributors
The list of contributors can be found here
:warning: This module has moved to the puppet-community namespace on github and the puppet namespace on puppetforge.
:warning: mkrakowitzer-deploy support will be dropped next major release. It will be replaced by nanlui-archive.
:warning: The jira::facts class will be included by default in next major release. You may get a Error: Duplicate declaration: Class[jira::facts] is already declared
##2014-04-16 - Release 1.2.0
- Issue #51 Make the jira users shell configurable
- Add a notify and subscribe options to the jira service
- Added oracle to db input validator
- Turn on the AJP connector based on a hiera or puppet-variable lookup
- Added Microsoft SQL Server support
- Include jira::facts class by default.
- Adding new feature generating a content.xml configuration
- Add a notify and subscribe options to the jira service
- Provide ability to set the bind address of Tomcat via the jira::tomcatAddress parameter
- Bump jira version to 6.4.1
Thanks to Scott Searcy, Oliver Bertuch, Paul Geringer, Eric Shamow, William Lieurance, Doug Neal for their contributions.
##2014-01-21 - Release 1.1.5
- Add beaker tests for MySQL
- Added support for Oracle and Scientific Linux
- Bump jira version to 6.3.13
- Add support for parameter 'contextpath'
- Add class to install MySQL Java connector from mysql.com
- Add support for oracle database
Thanks to Oliver Bertuch for his contributions.
##2014-01-17 - Release 1.1.4
- Parameterize the lockfile variable in the init script
- Autoinstall MySql Connector/J Driver
- Add parameter stop_jira
- Fix bug on RHEL7 where updating the systemd script does not take effect without refreshing systemd
Thanks to MasonM for his contributions
##2014-11-17 - Release 1.1.3
- Refactor beaker tests to that they are portable and other people can run them
- Remove unnecessary comments from init.pp
- Dont cleanup jira tar.gz file when using staging module.
- Add/Remove beaker nodesets
- Add CentOS 7 nodeset
- Remove ubuntu 1004 and Debian 6 nodeset
- Add support for systemd style init script on RedHat/CentOS 7
##2014-10-19 - Release 1.1.2
- Add new parameter: jvm_permgen, defaults to 256m.
- Updates to readme
##2014-10-11 - Release 1.1.1
- Fix typo of in module nanliu-staging, preving module from being installed
##2014-10-09 - Release 1.1.0
- Add beaker tests for Ubuntu/Centos/Debian
- Issue #3 Handle updating of Jira
###Summary Resolve Issue #29
- Add external fact for running version of JIRA.
- Replace mkrakowitzer-deploy with nanliu-staging as the default module to deploy jira files
##2014-10-01 - Release 1.0.1
###Summary Update the README file to comply with puppetlabs standards
- https://docs.puppetlabs.com/puppet/latest/reference/modules_documentation.html
- https://docs.puppetlabs.com/puppet/latest/reference/READMEtemplate.markdown
####Bugfixes
- None
Dependencies
- puppetlabs/stdlib (>= 3.0.0)
- mkrakowitzer/deploy (>= 0.0.3)
- nanliu/staging (>= 1.0.0)
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.