Skip to content
Snippets Groups Projects
Commit 1b853463 authored by Tim Jaacks's avatar Tim Jaacks
Browse files

Add error handling to retriggering jobs

parent 8c6cfd50
No related branches found
No related tags found
1 merge request!28Add error handling to retriggering jobs
Pipeline #8143 passed with stage
in 19 seconds
......@@ -6,7 +6,7 @@ import sys
from gitlab import Gitlab, GitlabGetError
def retrigger_mr_pipeline_job(project, mr, job_name):
def retrigger_mr_pipeline_job(project, mr, job_name, status_list):
# Get pipeline
pipeline = project.pipelines.get(mr.pipeline.get("id"), retry_transient_errors=True)
......@@ -15,20 +15,19 @@ def retrigger_mr_pipeline_job(project, mr, job_name):
for pipelinejob in pipeline.jobs.list():
if pipelinejob.name == job_name:
job = project.jobs.get(pipelinejob.id, retry_transient_errors=True)
if not job:
sys.exit(
"ERROR: could not find job '%s' in pipeline of !%s" % (job_name, mr.iid)
)
print("Could not find job '%s' in pipeline of !%s" % (job_name, mr.iid))
return None
# Only retrigger if job is in certain status
if job.status not in status_list:
return None
# Retrigger if not already failed
if job.status not in ["failed", "skipped"]:
job.retry()
print("Retrigger job '%s' of pipeline #%s:" % (job_name, pipeline.id))
job = project.jobs.get(job.id, retry_transient_errors=True)
print(job.web_url)
else:
job = None
# Retrigger job
job.retry()
print("Retrigger job '%s' of pipeline #%s:" % (job_name, pipeline.id))
job = project.jobs.get(job.id, retry_transient_errors=True)
print(job.web_url)
return job
......@@ -80,7 +79,7 @@ def main():
if not mr:
sys.exit("ERROR: could not find merge request %s!%s" % (project.name, args.iid))
retrigger_mr_pipeline_job(project, mr, args.job)
retrigger_mr_pipeline_job(project, mr, args.job, ["success", "running"])
if __name__ == "__main__":
......
......@@ -2,7 +2,8 @@
import common
import argparse
from gitlab import Gitlab
import sys
from gitlab import Gitlab, GitlabJobRetryError
from get_merge_requests import get_merge_requests
from retrigger_mr_pipeline_job import retrigger_mr_pipeline_job
......@@ -72,8 +73,20 @@ def main():
commit=args.commit,
)
failed = 0
for mr in mrs:
retrigger_mr_pipeline_job(project, mr, args.job)
try:
retrigger_mr_pipeline_job(project, mr, args.job, ["success", "running"])
except GitlabJobRetryError as e:
print(
"ERROR: Could not retrigger job '%s' of %s!%s: %s"
% (args.job, args.project, mr.iid, e)
)
failed = failed + 1
continue
if failed > 0:
sys.exit(1)
if __name__ == "__main__":
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment