#43 Add support for JENKINS_OPTS, fix the --prefix bug

This commit is contained in:
Jakub Al-Khalili 2019-07-10 13:58:18 +02:00
parent 55601886c1
commit 01655785b5
4 changed files with 69 additions and 5 deletions

View File

@ -127,6 +127,29 @@ func (r *ReconcileJenkinsBaseConfiguration) Reconcile() (reconcile.Result, jenki
return result, jenkinsClient, err
}
// GetJenkinsOpts put container JENKINS_OPTS env parameters in map and returns it
func GetJenkinsOpts(jenkins *v1alpha2.Jenkins) map[string]string {
envs := jenkins.Spec.Master.Containers[0].Env
jenkinsOpts := make(map[string]string)
for k, v := range envs {
if v.Name == "JENKINS_OPTS" {
jenkinsOptsEnv := envs[k]
jenkinsOptsWithDashes := jenkinsOptsEnv.Value
jenkinsOptsWithDashes = strings.ReplaceAll(jenkinsOptsWithDashes, "--", "") // Remove dashes
jenkinsOptsWithEqOperators := strings.Split(jenkinsOptsWithDashes, " ")
for _, vx := range jenkinsOptsWithEqOperators {
opt := strings.Split(vx, "=")
jenkinsOpts[opt[0]] = opt[1]
}
return jenkinsOpts
}
}
return nil
}
func (r *ReconcileJenkinsBaseConfiguration) ensureResourcesRequiredForJenkinsPod(metaObject metav1.ObjectMeta) error {
if err := r.createOperatorCredentialsSecret(metaObject); err != nil {
return err
@ -748,6 +771,11 @@ func (r *ReconcileJenkinsBaseConfiguration) waitForJenkins(meta metav1.ObjectMet
func (r *ReconcileJenkinsBaseConfiguration) ensureJenkinsClient(meta metav1.ObjectMeta) (jenkinsclient.Jenkins, error) {
jenkinsURL, err := jenkinsclient.BuildJenkinsAPIUrl(
r.jenkins.ObjectMeta.Namespace, resources.GetJenkinsHTTPServiceName(r.jenkins), r.jenkins.Spec.Service.Port, r.local, r.minikube)
if prefix, ok := GetJenkinsOpts(r.jenkins)["prefix"]; ok {
jenkinsURL = jenkinsURL + prefix
}
if err != nil {
return nil, err
}

View File

@ -14,6 +14,44 @@ import (
corev1 "k8s.io/api/core/v1"
)
func TestGetJenkinsOpts(t *testing.T) {
envs := []corev1.EnvVar{
{Name: "JENKINS_OPTS", Value: "--prefix=/jenkins --httpPort=8080"},
}
jenkins := &v1alpha2.Jenkins{
Spec: v1alpha2.JenkinsSpec{
Master: v1alpha2.JenkinsMaster{
Containers: []v1alpha2.Container{
{
Env: envs,
},
},
},
},
}
opts := GetJenkinsOpts(jenkins)
t.Run("equal env vars", func(t *testing.T) {
assert.Equal(t, opts["prefix"], "/jenkins")
assert.Equal(t, opts["httpPort"], "8080")
})
t.Run("not equal env vars", func(t *testing.T) {
assert.NotEqual(t, opts["prefix"], "/jenkins_not_equal")
assert.NotEqual(t, opts["httpPort"], "80808")
})
t.Run("should exists", func(t *testing.T) {
assert.Contains(t, opts, "httpPort")
})
t.Run("should exists", func(t *testing.T) {
assert.NotContains(t, opts, "should_not_exists")
})
}
func TestCompareContainerVolumeMounts(t *testing.T) {
t.Run("happy with service account", func(t *testing.T) {
expectedContainer := corev1.Container{

View File

@ -3,8 +3,7 @@ package jenkins
import (
"context"
"fmt"
"reflect"
"github.com/go-logr/logr"
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2"
jenkinsclient "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/client"
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/configuration/base"
@ -16,8 +15,6 @@ import (
"github.com/jenkinsci/kubernetes-operator/pkg/event"
"github.com/jenkinsci/kubernetes-operator/pkg/log"
"github.com/jenkinsci/kubernetes-operator/version"
"github.com/go-logr/logr"
"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
@ -27,6 +24,7 @@ import (
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"reflect"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller"
"sigs.k8s.io/controller-runtime/pkg/handler"

View File

@ -167,7 +167,7 @@ func verifyJenkinsMasterPodAttributes(t *testing.T, jenkins *v1alpha2.Jenkins) {
assert.Equal(t, resources.JenkinsMasterContainerName, jenkinsPod.Spec.Containers[0].Name)
assert.Equal(t, len(jenkins.Spec.Master.Containers), len(jenkinsPod.Spec.Containers))
assert.Equal(t, jenkins.Spec.Master.SecurityContext, jenkinsPod.Spec.SecurityContext)
assert.Equal(t, jenkins.Spec.Master.Containers[0].Command, jenkinsPod.Spec.Containers[0].Command)