Skip to content

Commit

Permalink
skip job check run status in workflow's deploy job
Browse files Browse the repository at this point in the history
Signed-off-by: Patrick Zhao <[email protected]>
  • Loading branch information
PetrusZ committed Jun 27, 2024
1 parent cf430f0 commit 21fee23
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 9 deletions.
4 changes: 4 additions & 0 deletions pkg/microservice/aslan/core/common/service/kube/render.go
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,10 @@ func ReplaceWorkloadImages(rawYaml string, images []*commonmodels.Container) (st
if err := decoder.Decode(job); err != nil {
return "", nil, fmt.Errorf("unmarshal Job error: %v", err)
}
workloadRes = append(workloadRes, &WorkloadResource{
Name: resKind.Metadata.Name,
Type: resKind.Kind,
})
for i, container := range job.Spec.Template.Spec.Containers {
containerName := container.Name
if image, ok := imageMap[containerName]; ok {
Expand Down
15 changes: 12 additions & 3 deletions pkg/microservice/aslan/core/common/service/kube/workloads.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,16 @@ import (
)

func FetchSelectedWorkloads(namespace string, Resource []*WorkloadResource, kubeclient crClient.Client, clientSet *kubernetes.Clientset) ([]*appsv1.Deployment, []*appsv1.StatefulSet,
[]*batchv1.CronJob, []*batchv1beta1.CronJob, error) {
[]*batchv1.CronJob, []*batchv1beta1.CronJob, []*batchv1.Job, error) {
var deployments []*appsv1.Deployment
var statefulSets []*appsv1.StatefulSet
var cronJobs []*batchv1.CronJob
var betaCronJobs []*batchv1beta1.CronJob
var jobs []*batchv1.Job

k8sServerVersion, err := clientSet.Discovery().ServerVersion()
if err != nil {
return nil, nil, nil, nil, err
return nil, nil, nil, nil, nil, err
}

for _, item := range Resource {
Expand Down Expand Up @@ -70,7 +71,15 @@ func FetchSelectedWorkloads(namespace string, Resource []*WorkloadResource, kube
if cronjobBeta != nil && cronjobExists {
betaCronJobs = append(betaCronJobs, cronjobBeta)
}
case setting.Job:
job, jobExists, err := getter.GetJob(namespace, item.Name, kubeclient)
if jobExists && err == nil {
jobs = append(jobs, job)
}
if err != nil {
log.Errorf("failed to fetch job %s, error: %v", item.Name, err)
}
}
}
return deployments, statefulSets, cronJobs, betaCronJobs, nil
return deployments, statefulSets, cronJobs, betaCronJobs, jobs, nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ func (c *DeployJobCtl) updateSystemService(env *commonmodels.Product, currentYam
c.jobTaskSpec.RelatedPodLabels = append(c.jobTaskSpec.RelatedPodLabels, podLabels)
}
c.jobTaskSpec.ReplaceResources = append(c.jobTaskSpec.ReplaceResources, commonmodels.Resource{Name: us.GetName(), Kind: us.GetKind()})
case setting.CronJob:
case setting.CronJob, setting.Job:
c.jobTaskSpec.ReplaceResources = append(c.jobTaskSpec.ReplaceResources, commonmodels.Resource{Name: us.GetName(), Kind: us.GetKind()})
}
}
Expand All @@ -314,7 +314,7 @@ func (c *DeployJobCtl) updateExternalServiceModule(ctx context.Context, resource
var err error
var replaced bool

deployments, statefulSets, cronJobs, betaCronJobs, err := kube.FetchSelectedWorkloads(env.Namespace, resources, c.kubeClient, c.clientSet)
deployments, statefulSets, cronJobs, betaCronJobs, jobs, err := kube.FetchSelectedWorkloads(env.Namespace, resources, c.kubeClient, c.clientSet)
if err != nil {
return err
}
Expand Down Expand Up @@ -399,6 +399,27 @@ BetaCronLoop:
}
}
}
Job:
for _, job := range jobs {
for _, container := range job.Spec.Template.Spec.Containers {
if container.Name == serviceModule.ServiceModule {
return fmt.Errorf("job %s/%s/%s is not supported to update image", env.Namespace, job.Name, container.Name)
// err = updater.UpdateJobImage(job.Namespace, job.Name, serviceModule.ServiceModule, serviceModule.Image, c.kubeClient)
// if err != nil {
// return fmt.Errorf("failed to update container image in %s/job/%s/%s: %v", env.Namespace, job.Name, container.Name, err)
// }
// c.jobTaskSpec.ReplaceResources = append(c.jobTaskSpec.ReplaceResources, commonmodels.Resource{
// Kind: setting.Job,
// Container: container.Name,
// Origin: container.Image,
// Name: job.Name,
// })
// replaced = true
// c.jobTaskSpec.RelatedPodLabels = append(c.jobTaskSpec.RelatedPodLabels, job.Spec.Template.Labels)
break Job
}
}
}

if !replaced {
return fmt.Errorf("service %s container name %s is not found in env %s", c.jobTaskSpec.ServiceName, serviceModule.ServiceModule, c.jobTaskSpec.Env)
Expand Down
8 changes: 4 additions & 4 deletions pkg/microservice/aslan/core/vm/service/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,13 @@ func (v *VMJobStatusMap) Delete(key string) {
cache.NewRedisCache(utilconfig.RedisCommonCacheTokenDB()).Delete(vmJobKey(key))
}

func savaVMJobLog(job *vmmodel.VMJob, log string, logger *zap.SugaredLogger) (err error) {
func savaVMJobLog(job *vmmodel.VMJob, logContent string, logger *zap.SugaredLogger) (err error) {
if job.Status == string(config.StatusRunning) {
VMJobStatus.Set(job.ID.Hex())
}

var file string
if job != nil && job.LogFile == "" && log != "" {
if job != nil && job.LogFile == "" && logContent != "" {
file, err = util.CreateVMJobLogFile(job.ID.Hex())
if err != nil {
return fmt.Errorf("failed to generate tmp file, error: %s", err)
Expand All @@ -81,8 +81,8 @@ func savaVMJobLog(job *vmmodel.VMJob, log string, logger *zap.SugaredLogger) (er
file = job.LogFile
}

if log != "" {
err = util.WriteFile(file, []byte(log), 0644)
if logContent != "" {
err = util.WriteFile(file, []byte(logContent), 0644)
if err != nil {
return fmt.Errorf("failed to write log to file, error: %s", err)
}
Expand Down
15 changes: 15 additions & 0 deletions pkg/tool/kube/updater/job.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package updater

import (
"context"
"fmt"

batchv1 "k8s.io/api/batch/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -74,3 +75,17 @@ func DeleteJobsAndWait(ns string, selector labels.Selector, cl client.Client) er
}
return deleteObjectsAndWait(ns, selector, &batchv1.Job{}, gvk, cl)
}

func PatchJob(ns, name string, patchBytes []byte, cl client.Client) error {
return patchObject(&batchv1.Job{
ObjectMeta: metav1.ObjectMeta{
Namespace: ns,
Name: name,
},
}, patchBytes, cl)
}

func UpdateJobImage(ns, name, container, image string, cl client.Client) error {
patchBytes := []byte(fmt.Sprintf(`{"spec":{"template":{"spec":{"containers":[{"name":"%s","image":"%s"}]}}}}`, container, image))
return PatchJob(ns, name, patchBytes, cl)
}

0 comments on commit 21fee23

Please sign in to comment.