func()

in pkg/controller/jenkins_jobbuildrun/controller.go [74:126]


func (r *Reconcile) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
	var result reconcile.Result

	reqLogger := r.log.WithValues("Request.Namespace", request.Namespace, "Request.Name", request.Name)
	reqLogger.V(2).Info("Reconciling JenkinsJobBuildRun has been started")

	var instance jenkinsApi.JenkinsJobBuildRun
	if err := r.client.Get(ctx, request.NamespacedName, &instance); err != nil {
		if k8serrors.IsNotFound(err) {
			reqLogger.Info("instance not found")

			return result, nil
		}

		return result, fmt.Errorf("failed to get JenkinsJobBuildRun instance: %w", err)
	}

	if instance.Status.Status == jenkinsApi.JobBuildRunStatusCompleted {
		reqLogger.V(2).Info("Reconciling JenkinsJobBuildRun has been finished, job already completed")

		if err := r.deleteExpiredBuilds(&instance); err != nil {
			return result, fmt.Errorf("failed to delete expired builds: %w", err)
		}

		return result, nil
	}

	jc, err := r.jenkinsClientFactory.MakeNewClient(&instance.ObjectMeta, instance.Spec.OwnerName)
	if err != nil {
		return result,
			fmt.Errorf("failed to create gojenkins client: %w", err)
	}

	requeue, err := tryToReconcile(&instance, jc)
	if err != nil {
		r.log.Error(err, "error during reconciliation", "instance", instance)

		result.RequeueAfter = helper.DefaultRequeueTime * time.Second

		return result, nil
	}

	result.RequeueAfter = requeue
	instance.Status.LastUpdated = metav1.NewTime(time.Now())

	if err := r.client.Status().Update(context.Background(), &instance); err != nil {
		r.log.Error(err, "unable to update status", "instance", instance)
	}

	reqLogger.V(2).Info("Reconciling JenkinsJobBuildRun has been finished")

	return result, nil
}