Merge pull request #319 from mkarebski/feature/fix-local-run

#318 Fix running Jenkins-Operator locally
This commit is contained in:
Tomasz Sęk 2020-04-03 11:36:29 +02:00 committed by GitHub
commit 83685bbb74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 68 additions and 22 deletions

View File

@ -285,7 +285,10 @@ func (r *ReconcileJenkinsBaseConfiguration) createInitConfigurationConfigMap(met
} }
func (r *ReconcileJenkinsBaseConfiguration) createBaseConfigurationConfigMap(meta metav1.ObjectMeta) error { func (r *ReconcileJenkinsBaseConfiguration) createBaseConfigurationConfigMap(meta metav1.ObjectMeta) error {
configMap := resources.NewBaseConfigurationConfigMap(meta, r.Configuration.Jenkins) configMap, err := resources.NewBaseConfigurationConfigMap(meta, r.Configuration.Jenkins)
if err != nil {
return err
}
return stackerr.WithStack(r.CreateOrUpdateResource(configMap)) return stackerr.WithStack(r.CreateOrUpdateResource(configMap))
} }

View File

@ -178,8 +178,16 @@ func GetBaseConfigurationConfigMapName(jenkins *v1alpha2.Jenkins) string {
} }
// NewBaseConfigurationConfigMap builds Kubernetes config map used to base configuration // NewBaseConfigurationConfigMap builds Kubernetes config map used to base configuration
func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) *corev1.ConfigMap { func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jenkins) (*corev1.ConfigMap, error) {
meta.Name = GetBaseConfigurationConfigMapName(jenkins) meta.Name = GetBaseConfigurationConfigMapName(jenkins)
jenkinsServiceFQDN, err := GetJenkinsHTTPServiceFQDN(jenkins)
if err != nil {
return nil, err
}
jenkinsSlavesServiceFQDN, err := GetJenkinsSlavesServiceFQDN(jenkins)
if err != nil {
return nil, err
}
groovyScriptsMap := map[string]string{ groovyScriptsMap := map[string]string{
basicSettingsGroovyScriptName: fmt.Sprintf(basicSettingsFmt, constants.DefaultAmountOfExecutors), basicSettingsGroovyScriptName: fmt.Sprintf(basicSettingsFmt, constants.DefaultAmountOfExecutors),
enableCSRFGroovyScriptName: enableCSRF, enableCSRFGroovyScriptName: enableCSRF,
@ -188,8 +196,8 @@ func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jen
disableInsecureFeaturesGroovyScriptName: disableInsecureFeatures, disableInsecureFeaturesGroovyScriptName: disableInsecureFeatures,
configureKubernetesPluginGroovyScriptName: fmt.Sprintf(configureKubernetesPluginFmt, configureKubernetesPluginGroovyScriptName: fmt.Sprintf(configureKubernetesPluginFmt,
jenkins.ObjectMeta.Namespace, jenkins.ObjectMeta.Namespace,
fmt.Sprintf("http://%s:%d", GetJenkinsHTTPServiceFQDN(jenkins), jenkins.Spec.Service.Port), fmt.Sprintf("http://%s:%d", jenkinsServiceFQDN, jenkins.Spec.Service.Port),
fmt.Sprintf("%s:%d", GetJenkinsSlavesServiceFQDN(jenkins), jenkins.Spec.SlaveService.Port), fmt.Sprintf("%s:%d", jenkinsSlavesServiceFQDN, jenkins.Spec.SlaveService.Port),
), ),
configureViewsGroovyScriptName: configureViews, configureViewsGroovyScriptName: configureViews,
disableJobDslScriptApprovalGroovyScriptName: disableJobDSLScriptApproval, disableJobDslScriptApprovalGroovyScriptName: disableJobDSLScriptApproval,
@ -201,5 +209,5 @@ func NewBaseConfigurationConfigMap(meta metav1.ObjectMeta, jenkins *v1alpha2.Jen
TypeMeta: buildConfigMapTypeMeta(), TypeMeta: buildConfigMapTypeMeta(),
ObjectMeta: meta, ObjectMeta: meta,
Data: groovyScriptsMap, Data: groovyScriptsMap,
} }, nil
} }

View File

