AddHelmBinaryRepoIfMissing adds the helm repo at url if it's missing. If a repoName is specified it will be used (if
the repo is added) otherwise one will be generated. The username and password will be used, and stored in vault, if
possible. The name of the repo (regardless of whether it was added or already there) is returned - this may well be
different from the requested name (if it's already there).

CreateCustomJenkinsClient creates either a regular Jenkins client or if useCustom is true creates a JenkinsClient
for a custom jenkins App. If no customJenkinsName is specified and there is only one available it is used. Otherwise
the user is prompted to pick the Jenkins App to use if not in batch mode.

DisableFeatures iterates over all the repositories in org (except those that match excludes) and disables issue
trackers, projects and wikis if they are not in use.

Issue trackers are not in use if they have no open or closed issues
Projects are not in use if there are no open projects
Wikis are not in use if the provider returns that the wiki is not enabled

Note that the requirement for issues is no issues at all so that we don't close issue trackers that have historic info

If includes is not empty only those that match an include will be operated on. If dryRun is true, the operations to
be done will printed and but nothing done. If batchMode is false, then each change will be prompted.

EnsureClusterRoleBinding ensures cluster role exists
Todo: use permissions from somewhere, or provide common ones in a class that we can pass in here
this is an unimplemented and unused method for building upon that may eventually be of use

GetDeployNamespace returns the namespace option from the command line option if defined otherwise we try
the $DEPLOY_NAMESPACE environment variable. If none of those are found lets use the current
kubernetes namespace value

JenkinsSelectorOptions used to represent the options used to refer to a Jenkins.
if nothing is specified it assumes the current team is using a static Jenkins server as its execution engine.
otherwise we can refer to other additional Jenkins Apps to implement custom Jenkins servers