Merge pull request #319 from mkarebski/feature/fix-local-run
#318 Fix running Jenkins-Operator locally
This commit is contained in:
commit
83685bbb74
|
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue