in controller/merge_request/controller.go [219:296]
func (c *Controller) triggerJobProvisioner(
ctx context.Context,
instance *gerritService.GerritMergeRequest,
cb *codebaseSvc.Codebase,
) error {
if instance.Status.Value != gerritService.StatusMerged {
return nil
}
js, ok := instance.Annotations[registry.MRAnnotationActions]
if !ok {
return nil
}
var actions []string
if err := json.Unmarshal([]byte(js), &actions); err != nil {
return fmt.Errorf("unable to unmarshal actions")
}
backupSchedule := false
for _, a := range actions {
if a == registry.MRActionBackupSchedule {
backupSchedule = true
}
}
if !backupSchedule {
return nil
}
if cb.Spec.JobProvisioning == nil {
return fmt.Errorf("project has no job provisioning")
}
gitServer, err := c.gitServerService.Get(cb.Spec.GitServer)
if err != nil {
return fmt.Errorf("failed to get gitService CR: %w", err)
}
if err := c.jenkinsService.CreateJobBuildRun(
ctx,
fmt.Sprintf("backup-schedule-%d", time.Now().Unix()),
fmt.Sprintf("/job-provisions/job/ci/job/%s", *cb.Spec.JobProvisioning),
map[string]string{
"NAME": cb.Name,
"TYPE": cb.Spec.Type,
"BUILD_TOOL": cb.Spec.BuildTool,
"BRANCH": cb.Spec.DefaultBranch,
"GIT_SERVER_CR_NAME": cb.Spec.GitServer,
"GIT_SERVER_CR_VERSION": "v2",
"GIT_CREDENTIALS_ID": "gerrit-ciuser-sshkey",
"REPOSITORY_PATH": fmt.Sprintf("ssh://%s@gerrit:31000/%s", gitServer.Spec.GitUser, cb.Name),
"JIRA_INTEGRATION_ENABLED": "false",
},
); err != nil {
return fmt.Errorf("unable to create job build run")
}
var replaceActions []string
for _, a := range actions {
if a != registry.MRActionBackupSchedule {
replaceActions = append(replaceActions, a)
}
}
bts, err := json.Marshal(replaceActions)
if err != nil {
return fmt.Errorf("unable to marshal json, %w", err)
}
instance.Annotations[registry.MRAnnotationActions] = string(bts)
if err := c.k8sClient.Update(ctx, instance); err != nil {
return fmt.Errorf("unable to update MR instance, %w", err)
}
return nil
}