mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-08-23 15:49:29 +00:00
Destroy steps after they are done (#2681)
Co-authored-by: 6543 <m.huber@kithara.com>
This commit is contained in:
parent
902877690d
commit
4198c447fb
@ -135,7 +135,6 @@ steps:
|
|||||||
repo: woodpeckerci/woodpecker-server
|
repo: woodpeckerci/woodpecker-server
|
||||||
dockerfile: docker/Dockerfile.server.multiarch
|
dockerfile: docker/Dockerfile.server.multiarch
|
||||||
platforms: *platforms_preview
|
platforms: *platforms_preview
|
||||||
logins: *publish_logins
|
|
||||||
tag: pull_${CI_COMMIT_PULL_REQUEST}
|
tag: pull_${CI_COMMIT_PULL_REQUEST}
|
||||||
when:
|
when:
|
||||||
evaluate: 'not (CI_COMMIT_PULL_REQUEST_LABELS contains "build_pr_images")'
|
evaluate: 'not (CI_COMMIT_PULL_REQUEST_LABELS contains "build_pr_images")'
|
||||||
|
@ -291,6 +291,22 @@ func (e *docker) TailStep(ctx context.Context, step *backend.Step, taskUUID stri
|
|||||||
return rc, nil
|
return rc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *docker) DestroyStep(ctx context.Context, step *backend.Step, taskUUID string) error {
|
||||||
|
log.Trace().Str("taskUUID", taskUUID).Msgf("stop step %s", step.Name)
|
||||||
|
|
||||||
|
containerName := toContainerName(step)
|
||||||
|
|
||||||
|
if err := e.client.ContainerKill(ctx, containerName, "9"); err != nil && !isErrContainerNotFoundOrNotRunning(err) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := e.client.ContainerRemove(ctx, containerName, removeOpts); err != nil && !isErrContainerNotFoundOrNotRunning(err) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (e *docker) DestroyWorkflow(_ context.Context, conf *backend.Config, taskUUID string) error {
|
func (e *docker) DestroyWorkflow(_ context.Context, conf *backend.Config, taskUUID string) error {
|
||||||
log.Trace().Str("taskUUID", taskUUID).Msgf("delete workflow environment")
|
log.Trace().Str("taskUUID", taskUUID).Msgf("delete workflow environment")
|
||||||
|
|
||||||
|
@ -325,6 +325,29 @@ func (e *kube) TailStep(ctx context.Context, step *types.Step, taskUUID string)
|
|||||||
// return rc, nil
|
// return rc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *kube) DestroyStep(ctx context.Context, step *types.Step, taskUUID string) error {
|
||||||
|
podName, err := dnsName(step.Name)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Trace().Str("taskUUID", taskUUID).Msgf("Stopping pod: %s", podName)
|
||||||
|
|
||||||
|
gracePeriodSeconds := int64(0) // immediately
|
||||||
|
dpb := metav1.DeletePropagationBackground
|
||||||
|
|
||||||
|
deleteOpts := metav1.DeleteOptions{
|
||||||
|
GracePeriodSeconds: &gracePeriodSeconds,
|
||||||
|
PropagationPolicy: &dpb,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := e.client.CoreV1().Pods(e.config.Namespace).Delete(ctx, podName, deleteOpts); err != nil && !errors.IsNotFound(err) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Destroy the pipeline environment.
|
// Destroy the pipeline environment.
|
||||||
func (e *kube) DestroyWorkflow(_ context.Context, conf *types.Config, taskUUID string) error {
|
func (e *kube) DestroyWorkflow(_ context.Context, conf *types.Config, taskUUID string) error {
|
||||||
log.Trace().Str("taskUUID", taskUUID).Msg("Deleting Kubernetes primitives")
|
log.Trace().Str("taskUUID", taskUUID).Msg("Deleting Kubernetes primitives")
|
||||||
@ -349,9 +372,7 @@ func (e *kube) DestroyWorkflow(_ context.Context, conf *types.Config, taskUUID s
|
|||||||
}
|
}
|
||||||
log.Trace().Msgf("Deleting pod: %s", stepName)
|
log.Trace().Msgf("Deleting pod: %s", stepName)
|
||||||
if err := e.client.CoreV1().Pods(e.config.Namespace).Delete(noContext, stepName, deleteOpts); err != nil {
|
if err := e.client.CoreV1().Pods(e.config.Namespace).Delete(noContext, stepName, deleteOpts); err != nil {
|
||||||
if errors.IsNotFound(err) {
|
if !errors.IsNotFound(err) {
|
||||||
log.Trace().Err(err).Msgf("Unable to delete pod %s", stepName)
|
|
||||||
} else {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,6 +215,11 @@ func (e *local) TailStep(_ context.Context, step *types.Step, taskUUID string) (
|
|||||||
return e.output, nil
|
return e.output, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *local) DestroyStep(_ context.Context, _ *types.Step, _ string) error {
|
||||||
|
// WaitStep already waits for the command to finish, so there is nothing to do here.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// DestroyWorkflow the pipeline environment.
|
// DestroyWorkflow the pipeline environment.
|
||||||
func (e *local) DestroyWorkflow(_ context.Context, _ *types.Config, taskUUID string) error {
|
func (e *local) DestroyWorkflow(_ context.Context, _ *types.Config, taskUUID string) error {
|
||||||
log.Trace().Str("taskUUID", taskUUID).Msgf("delete workflow environment")
|
log.Trace().Str("taskUUID", taskUUID).Msgf("delete workflow environment")
|
||||||
|
@ -28,22 +28,25 @@ type Engine interface {
|
|||||||
// IsAvailable check if the backend is available.
|
// IsAvailable check if the backend is available.
|
||||||
IsAvailable(ctx context.Context) bool
|
IsAvailable(ctx context.Context) bool
|
||||||
|
|
||||||
// Load the backend engine.
|
// Load loads the backend engine.
|
||||||
Load(ctx context.Context) error
|
Load(ctx context.Context) error
|
||||||
|
|
||||||
// SetupWorkflow the workflow environment.
|
// SetupWorkflow sets up the workflow environment.
|
||||||
SetupWorkflow(ctx context.Context, conf *Config, taskUUID string) error
|
SetupWorkflow(ctx context.Context, conf *Config, taskUUID string) error
|
||||||
|
|
||||||
// StartStep start the workflow step.
|
// StartStep starts the workflow step.
|
||||||
StartStep(ctx context.Context, step *Step, taskUUID string) error
|
StartStep(ctx context.Context, step *Step, taskUUID string) error
|
||||||
|
|
||||||
// WaitStep for the workflow step to complete and returns
|
// WaitStep waits for the workflow step to complete and returns
|
||||||
// the completion results.
|
// the completion results.
|
||||||
WaitStep(ctx context.Context, step *Step, taskUUID string) (*State, error)
|
WaitStep(ctx context.Context, step *Step, taskUUID string) (*State, error)
|
||||||
|
|
||||||
// TailStep the workflow step logs.
|
// TailStep tails the workflow step logs.
|
||||||
TailStep(ctx context.Context, step *Step, taskUUID string) (io.ReadCloser, error)
|
TailStep(ctx context.Context, step *Step, taskUUID string) (io.ReadCloser, error)
|
||||||
|
|
||||||
// DestroyWorkflow the workflow environment.
|
// DestroyStep destroys the workflow step.
|
||||||
|
DestroyStep(ctx context.Context, step *Step, taskUUID string) error
|
||||||
|
|
||||||
|
// DestroyWorkflow destroys the workflow environment.
|
||||||
DestroyWorkflow(ctx context.Context, conf *Config, taskUUID string) error
|
DestroyWorkflow(ctx context.Context, conf *Config, taskUUID string) error
|
||||||
}
|
}
|
||||||
|
@ -274,6 +274,10 @@ func (r *Runtime) exec(step *backend.Step) (*backend.State, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := r.engine.DestroyStep(r.ctx, step, r.taskUUID); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
if waitState.OOMKilled {
|
if waitState.OOMKilled {
|
||||||
return waitState, &OomError{
|
return waitState, &OomError{
|
||||||
Name: step.Name,
|
Name: step.Name,
|
||||||
|
Loading…
Reference in New Issue
Block a user