Merge pull request #204 from waveywaves/update/overridable-jenkins-home

Allow to set JENKINS_HOME env
This commit is contained in:
Tomasz Sęk 2019-11-19 10:18:55 +01:00 committed by GitHub
commit b3f79d32df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 41 deletions

View File

@ -36,7 +36,7 @@ if (!operatorUserCreatedFile.exists()) {
}
`))
func buildCreateJenkinsOperatorUserGroovyScript() (*string, error) {
func buildCreateJenkinsOperatorUserGroovyScript(jenkins *v1alpha2.Jenkins) (*string, error) {
data := struct {
OperatorCredentialsPath string
OperatorUserNameFile string
@ -46,7 +46,7 @@ func buildCreateJenkinsOperatorUserGroovyScript() (*string, error) {
OperatorCredentialsPath: jenkinsOperatorCredentialsVolumePath,
OperatorUserNameFile: OperatorCredentialsSecretUserNameKey,
OperatorPasswordFile: OperatorCredentialsSecretPasswordKey,
OperatorUserCreatedFilePath: jenkinsHomePath + "/operatorUserCreated",
OperatorUserCreatedFilePath: getJenkinsHomePath(jenkins) + "/operatorUserCreated",
}
output, err := render.Render(createOperatorUserGroovyFmtTemplate, data)
@ -66,7 +66,7 @@ func GetInitConfigurationConfigMapName(jenkins *v1alpha2.Jenkins) string {
func NewInitConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) (*corev1.ConfigMap, error) {
meta.Name = GetInitConfigurationConfigMapName(jenkins)
createJenkinsOperatorUserGroovy, err := buildCreateJenkinsOperatorUserGroovyScript()
createJenkinsOperatorUserGroovy, err := buildCreateJenkinsOperatorUserGroovyScript(jenkins)
if err != nil {
return nil, err
}

View File

@ -16,7 +16,6 @@ const (
// JenkinsHomeVolumeName is the Jenkins home volume name
JenkinsHomeVolumeName = "jenkins-home"
jenkinsPath = "/var/jenkins"
jenkinsHomePath = jenkinsPath + "/home"
jenkinsScriptsVolumeName = "scripts"
// JenkinsScriptsVolumePath is a path where are scripts used to configure Jenkins
@ -62,12 +61,7 @@ func GetJenkinsMasterContainerBaseCommand() []string {
// GetJenkinsMasterContainerBaseEnvs returns Jenkins master pod envs required by operator
func GetJenkinsMasterContainerBaseEnvs(jenkins *v1alpha2.Jenkins) []corev1.EnvVar {
envVars := []corev1.EnvVar{
{
Name: "JENKINS_HOME",
Value: jenkinsHomePath,
},
}
envVars := []corev1.EnvVar{}
if len(jenkins.Spec.ConfigurationAsCode.Secret.Name) > 0 {
envVars = append(envVars, corev1.EnvVar{
@ -79,6 +73,17 @@ func GetJenkinsMasterContainerBaseEnvs(jenkins *v1alpha2.Jenkins) []corev1.EnvVa
return envVars
}
// getJenkinsHomePath fetches the Home Path for Jenkins
func getJenkinsHomePath(jenkins *v1alpha2.Jenkins) string {
defaultJenkinsHomePath := jenkinsPath + "/jenkins"
for _, envVar := range jenkins.Spec.Master.Containers[0].Env {
if envVar.Name == "JENKINS_HOME" {
return envVar.Value
}
}
return defaultJenkinsHomePath
}
// GetJenkinsMasterPodBaseVolumes returns Jenkins master pod volumes required by operator
func GetJenkinsMasterPodBaseVolumes(jenkins *v1alpha2.Jenkins) []corev1.Volume {
configMapVolumeSourceDefaultMode := corev1.ConfigMapVolumeSourceDefaultMode
@ -163,7 +168,7 @@ func GetJenkinsMasterContainerBaseVolumeMounts(jenkins *v1alpha2.Jenkins) []core
volumeMounts := []corev1.VolumeMount{
{
Name: JenkinsHomeVolumeName,
MountPath: jenkinsHomePath,
MountPath: getJenkinsHomePath(jenkins),
ReadOnly: false,
},
{
@ -204,9 +209,27 @@ func GetJenkinsMasterContainerBaseVolumeMounts(jenkins *v1alpha2.Jenkins) []core
// NewJenkinsMasterContainer returns Jenkins master Kubernetes container
func NewJenkinsMasterContainer(jenkins *v1alpha2.Jenkins) corev1.Container {
jenkinsContainer := jenkins.Spec.Master.Containers[0]
envs := GetJenkinsMasterContainerBaseEnvs(jenkins)
envs = append(envs, jenkinsContainer.Env...)
jenkinsHomeEnvVar := corev1.EnvVar{
Name: "JENKINS_HOME",
Value: getJenkinsHomePath(jenkins),
}
jenkinsHomeEnvVarExists := false
for _, env := range jenkinsContainer.Env {
if env.Name == jenkinsHomeEnvVar.Name {
jenkinsHomeEnvVarExists = true
break
}
}
if !jenkinsHomeEnvVarExists {
envs = append(envs, jenkinsHomeEnvVar)
}
return corev1.Container{
Name: JenkinsMasterContainerName,
Image: jenkinsContainer.Image,

View File

@ -280,7 +280,7 @@ func buildInitBashScript(jenkins *v1alpha2.Jenkins) (*string, error) {
BasePlugins []v1alpha2.Plugin
UserPlugins []v1alpha2.Plugin
}{
JenkinsHomePath: jenkinsHomePath,
JenkinsHomePath: getJenkinsHomePath(jenkins),
InitConfigurationPath: jenkinsInitConfigurationVolumePath,
BasePlugins: jenkins.Spec.Master.BasePlugins,
UserPlugins: jenkins.Spec.Master.Plugins,
@ -314,7 +314,7 @@ func NewScriptsConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) (*co
ObjectMeta: meta,
Data: map[string]string{
InitScriptName: *initBashScript,
installPluginsCommand: fmt.Sprintf(installPluginsBashFmt, jenkinsHomePath),
installPluginsCommand: fmt.Sprintf(installPluginsBashFmt, getJenkinsHomePath(jenkins)),
},
}, nil
}

View File

@ -371,34 +371,6 @@ func TestValidateJenkinsMasterPodEnvs(t *testing.T) {
got := baseReconcileLoop.validateJenkinsMasterPodEnvs()
assert.Nil(t, got)
})
t.Run("override JENKINS_HOME env", func(t *testing.T) {
jenkins := v1alpha2.Jenkins{
Spec: v1alpha2.JenkinsSpec{
Master: v1alpha2.JenkinsMaster{
Containers: []v1alpha2.Container{
{
Env: []v1.EnvVar{
{
Name: "JENKINS_HOME",
Value: "",
},
{
Name: constants.JavaOpsVariableName,
Value: validJenkinsOps,
},
},
},
},
},
},
}
baseReconcileLoop := New(configuration.Configuration{
Jenkins: &jenkins,
}, logf.ZapLogger(false), false, false, nil)
got := baseReconcileLoop.validateJenkinsMasterPodEnvs()
assert.Equal(t, got, []string{"Jenkins Master container env 'JENKINS_HOME' cannot be overridden"})
})
t.Run("missing -Djava.awt.headless=true in JAVA_OPTS env", func(t *testing.T) {
jenkins := v1alpha2.Jenkins{
Spec: v1alpha2.JenkinsSpec{