{"componentChunkName":"component---src-templates-plugin-documentation-jsx","path":"/custom-tools-plugin/","result":{"data":{"jenkinsPlugin":{"id":"6e897518-2494-5b2a-9089-c1677aba14a5","gav":"com.cloudbees.jenkins.plugins:custom-tools-plugin:0.8","hasBomEntry":false,"title":"Custom Tools","url":"https://updates.jenkins.io/download/plugins/custom-tools-plugin/0.8/custom-tools-plugin.hpi","version":"0.8","wiki":{"childHtmlRehype":{"html":"<div id=\"plugin-content-readme\" class=\"md\" data-path=\"README.md\">\n <article class=\"markdown-body entry-content container-lg\" itemprop=\"text\">\n  <div class=\"markdown-heading\" dir=\"auto\">\n   \n  </div> \n  <p dir=\"auto\"><a href=\"https://plugins.jenkins.io/custom-tools-plugin\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/86d94f97bacd9d37d1b0c6b16a196889ee4dfadbe742c6ab4d980cef40dc562e/68747470733a2f2f696d672e736869656c64732e696f2f6a656e6b696e732f706c7567696e2f762f637573746f6d2d746f6f6c732d706c7567696e2e737667\" alt=\"Jenkins Plugin\" data-canonical-src=\"https://img.shields.io/jenkins/plugin/v/custom-tools-plugin.svg\" style=\"max-width: 100%;\"></a> <a href=\"https://github.com/jenkinsci/custom-tools-plugin/releases/latest\"><img src=\"https://camo.githubusercontent.com/1fcadd8c01731c9fe5861e94ab9aee1a8e0cda7a8416f1a97fbabecee7403ad9/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6a656e6b696e7363692f637573746f6d2d746f6f6c732d706c7567696e2e7376673f6c6162656c3d6368616e67656c6f67\" alt=\"GitHub release\" data-canonical-src=\"https://img.shields.io/github/release/jenkinsci/custom-tools-plugin.svg?label=changelog\" style=\"max-width: 100%;\"></a> <a href=\"https://plugins.jenkins.io/custom-tools-plugin\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/6eb68432fff2f5a69b30785d4fae7d7444e3510a11c25b8889da38adf4500887/68747470733a2f2f696d672e736869656c64732e696f2f6a656e6b696e732f706c7567696e2f692f637573746f6d2d746f6f6c732d706c7567696e2e7376673f636f6c6f723d626c7565\" alt=\"Jenkins Plugin Installs\" data-canonical-src=\"https://img.shields.io/jenkins/plugin/i/custom-tools-plugin.svg?color=blue\" style=\"max-width: 100%;\"></a></p> \n  <p dir=\"auto\">A generic tool installer. You define how tools get installed, and the plugin will automatically install them when needed.</p> \n  <div class=\"markdown-heading\" dir=\"auto\">\n   <h2 class=\"heading-element\" dir=\"auto\" id=\"plugin-content-overview\" style=\"position: relative\">Overview<a href=\"#plugin-content-overview\" aria-label=\"overview permalink\" class=\"anchor after\"><ion-icon name=\"link-outline\"></ion-icon></a></h2>\n   \n  </div> \n  <p dir=\"auto\">A job will often require a tool not already installed on your Jenkins agents. In large environments, this often results in waiting on an administrator. The goal of this plugin is to let users manage their own tools, without requiring this administrator involvement.</p> \n  <p dir=\"auto\">Using this plugin, you can define a script (or just a URL) for installing a tool using standard Jenkins <a href=\"https://jenkins.io/doc/developer/extensions/jenkins-core/#toolinstaller\" rel=\"nofollow\">Tool Installers</a>. Plugins like <a href=\"https://plugins.jenkins.io/extra-tool-installers\" rel=\"nofollow\">Extra Tool Installers</a> can be also used in this plugin. You then define which jobs require the tool, and the plugin installs them as needed before the build runs.</p> \n  <div class=\"markdown-heading\" dir=\"auto\">\n   <h2 class=\"heading-element\" dir=\"auto\" id=\"plugin-content-changelog\" style=\"position: relative\">Changelog<a href=\"#plugin-content-changelog\" aria-label=\"changelog permalink\" class=\"anchor after\"><ion-icon name=\"link-outline\"></ion-icon></a></h2>\n   \n  </div> \n  <ul dir=\"auto\"> \n   <li>See <a href=\"https://github.com/jenkinsci/custom-tools-plugin/releases\">GitHub Releases</a> for version 0.7 and above</li> \n   <li>See the <a href=\"https://wiki.jenkins.io/display/JENKINS/Custom+Tools+Plugin\" rel=\"nofollow\">Plugin Wiki</a> for older releases</li> \n  </ul> \n  <div class=\"markdown-heading\" dir=\"auto\">\n   <h2 class=\"heading-element\" dir=\"auto\" id=\"plugin-content-usage\" style=\"position: relative\">Usage<a href=\"#plugin-content-usage\" aria-label=\"usage permalink\" class=\"anchor after\"><ion-icon name=\"link-outline\"></ion-icon></a></h2>\n   \n  </div> \n  <div class=\"markdown-heading\" dir=\"auto\">\n   <h3 class=\"heading-element\" dir=\"auto\" id=\"plugin-content-defining-tools\" style=\"position: relative\">Defining tools<a href=\"#plugin-content-defining-tools\" aria-label=\"defining tools permalink\" class=\"anchor after\"><ion-icon name=\"link-outline\"></ion-icon></a></h3>\n   \n  </div> \n  <p dir=\"auto\">Let's say that you have a build that needs NodeJS. It is possible to use a <a href=\"https://plugins.jenkins.io/nodejs\" rel=\"nofollow\">NodeJS Plugin</a> for it, but we will use it as an example.</p> \n  <ol dir=\"auto\"> \n   <li>Go to the <em>Manage Jenkins</em> > <em>Global Tool Configuration</em> page and to find the <em>Custom Tool</em> section there.</li> \n   <li>Add a new <em>NodeJS</em> Tool</li> \n   <li>Configure the tool installer. E.g. you can use a script as in the example below</li> \n   <li>Configure <em>Exported paths</em>. The field lets you specify multiple directory patterns which will be added to the $PATH so that your build needn't know where the tool is actually installed</li> \n  </ol> \n  <p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jenkinsci/custom-tools-plugin/blob/master/docs/images/configure_tool.png\"><img src=\"https://cdn.jsdelivr.net/gh/jenkinsci/custom-tools-plugin@master/docs/images/configure_tool.png\" alt=\"Tool Configuration\" style=\"max-width: 100%;\"></a></p> \n  <div class=\"markdown-heading\" dir=\"auto\">\n   <h3 class=\"heading-element\" dir=\"auto\" id=\"plugin-content-using-tools-in-freestyle-projects\" style=\"position: relative\">Using tools in Freestyle projects<a href=\"#plugin-content-using-tools-in-freestyle-projects\" aria-label=\"using tools in freestyle projects permalink\" class=\"anchor after\"><ion-icon name=\"link-outline\"></ion-icon></a></h3>\n   \n  </div> \n  <p dir=\"auto\">For Freestyle projects you need to add the tool requirement to your job's <em>Build Environment</em> (aka \"build wrappers\").</p> \n  <p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jenkinsci/custom-tools-plugin/blob/master/docs/images/buildWrapper.png\"><img src=\"https://cdn.jsdelivr.net/gh/jenkinsci/custom-tools-plugin@master/docs/images/buildWrapper.png\" alt=\"Freestyle Project. Tool Build Wrapper\" style=\"max-width: 100%;\"></a></p> \n  <p dir=\"auto\">Then, you can just use the tool in your job, without having to know where it's installed. The plugin will install it as needed before your job runs, and make sure the <code>$PATH</code> is setup correctly:</p> \n  <p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jenkinsci/custom-tools-plugin/blob/master/docs/images/installLog.png\"><img src=\"https://cdn.jsdelivr.net/gh/jenkinsci/custom-tools-plugin@master/docs/images/installLog.png\" alt=\"Freestyle Project. Tool Installation log\" style=\"max-width: 100%;\"></a></p> \n  <div class=\"markdown-heading\" dir=\"auto\">\n   <h2 class=\"heading-element\" dir=\"auto\" id=\"plugin-content-advanced-use-cases\" style=\"position: relative\">Advanced use-cases<a href=\"#plugin-content-advanced-use-cases\" aria-label=\"advanced use cases permalink\" class=\"anchor after\"><ion-icon name=\"link-outline\"></ion-icon></a></h2>\n   \n  </div> \n  <div class=\"markdown-heading\" dir=\"auto\">\n   <h3 class=\"heading-element\" dir=\"auto\" id=\"plugin-content-tool-versioning\" style=\"position: relative\">Tool versioning<a href=\"#plugin-content-tool-versioning\" aria-label=\"tool versioning permalink\" class=\"anchor after\"><ion-icon name=\"link-outline\"></ion-icon></a></h3>\n   \n  </div> \n  <p dir=\"auto\">Custom Tools plugin supports versioning of tools. Versions can be configured in the global configurations and then used to install specific versions of tools in Jenkins jobs.</p> \n  <markdown-accessiblity-table>\n   <div class=\"table-responsive\"><table class=\"table table-bordered\"> \n    <thead> \n     <tr> \n      <th>WARNING: This feature is a subject to the breaking changes in the future. See <a href=\"https://issues.jenkins-ci.org/browse/JENKINS-32662\" rel=\"nofollow\">JENKINS-32662</a> for more info</th> \n     </tr> \n    </thead> \n   </table></div>\n  </markdown-accessiblity-table> \n  <div class=\"markdown-heading\" dir=\"auto\">\n   <h4 class=\"heading-element\" dir=\"auto\" id=\"plugin-content-configuring-tool-versions\" style=\"position: relative\">Configuring Tool versions<a href=\"#plugin-content-configuring-tool-versions\" aria-label=\"configuring tool versions permalink\" class=\"anchor after\"><ion-icon name=\"link-outline\"></ion-icon></a></h4>\n   \n  </div> \n  <p dir=\"auto\">Currently the plugin uses the functionality provided by the <a href=\"https://plugins.jenkins.io/extended-choice-parameter\" rel=\"nofollow\">Extended Choice Parameter plugin</a>, but it's a subject for a change in the future. Extended Choice Parameter plugin allows to setup versions locally in the global configuration or to reference a property file with the version listing.</p> \n  <p dir=\"auto\">If a <em>Custom Tool</em> has versioning enabled, Custom Tools starts retrieving versions during the tool installation. Version configuration example:</p> \n  <p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jenkinsci/custom-tools-plugin/blob/master/docs/images/versions_Configuration.png\"><img src=\"https://cdn.jsdelivr.net/gh/jenkinsci/custom-tools-plugin@master/docs/images/versions_Configuration.png\" alt=\"Tool Version Configuration\" style=\"max-width: 100%;\"></a></p> \n  <p dir=\"auto\">Some tool installers support TOOL_VERSION variables (e.g. all installers from <a href=\"https://plugins.jenkins.io/extra-tool-installers\" rel=\"nofollow\">Extra Tool Installers Plugin</a>, so you can use versions in the installer configurations.</p> \n  <p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jenkinsci/custom-tools-plugin/blob/master/docs/images/versions_usageInInstaller.png\"><img src=\"https://cdn.jsdelivr.net/gh/jenkinsci/custom-tools-plugin@master/docs/images/versions_usageInInstaller.png\" alt=\"Using Tool Versions in Installers\" style=\"max-width: 100%;\"></a></p> \n  <div class=\"markdown-heading\" dir=\"auto\">\n   <h4 class=\"heading-element\" dir=\"auto\" id=\"plugin-content-tool-version-parameters\" style=\"position: relative\">Tool Version parameters<a href=\"#plugin-content-tool-version-parameters\" aria-label=\"tool version parameters permalink\" class=\"anchor after\"><ion-icon name=\"link-outline\"></ion-icon></a></h4>\n   \n  </div> \n  <p dir=\"auto\"><em>Tool version</em> parameter is available for Jenkins jobs. If it is not specified, a default version will be used.</p> \n  <p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jenkinsci/custom-tools-plugin/blob/master/docs/images/versions_ParameterDefinition.png\"><img src=\"https://cdn.jsdelivr.net/gh/jenkinsci/custom-tools-plugin@master/docs/images/versions_ParameterDefinition.png\" alt=\"Tool Version Parameter Definition\" style=\"max-width: 100%;\"></a></p> \n  <p dir=\"auto\">Defining version parameter when starting a build:</p> \n  <p dir=\"auto\"><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/jenkinsci/custom-tools-plugin/blob/master/docs/images/versions_Parameter.png\"><img src=\"https://cdn.jsdelivr.net/gh/jenkinsci/custom-tools-plugin@master/docs/images/versions_Parameter.png\" alt=\"Tool Version Parameter Usage\" style=\"max-width: 100%;\"></a></p> \n </article>\n</div>","rehypeTOC":[{"id":"plugin-content-overview","heading":"Overview"},{"id":"plugin-content-changelog","heading":"Changelog"},{"id":"plugin-content-usage","heading":"Usage","items":[{"id":"plugin-content-defining-tools","heading":"Defining tools"},{"id":"plugin-content-using-tools-in-freestyle-projects","heading":"Using tools in Freestyle projects"}]},{"id":"plugin-content-advanced-use-cases","heading":"Advanced use-cases","items":[{"id":"plugin-content-tool-versioning","heading":"Tool versioning","items":[{"id":"plugin-content-configuring-tool-versions","heading":"Configuring Tool versions"},{"id":"plugin-content-tool-version-parameters","heading":"Tool Version parameters"}]}]}]},"url":"https://github.com/jenkinsci/custom-tools-plugin"},"stats":{"currentInstalls":3080,"currentInstallPercentage":1.5041853468905364,"installations":[{"timestamp":1717200000000,"total":4085,"percentage":1.4470831621158233},{"timestamp":1719792000000,"total":4138,"percentage":1.446853146853147},{"timestamp":1722470400000,"total":4071,"percentage":1.4337132150957217},{"timestamp":1725148800000,"total":4027,"percentage":1.4536541696447265},{"timestamp":1727740800000,"total":4167,"percentage":1.4774238153486146},{"timestamp":1730419200000,"total":4065,"percentage":1.4519620239600524},{"timestamp":1733011200000,"total":3841,"percentage":1.442623689676283},{"timestamp":1735689600000,"total":3964,"percentage":1.4820076642676885},{"timestamp":1738368000000,"total":3988,"percentage":1.465982443500125},{"timestamp":1740787200000,"total":3985,"percentage":1.4179072613930717},{"timestamp":1743465600000,"total":3895,"percentage":1.3902372861997088},{"timestamp":1746057600000,"total":3080,"percentage":1.5041853468905364}],"trend":1139},"sha1":"hsxX0xHoH1PB/SUOHI3w8m43h2w=","deprecationNotice":null,"securityWarnings":[],"issueTrackers":[{"reportUrl":"https://www.jenkins.io/participate/report-issue/redirect/#16520/custom-tools-plugin","type":"jira","viewUrl":"https://issues.jenkins.io/issues/?jql=component=16520"}],"scm":"https://github.com/jenkinsci/custom-tools-plugin","hasPipelineSteps":false,"hasExtensions":false,"requiredCore":"2.222.4","releaseTimestamp":"2021-03-10T15:21:09.00Z","previousVersion":"0.7","previousTimestamp":"2019-08-16T21:11:10.00Z","name":"custom-tools-plugin","labels":["adopt-this-plugin","buildwrapper"],"developers":[{"id":"mPokornyETM","name":"mPokornyETM"},{"id":"oleg_nenashev","name":"Oleg Nenashev"},{"id":"rhernandezm","name":"Roberto"}],"firstRelease":"2012-02-13T19:54:52.000Z","excerpt":"A generic tool installer. You define how tools get installed, and the plugin will automatically install them when needed.","buildDate":"2021-03-10T00:00:00.000Z","dependencies":[{"implied":null,"name":"extended-choice-parameter","optional":false,"title":"Extended Choice Parameter","version":"0.28"},{"implied":null,"name":"matrix-project","optional":false,"title":"Matrix Project","version":"1.18"},{"implied":true,"name":"sshd","optional":false,"title":"SSH server","version":"3.236.ved5e1b_cb_50b_2"},{"implied":true,"name":"javax-activation-api","optional":false,"title":"JavaBeans Activation Framework (JAF) API","version":"1.2.0-2"},{"implied":true,"name":"javax-mail-api","optional":false,"title":"JavaMail API","version":"1.6.2-5"},{"implied":true,"name":"instance-identity","optional":false,"title":"Instance Identity","version":"3.1"}]}},"pageContext":{"name":"custom-tools-plugin"}},"staticQueryHashes":["443252636","734486537","810784101"],"slicesMap":{}}