@ -2,9 +2,10 @@ package resources
import ( import (
"fmt" "fmt"
"github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2" "github.com/jenkinsci/kubernetes-operator/pkg/apis/jenkins/v1alpha2"
"github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants" "github.com/jenkinsci/kubernetes-operator/pkg/controller/jenkins/constants"
"github.com/operator-framework/operator-sdk/pkg/k8sutil"
stackerr "github.com/pkg/errors"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
@ -43,33 +44,56 @@ func GetJenkinsSlavesServiceName(jenkins *v1alpha2.Jenkins) string {
} }
// GetJenkinsHTTPServiceFQDN returns Kubernetes service FQDN used for expose Jenkins HTTP endpoint // GetJenkinsHTTPServiceFQDN returns Kubernetes service FQDN used for expose Jenkins HTTP endpoint
func GetJenkinsHTTPServiceFQDN(jenkins *v1alpha2.Jenkins) string { func GetJenkinsHTTPServiceFQDN(jenkins *v1alpha2.Jenkins) (string, error) {
clusterDomain := getClusterDomain() clusterDomain, err := getClusterDomain()
if err != nil {
return "", err
}
return fmt.Sprintf("%s-http-%s.%s.svc.%s", constants.OperatorName, jenkins.ObjectMeta.Name, jenkins.ObjectMeta.Namespace, clusterDomain) return fmt.Sprintf("%s-http-%s.%s.svc.%s", constants.OperatorName, jenkins.ObjectMeta.Name, jenkins.ObjectMeta.Namespace, clusterDomain), nil
} }
// GetJenkinsSlavesServiceFQDN returns Kubernetes service FQDN used for expose Jenkins slave endpoint // GetJenkinsSlavesServiceFQDN returns Kubernetes service FQDN used for expose Jenkins slave endpoint
func GetJenkinsSlavesServiceFQDN(jenkins *v1alpha2.Jenkins) string { func GetJenkinsSlavesServiceFQDN(jenkins *v1alpha2.Jenkins) (string, error) {
clusterDomain := getClusterDomain() clusterDomain, err := getClusterDomain()
if err != nil {
return "", err
}
return fmt.Sprintf("%s-slave-%s.%s.svc.%s", constants.OperatorName, jenkins.ObjectMeta.Name, jenkins.ObjectMeta.Namespace, clusterDomain) return fmt.Sprintf("%s-slave-%s.%s.svc.%s", constants.OperatorName, jenkins.ObjectMeta.Name, jenkins.ObjectMeta.Namespace, clusterDomain), nil
} }
// GetClusterDomain returns Kubernetes cluster domain, default to "cluster.local" // GetClusterDomain returns Kubernetes cluster domain, default to "cluster.local"
func getClusterDomain() string { func getClusterDomain() (string, error) {
apiSvc := "kubernetes.default.svc"
clusterDomain := "cluster.local" clusterDomain := "cluster.local"
if ok, err := isRunningInCluster(); !ok {
return clusterDomain, nil
} else if err != nil {
return "", nil
}
apiSvc := "kubernetes.default.svc"
cname, err := net.LookupCNAME(apiSvc) cname, err := net.LookupCNAME(apiSvc)
if err != nil { if err != nil {
return clusterDomain return "", stackerr.WithStack(err)
} }
clusterDomain = strings.TrimPrefix(cname, "kubernetes.default.svc") clusterDomain = strings.TrimPrefix(cname, "kubernetes.default.svc")
clusterDomain = strings.TrimPrefix(clusterDomain, ".") clusterDomain = strings.TrimPrefix(clusterDomain, ".")
clusterDomain = strings.TrimSuffix(clusterDomain, ".") clusterDomain = strings.TrimSuffix(clusterDomain, ".")
return clusterDomain return clusterDomain, nil
}
func isRunningInCluster() (bool, error) {
_, err := k8sutil.GetOperatorNamespace()
if err != nil {
if err == k8sutil.ErrNoNamespace || err == k8sutil.ErrRunLocal {
return false, nil
}
return true, nil
}
return false, stackerr.WithStack(err)
} }

View File

@ -354,7 +354,10 @@ func (s SeedJobs) createAgent(jenkinsClient jenkinsclient.Jenkins, k8sClient cli
return err return err
} }
deployment := agentDeployment(jenkinsManifest, namespace, agentName, secret) deployment, err := agentDeployment(jenkinsManifest, namespace, agentName, secret)
if err != nil {
return err
}
err = k8sClient.Create(context.TODO(), deployment) err = k8sClient.Create(context.TODO(), deployment)
if apierrors.IsAlreadyExists(err) { if apierrors.IsAlreadyExists(err) {
@ -373,7 +376,15 @@ func agentDeploymentName(jenkins v1alpha2.Jenkins, agentName string) string {
return fmt.Sprintf("%s-%s", agentName, jenkins.Name) return fmt.Sprintf("%s-%s", agentName, jenkins.Name)
} }
func agentDeployment(jenkins *v1alpha2.Jenkins, namespace string, agentName string, secret string) *appsv1.Deployment { func agentDeployment(jenkins *v1alpha2.Jenkins, namespace string, agentName string, secret string) (*appsv1.Deployment, error) {
jenkinsSlavesServiceFQDN, err := resources.GetJenkinsSlavesServiceFQDN(jenkins)
if err != nil {
return nil, err
}
jenkinsHttpServiceFQDN, err := resources.GetJenkinsHTTPServiceFQDN(jenkins)
if err != nil {
return nil, err
}
return &appsv1.Deployment{ return &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: agentDeploymentName(*jenkins, agentName), Name: agentDeploymentName(*jenkins, agentName),
@ -403,7 +414,7 @@ func agentDeployment(jenkins *v1alpha2.Jenkins, namespace string, agentName stri
{ {
Name: "JENKINS_TUNNEL", Name: "JENKINS_TUNNEL",
Value: fmt.Sprintf("%s:%d", Value: fmt.Sprintf("%s:%d",
resources.GetJenkinsSlavesServiceFQDN(jenkins), jenkinsSlavesServiceFQDN,
jenkins.Spec.SlaveService.Port), jenkins.Spec.SlaveService.Port),
}, },
{ {
@ -417,7 +428,7 @@ func agentDeployment(jenkins *v1alpha2.Jenkins, namespace string, agentName stri
{ {
Name: "JENKINS_URL", Name: "JENKINS_URL",
Value: fmt.Sprintf("http://%s:%d", Value: fmt.Sprintf("http://%s:%d",
resources.GetJenkinsHTTPServiceFQDN(jenkins), jenkinsHttpServiceFQDN,
jenkins.Spec.Service.Port, jenkins.Spec.Service.Port,
), ),
}, },
@ -465,7 +476,7 @@ func agentDeployment(jenkins *v1alpha2.Jenkins, namespace string, agentName stri
}, },
}, },
}, },
} }, nil
} }
func seedJobCreatingGroovyScript(seedJob v1alpha2.SeedJob) (string, error) { func seedJobCreatingGroovyScript(seedJob v1alpha2.SeedJob) (string, error) {