jenkinsci / docker

Docker official jenkins repo
https://hub.docker.com/r/jenkins/jenkins
MIT License
6.65k stars 4.52k forks source link

environment variable substitution for config files in /usr/share/jenkins/ref/ #448

Open jpraet opened 7 years ago

jpraet commented 7 years ago

It would be nice if environment variables (or another placeholder replacement mechanism) could be used for the config files in /usr/share/jenkins/ref/. For example:

hudson.tasks.Mailer.xml:

<?xml version='1.0' encoding='UTF-8'?>
<hudson.tasks.Mailer_-DescriptorImpl plugin="mailer@1.19">
  <hudsonUrl>http://jenkins.example.com/</hudsonUrl>
  <smtpHost>smtp.example.com</smtpHost>
  <useSsl>false</useSsl>
  <charset>UTF-8</charset>
</hudson.tasks.Mailer_-DescriptorImpl>

jenkins.model.JenkinsLocationConfiguration.xml:

<?xml version='1.0' encoding='UTF-8'?>
<jenkins.model.JenkinsLocationConfiguration>
  <adminAddress>no-reply-jenkins@example.com</adminAddress>
  <jenkinsUrl>http://jenkins.example.com/</jenkinsUrl>
</jenkins.model.JenkinsLocationConfiguration>

I would like to provide these default configuration files in /usr/share/jenkins/ref/, but the http://jenkins.example.com/ should be specified dynamically when running the container (e.g. for another instance in a test environment).

So I'd like to be able to write something like <jenkinsUrl>${JENKINS_URL}</jenkinsUrl> or maybe with a default value <jenkinsUrl>${JENKINS_URL-http://jenkins.example.com/}</jenkinsUrl>

and then specify a value at runtime with docker run -e "JENKINS_URL=http://jenkins-test.example.com/"

What do you think?

hoshsadiq commented 7 years ago

Alternatively you can using groovy.init.d to configure Jenkins. From here you are able to access environment variables using System.getenv("VARIABLE_NAME"), in your case: System.getenv("JENKINS_URL")

PriyankaSuchak commented 6 years ago

I have similar requirement, basically I want jenkins container configuration to be different for different Kuberentes project . example: jenkins/sonarqube for one Kuberentes namespace will be having different names vs second namespace (jenkins/sonarqube). However I want to build standard image where based on environment variable I can update hudson.plugins.sonar.SonarGlobalConfiguration.xml for $SONAR_URL and $TOKEN

if this can be achieved by groovy option, could you explain little more on how to use goovy.init.d

Regards Priyanka

ibaldonl commented 5 years ago

I think this is not specific to the container but a more generally useful suggestion. Some people asked for a similar thing here: https://issues.jenkins-ci.org/browse/JENKINS-28466?focusedCommentId=283101&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-283101