From b0fd8f2dfae587c1d6247c336c9036351ce56eee Mon Sep 17 00:00:00 2001 From: antoniaklja Date: Fri, 11 Jan 2019 10:14:15 +0100 Subject: [PATCH] Improve logging and update developer-guide.md --- docs/developer-guide.md | 8 ++++++ pkg/controller/jenkins/jenkins_controller.go | 12 ++++++++ pkg/controller/jenkins/jobs/jobs.go | 30 ++++++++++---------- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/docs/developer-guide.md b/docs/developer-guide.md index 5b337387..082f7b22 100644 --- a/docs/developer-guide.md +++ b/docs/developer-guide.md @@ -55,6 +55,14 @@ make e2e E2E_IMAGE=jenkins-operator ## Hacks +### Building docker image on minikube (for e2e tests) + +To be able to work with the docker daemon on `minikube` machine run the following command before building an image: + +```bash +eval $(minikube docker-env) +``` + ### `pkg/apis/virtuslab/v1alpha1/jenkins_types` has changed Run: diff --git a/pkg/controller/jenkins/jenkins_controller.go b/pkg/controller/jenkins/jenkins_controller.go index 5eddbe03..352571fb 100644 --- a/pkg/controller/jenkins/jenkins_controller.go +++ b/pkg/controller/jenkins/jenkins_controller.go @@ -2,6 +2,7 @@ package jenkins import ( "context" + "fmt" virtuslabv1alpha1 "github.com/VirtusLab/jenkins-operator/pkg/apis/virtuslab/v1alpha1" "github.com/VirtusLab/jenkins-operator/pkg/controller/jenkins/configuration/base" @@ -89,6 +90,17 @@ func (r *ReconcileJenkins) Reconcile(request reconcile.Request) (reconcile.Resul logger := r.buildLogger(request.Name) logger.Info("Reconciling Jenkins") + result, err := r.reconcile(request, logger) + if err != nil { + if errors.IsConflict(err) { + logger.V(log.VWarn).Info(fmt.Sprintf("The %s object has been modified, requeue reconciliation loop", request.Name)) + return reconcile.Result{Requeue: true}, nil + } + } + return result, err +} + +func (r *ReconcileJenkins) reconcile(request reconcile.Request, logger logr.Logger) (reconcile.Result, error) { // Fetch the Jenkins instance jenkins := &virtuslabv1alpha1.Jenkins{} err := r.client.Get(context.TODO(), request.NamespacedName, jenkins) diff --git a/pkg/controller/jenkins/jobs/jobs.go b/pkg/controller/jenkins/jobs/jobs.go index cb01f6ce..d27f02e0 100644 --- a/pkg/controller/jenkins/jobs/jobs.go +++ b/pkg/controller/jenkins/jobs/jobs.go @@ -52,7 +52,7 @@ func New(jenkinsClient client.Jenkins, k8sClient k8s.Client, logger logr.Logger) // function return 'true' when build finished successfully or false when reconciliation loop should requeue this function // preserveStatus determines that build won't be removed from Jenkins.Status.Builds section func (jobs *Jobs) EnsureBuildJob(jobName, hash string, parameters map[string]string, jenkins *virtuslabv1alpha1.Jenkins, preserveStatus bool) (done bool, err error) { - jobs.logger.Info(fmt.Sprintf("Ensuring build, name:'%s' hash:'%s'", jobName, hash)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring build, name:'%s' hash:'%s'", jobName, hash)) build, err := jobs.getBuildFromStatus(jobName, hash, jenkins) if err != nil { @@ -60,7 +60,7 @@ func (jobs *Jobs) EnsureBuildJob(jobName, hash string, parameters map[string]str } if build != nil { - jobs.logger.Info(fmt.Sprintf("Build exists in status, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Build exists in status, %+v", build)) switch build.Status { case virtuslabv1alpha1.BuildSuccessStatus: return jobs.ensureSuccessBuild(*build, jenkins, preserveStatus) @@ -100,11 +100,11 @@ func (jobs *Jobs) getBuildFromStatus(jobName string, hash string, jenkins *virtu } func (jobs *Jobs) ensureSuccessBuild(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins, preserveStatus bool) (bool, error) { - jobs.logger.Info(fmt.Sprintf("Ensuring success build, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring success build, %+v", build)) if !preserveStatus { err := jobs.removeBuildFromStatus(build, jenkins) - jobs.logger.Info(fmt.Sprintf("Removing build from status, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Removing build from status, %+v", build)) if err != nil { jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Couldn't remove build from status, %+v", build)) return false, err @@ -114,12 +114,12 @@ func (jobs *Jobs) ensureSuccessBuild(build virtuslabv1alpha1.Build, jenkins *vir } func (jobs *Jobs) ensureRunningBuild(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins, preserveStatus bool) (bool, error) { - jobs.logger.Info(fmt.Sprintf("Ensuring running build, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring running build, %+v", build)) // FIXME (antoniaklja) implement build expiration jenkinsBuild, err := jobs.jenkinsClient.GetBuild(build.JobName, build.Number) if isNotFoundError(err) { - jobs.logger.Info(fmt.Sprintf("Build still running , %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Build still running , %+v", build)) return false, nil } else if err != nil { jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Couldn't get jenkins build, %+v", build)) @@ -151,10 +151,10 @@ func (jobs *Jobs) ensureRunningBuild(build virtuslabv1alpha1.Build, jenkins *vir } func (jobs *Jobs) ensureFailedBuild(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins, parameters map[string]string, preserveStatus bool) (bool, error) { - jobs.logger.Info(fmt.Sprintf("Ensuring failed build, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring failed build, %+v", build)) if build.Retires < BuildRetires { - jobs.logger.Info(fmt.Sprintf("Retrying build, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Retrying build, %+v", build)) build.Retires = build.Retires + 1 _, err := jobs.buildJob(build, parameters, jenkins) if err != nil { @@ -164,10 +164,10 @@ func (jobs *Jobs) ensureFailedBuild(build virtuslabv1alpha1.Build, jenkins *virt return false, nil } - jobs.logger.Info(fmt.Sprintf("The retries limit was reached , %+v", build)) + jobs.logger.V(log.VWarn).Info(fmt.Sprintf("The retries limit was reached , %+v", build)) if !preserveStatus { - jobs.logger.Info(fmt.Sprintf("Removing build from status, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Removing build from status, %+v", build)) err := jobs.removeBuildFromStatus(build, jenkins) if err != nil { jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Couldn't remove build from status, %+v", build)) @@ -178,7 +178,7 @@ func (jobs *Jobs) ensureFailedBuild(build virtuslabv1alpha1.Build, jenkins *virt } func (jobs *Jobs) ensureExpiredBuild(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins, preserveStatus bool) (bool, error) { - jobs.logger.Info(fmt.Sprintf("Ensuring expired build, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Ensuring expired build, %+v", build)) jenkinsBuild, err := jobs.jenkinsClient.GetBuild(build.JobName, build.Number) if err != nil { @@ -207,7 +207,7 @@ func (jobs *Jobs) ensureExpiredBuild(build virtuslabv1alpha1.Build, jenkins *vir // TODO(antoniaklja) clean up k8s resources if !preserveStatus { - jobs.logger.Info(fmt.Sprintf("Removing build from status, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Removing build from status, %+v", build)) err = jobs.removeBuildFromStatus(build, jenkins) if err != nil { jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Couldn't remove build from status, %+v", build)) @@ -237,12 +237,12 @@ func (jobs *Jobs) removeBuildFromStatus(build virtuslabv1alpha1.Build, jenkins * func (jobs *Jobs) buildJob(build virtuslabv1alpha1.Build, parameters map[string]string, jenkins *virtuslabv1alpha1.Jenkins) (bool, error) { job, err := jobs.jenkinsClient.GetJob(build.JobName) if err != nil { - jobs.logger.Info(fmt.Sprintf("Couldn't find jenkins job, %+v", build)) + jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Couldn't find jenkins job, %+v", build)) return false, err } nextBuildNumber := job.GetDetails().NextBuildNumber - jobs.logger.Info(fmt.Sprintf("Running build, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Running build, %+v", build)) _, err = jobs.jenkinsClient.BuildJob(build.JobName, parameters) if err != nil { jobs.logger.V(log.VWarn).Info(fmt.Sprintf("Couldn't run build, %+v", build)) @@ -261,7 +261,7 @@ func (jobs *Jobs) buildJob(build virtuslabv1alpha1.Build, parameters map[string] } func (jobs *Jobs) updateBuildStatus(build virtuslabv1alpha1.Build, jenkins *virtuslabv1alpha1.Jenkins) error { - jobs.logger.Info(fmt.Sprintf("Updating build status, %+v", build)) + jobs.logger.V(log.VDebug).Info(fmt.Sprintf("Updating build status, %+v", build)) // get index of existing build from status if exists buildIndex := -1 for index, existingBuild := range jenkins.Status.Builds {