Merge pull request #204 from waveywaves/update/overridable-jenkins-home
Allow to set JENKINS_HOME env
This commit is contained in:
commit
b3f79d32df
|
|
@ -36,7 +36,7 @@ if (!operatorUserCreatedFile.exists()) {
|
||||||
}
|
}
|
||||||
`))
|
`))
|
||||||
|
|
||||||
func buildCreateJenkinsOperatorUserGroovyScript() (*string, error) {
|
func buildCreateJenkinsOperatorUserGroovyScript(jenkins *v1alpha2.Jenkins) (*string, error) {
|
||||||
data := struct {
|
data := struct {
|
||||||
OperatorCredentialsPath string
|
OperatorCredentialsPath string
|
||||||
OperatorUserNameFile string
|
OperatorUserNameFile string
|
||||||
|
|
@ -46,7 +46,7 @@ func buildCreateJenkinsOperatorUserGroovyScript() (*string, error) {
|
||||||
OperatorCredentialsPath: jenkinsOperatorCredentialsVolumePath,
|
OperatorCredentialsPath: jenkinsOperatorCredentialsVolumePath,
|
||||||
OperatorUserNameFile: OperatorCredentialsSecretUserNameKey,
|
OperatorUserNameFile: OperatorCredentialsSecretUserNameKey,
|
||||||
OperatorPasswordFile: OperatorCredentialsSecretPasswordKey,
|
OperatorPasswordFile: OperatorCredentialsSecretPasswordKey,
|
||||||
OperatorUserCreatedFilePath: jenkinsHomePath + "/operatorUserCreated",
|
OperatorUserCreatedFilePath: getJenkinsHomePath(jenkins) + "/operatorUserCreated",
|
||||||
}
|
}
|
||||||
|
|
||||||
output, err := render.Render(createOperatorUserGroovyFmtTemplate, data)
|
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) {
|
func NewInitConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) (*corev1.ConfigMap, error) {
|
||||||
meta.Name = GetInitConfigurationConfigMapName(jenkins)
|
meta.Name = GetInitConfigurationConfigMapName(jenkins)
|
||||||
|
|
||||||
createJenkinsOperatorUserGroovy, err := buildCreateJenkinsOperatorUserGroovyScript()
|
createJenkinsOperatorUserGroovy, err := buildCreateJenkinsOperatorUserGroovyScript(jenkins)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@ const (
|
||||||
// JenkinsHomeVolumeName is the Jenkins home volume name
|
// JenkinsHomeVolumeName is the Jenkins home volume name
|
||||||
JenkinsHomeVolumeName = "jenkins-home"
|
JenkinsHomeVolumeName = "jenkins-home"
|
||||||
jenkinsPath = "/var/jenkins"
|
jenkinsPath = "/var/jenkins"
|
||||||
jenkinsHomePath = jenkinsPath + "/home"
|
|
||||||
|
|
||||||
jenkinsScriptsVolumeName = "scripts"
|
jenkinsScriptsVolumeName = "scripts"
|
||||||
// JenkinsScriptsVolumePath is a path where are scripts used to configure Jenkins
|
// 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
|
// GetJenkinsMasterContainerBaseEnvs returns Jenkins master pod envs required by operator
|
||||||
func GetJenkinsMasterContainerBaseEnvs(jenkins *v1alpha2.Jenkins) []corev1.EnvVar {
|
func GetJenkinsMasterContainerBaseEnvs(jenkins *v1alpha2.Jenkins) []corev1.EnvVar {
|
||||||
envVars := []corev1.EnvVar{
|
envVars := []corev1.EnvVar{}
|
||||||
{
|
|
||||||
Name: "JENKINS_HOME",
|
|
||||||
Value: jenkinsHomePath,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(jenkins.Spec.ConfigurationAsCode.Secret.Name) > 0 {
|
if len(jenkins.Spec.ConfigurationAsCode.Secret.Name) > 0 {
|
||||||
envVars = append(envVars, corev1.EnvVar{
|
envVars = append(envVars, corev1.EnvVar{
|
||||||
|
|
@ -79,6 +73,17 @@ func GetJenkinsMasterContainerBaseEnvs(jenkins *v1alpha2.Jenkins) []corev1.EnvVa
|
||||||
return envVars
|
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
|
// GetJenkinsMasterPodBaseVolumes returns Jenkins master pod volumes required by operator
|
||||||
func GetJenkinsMasterPodBaseVolumes(jenkins *v1alpha2.Jenkins) []corev1.Volume {
|
func GetJenkinsMasterPodBaseVolumes(jenkins *v1alpha2.Jenkins) []corev1.Volume {
|
||||||
configMapVolumeSourceDefaultMode := corev1.ConfigMapVolumeSourceDefaultMode
|
configMapVolumeSourceDefaultMode := corev1.ConfigMapVolumeSourceDefaultMode
|
||||||
|
|
@ -163,7 +168,7 @@ func GetJenkinsMasterContainerBaseVolumeMounts(jenkins *v1alpha2.Jenkins) []core
|
||||||
volumeMounts := []corev1.VolumeMount{
|
volumeMounts := []corev1.VolumeMount{
|
||||||
{
|
{
|
||||||
Name: JenkinsHomeVolumeName,
|
Name: JenkinsHomeVolumeName,
|
||||||
MountPath: jenkinsHomePath,
|
MountPath: getJenkinsHomePath(jenkins),
|
||||||
ReadOnly: false,
|
ReadOnly: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -204,9 +209,27 @@ func GetJenkinsMasterContainerBaseVolumeMounts(jenkins *v1alpha2.Jenkins) []core
|
||||||
// NewJenkinsMasterContainer returns Jenkins master Kubernetes container
|
// NewJenkinsMasterContainer returns Jenkins master Kubernetes container
|
||||||
func NewJenkinsMasterContainer(jenkins *v1alpha2.Jenkins) corev1.Container {
|
func NewJenkinsMasterContainer(jenkins *v1alpha2.Jenkins) corev1.Container {
|
||||||
jenkinsContainer := jenkins.Spec.Master.Containers[0]
|
jenkinsContainer := jenkins.Spec.Master.Containers[0]
|
||||||
|
|
||||||
envs := GetJenkinsMasterContainerBaseEnvs(jenkins)
|
envs := GetJenkinsMasterContainerBaseEnvs(jenkins)
|
||||||
envs = append(envs, jenkinsContainer.Env...)
|
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{
|
return corev1.Container{
|
||||||
Name: JenkinsMasterContainerName,
|
Name: JenkinsMasterContainerName,
|
||||||
Image: jenkinsContainer.Image,
|
Image: jenkinsContainer.Image,
|
||||||
|
|
|
||||||
|
|
@ -280,7 +280,7 @@ func buildInitBashScript(jenkins *v1alpha2.Jenkins) (*string, error) {
|
||||||
BasePlugins []v1alpha2.Plugin
|
BasePlugins []v1alpha2.Plugin
|
||||||
UserPlugins []v1alpha2.Plugin
|
UserPlugins []v1alpha2.Plugin
|
||||||
}{
|
}{
|
||||||
JenkinsHomePath: jenkinsHomePath,
|
JenkinsHomePath: getJenkinsHomePath(jenkins),
|
||||||
InitConfigurationPath: jenkinsInitConfigurationVolumePath,
|
InitConfigurationPath: jenkinsInitConfigurationVolumePath,
|
||||||
BasePlugins: jenkins.Spec.Master.BasePlugins,
|
BasePlugins: jenkins.Spec.Master.BasePlugins,
|
||||||
UserPlugins: jenkins.Spec.Master.Plugins,
|
UserPlugins: jenkins.Spec.Master.Plugins,
|
||||||
|
|
@ -314,7 +314,7 @@ func NewScriptsConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) (*co
|
||||||
ObjectMeta: meta,
|
ObjectMeta: meta,
|
||||||
Data: map[string]string{
|
Data: map[string]string{
|
||||||
InitScriptName: *initBashScript,
|
InitScriptName: *initBashScript,
|
||||||
installPluginsCommand: fmt.Sprintf(installPluginsBashFmt, jenkinsHomePath),
|
installPluginsCommand: fmt.Sprintf(installPluginsBashFmt, getJenkinsHomePath(jenkins)),
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -371,34 +371,6 @@ func TestValidateJenkinsMasterPodEnvs(t *testing.T) {
|
||||||
got := baseReconcileLoop.validateJenkinsMasterPodEnvs()
|
got := baseReconcileLoop.validateJenkinsMasterPodEnvs()
|
||||||
assert.Nil(t, got)
|
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) {
|
t.Run("missing -Djava.awt.headless=true in JAVA_OPTS env", func(t *testing.T) {
|
||||||
jenkins := v1alpha2.Jenkins{
|
jenkins := v1alpha2.Jenkins{
|
||||||
Spec: v1alpha2.JenkinsSpec{
|
Spec: v1alpha2.JenkinsSpec{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue