pkg/controller/jenkins_job/chain/trigger_job_provision.go (82 lines of code) (raw):

package chain import ( "context" "encoding/json" "fmt" "time" "github.com/go-logr/logr" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" jenkinsApi "github.com/epam/edp-jenkins-operator/v2/pkg/apis/v2/v1" jenkinsClient "github.com/epam/edp-jenkins-operator/v2/pkg/client/jenkins" "github.com/epam/edp-jenkins-operator/v2/pkg/controller/jenkins_job/chain/handler" "github.com/epam/edp-jenkins-operator/v2/pkg/service/platform" "github.com/epam/edp-jenkins-operator/v2/pkg/util/consts" plutil "github.com/epam/edp-jenkins-operator/v2/pkg/util/platform" ) type TriggerJobProvision struct { next handler.JenkinsJobHandler client client.Client ps platform.PlatformService log logr.Logger } func (h TriggerJobProvision) ServeRequest(jj *jenkinsApi.JenkinsJob) error { h.log.Info("start triggering job provision") if err := h.triggerJobProvision(jj); err != nil { if setStatusErr := h.setStatus(jj, consts.StatusFailed, jenkinsApi.Error); setStatusErr != nil { return fmt.Errorf("failed to update %v JenkinsJob status: %w", jj.Name, setStatusErr) } return err } if err := h.setStatus(jj, consts.StatusFinished, jenkinsApi.Success); err != nil { return fmt.Errorf("failed to update %v JenkinsJob status: %w", jj.Name, err) } return nextServeOrNil(h.next, jj) } func (h TriggerJobProvision) setStatus(jj *jenkinsApi.JenkinsJob, status string, result jenkinsApi.Result) error { jj.Status = jenkinsApi.JenkinsJobStatus{ Available: true, LastTimeUpdated: metav1.NewTime(time.Now()), Status: status, Action: jenkinsApi.TriggerJobProvision, Result: result, } return h.updateStatus(jj) } func (h TriggerJobProvision) updateStatus(jf *jenkinsApi.JenkinsJob) error { if err := h.client.Status().Update(context.TODO(), jf); err != nil { if err := h.client.Update(context.TODO(), jf); err != nil { return fmt.Errorf("failed to update status: %w", err) } } return nil } func (h TriggerJobProvision) initGoJenkinsClient(jj *jenkinsApi.JenkinsJob) (*jenkinsClient.JenkinsClient, error) { j, err := plutil.GetJenkinsInstanceOwner(h.client, jj.Name, jj.Namespace, jj.Spec.OwnerName, jj.GetOwnerReferences()) if err != nil { return nil, fmt.Errorf("failed to get owner jenkins for jenkins job %v: %w", jj.Name, err) } h.log.Info("Jenkins instance has been received", "name", j.Name) jClient, err := jenkinsClient.InitGoJenkinsClient(j, h.ps) if err != nil { return nil, fmt.Errorf("failed to init GoJenkinsClient: %w", err) } return jClient, nil } func (h TriggerJobProvision) triggerJobProvision(jj *jenkinsApi.JenkinsJob) error { h.log.Info("start triggering job provision", "name", jj.Spec.Job.Name) jc, err := h.initGoJenkinsClient(jj) if err != nil { return fmt.Errorf("failed to create gojenkins client: %w", err) } var jpc map[string]string if err = json.Unmarshal([]byte(jj.Spec.Job.Config), &jpc); err != nil { return fmt.Errorf("failed to unmarshal Jenkins Job Job Config: %w", err) } bn, err := jc.BuildJob(jj.Spec.Job.Name, jpc) if err != nil { return fmt.Errorf("failed to trigger job provisioning: %w", err) } h.log.Info("end triggering build job", "name", jj.Spec.Job.Name, "with BUILD_ID", *bn) return nil }