From 1b853463323a1b2330aee4f34e77a0619b8ef518 Mon Sep 17 00:00:00 2001 From: Tim Jaacks <tim.jaacks@garz-fricke.com> Date: Tue, 19 Jan 2021 12:56:52 +0100 Subject: [PATCH] Add error handling to retriggering jobs --- retrigger_mr_pipeline_job.py | 27 +++++++++++++-------------- retrigger_mr_pipeline_jobs.py | 17 +++++++++++++++-- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/retrigger_mr_pipeline_job.py b/retrigger_mr_pipeline_job.py index 5357ba67..b9b425ec 100755 --- a/retrigger_mr_pipeline_job.py +++ b/retrigger_mr_pipeline_job.py @@ -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__": diff --git a/retrigger_mr_pipeline_jobs.py b/retrigger_mr_pipeline_jobs.py index 95e40da9..24019bbf 100755 --- a/retrigger_mr_pipeline_jobs.py +++ b/retrigger_mr_pipeline_jobs.py @@ -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__": -- GitLab