package groovy import ( "fmt" virtuslabv1alpha1 "github.com/VirtusLab/jenkins-operator/pkg/apis/virtuslab/v1alpha1" jenkinsclient "github.com/VirtusLab/jenkins-operator/pkg/controller/jenkins/client" "github.com/VirtusLab/jenkins-operator/pkg/controller/jenkins/jobs" "github.com/go-logr/logr" k8s "sigs.k8s.io/controller-runtime/pkg/client" ) // Groovy defines API for groovy scripts execution via jenkins job type Groovy struct { jenkinsClient jenkinsclient.Jenkins k8sClient k8s.Client logger logr.Logger jobName string scriptsPath string } // New creates new instance of Groovy func New(jenkinsClient jenkinsclient.Jenkins, k8sClient k8s.Client, logger logr.Logger, jobName, scriptsPath string) *Groovy { return &Groovy{ jenkinsClient: jenkinsClient, k8sClient: k8sClient, logger: logger, jobName: jobName, scriptsPath: scriptsPath, } } // ConfigureGroovyJob configures jenkins job for executing groovy scripts func (g *Groovy) ConfigureGroovyJob() error { _, err := g.jenkinsClient.CreateOrUpdateJob(fmt.Sprintf(configurationJobXMLFmt, g.scriptsPath, g.scriptsPath), g.jobName) if err != nil { return err } return nil } // EnsureGroovyJob executes groovy script and verifies jenkins job status according to reconciliation loop lifecycle // see https://wiki.jenkins.io/display/JENKINS/Jenkins+Script+Console func (g *Groovy) EnsureGroovyJob(hash string, jenkins *virtuslabv1alpha1.Jenkins) (bool, error) { jobsClient := jobs.New(g.jenkinsClient, g.k8sClient, g.logger) done, err := jobsClient.EnsureBuildJob(g.jobName, hash, map[string]string{}, jenkins, true) if err != nil { return false, err } return done, nil } const configurationJobXMLFmt = ` false false false `