Skip to content

Commit 6aeead9

Browse files
authored
Merge branch 'jenkins-skip-build' of 'https://github.com/jjmerchante/grimoirelab-perceval'
Merges #872 Closes #872
2 parents 4923698 + 02004ef commit 6aeead9

3 files changed

Lines changed: 45 additions & 1 deletion

File tree

perceval/backends/core/jenkins.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ class Jenkins(Backend):
7373
ORIGIN_UNIQUE_FIELD = OriginUniqueField(name='url', type=str)
7474

7575
def __init__(self, url, user=None, api_token=None, tag=None, archive=None,
76-
detail_depth=DETAIL_DEPTH, sleep_time=SLEEP_TIME, blacklist_ids=None, ssl_verify=True):
76+
detail_depth=DETAIL_DEPTH, blacklist_builds=None, sleep_time=SLEEP_TIME,
77+
blacklist_ids=None, ssl_verify=True):
7778

7879
if (user and not api_token) or (not user and api_token):
7980
msg = "Authentication method requires user and api_token"
@@ -87,6 +88,7 @@ def __init__(self, url, user=None, api_token=None, tag=None, archive=None,
8788
self.api_token = api_token
8889
self.sleep_time = sleep_time
8990
self.blacklist_ids = blacklist_ids
91+
self.blacklist_builds = blacklist_builds or []
9092
self.detail_depth = detail_depth
9193

9294
self.client = None
@@ -133,6 +135,9 @@ def fetch_items(self, category, **kwargs):
133135
njobs += 1
134136

135137
for build in builds:
138+
if f"{job['name']}:{build['id']}" in self.blacklist_builds:
139+
logger.warning(f"Skipping blacklisted build: {job['name']}:{build['id']}")
140+
continue
136141
nbuilds += 1
137142
yield build
138143

@@ -144,6 +149,9 @@ def fetch_items(self, category, **kwargs):
144149
njobs += 1
145150

146151
for build in builds:
152+
if f"{job['name']}:{build['id']}" in self.blacklist_builds:
153+
logger.warning(f"Skipping blacklisted build: {job['name']}:{build['id']}")
154+
continue
147155
nbuilds += 1
148156
yield build
149157

@@ -342,6 +350,10 @@ def setup_cmd_parser(cls):
342350
group.add_argument('--sleep-time', dest='sleep_time',
343351
type=int, default=SLEEP_TIME,
344352
help="Minimun time to wait after a Timeout connection error.")
353+
group.add_argument('--blacklist-builds', dest='blacklist_builds',
354+
nargs='*', default=[],
355+
help="List of builds to be blacklisted. "
356+
"Format: 'job_name:build_id'.")
345357

346358
# Required arguments
347359
parser.parser.add_argument('url',
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
title: Blacklist option for builds in Jenkins
3+
category: added
4+
author: Jose Javier Merchante <jjmerchante@bitergia.com>
5+
issue: null
6+
notes: >
7+
Add blacklist functionality for builds in Jenkins integration.
8+
To ignore a build, you must define the job name and the build
9+
id with the following format: `--blacklist-builds job-id:1234`.

tests/test_jenkins.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,27 @@ def test_fetch_blacklist(self):
571571
# Builds just from JOB_BUILDS_2
572572
self.assertEqual(len(builds), 37)
573573

574+
@httpretty.activate
575+
def test_fetch_blacklist_build(self):
576+
"""Test whether builds in blacklist are not retrieved"""
577+
578+
blacklist = ["apex-build-brahmaputra:106",
579+
"apex-build-brahmaputra:107"]
580+
581+
configure_http_server()
582+
583+
jenkins = Jenkins(SERVER_URL, blacklist_builds=blacklist)
584+
585+
with self.assertLogs(logger, level='WARNING') as cm:
586+
builds = [build for build in jenkins.fetch()]
587+
self.assertIn('WARNING:perceval.backends.core.jenkins:'
588+
'Skipping blacklisted build: apex-build-brahmaputra:107', cm.output)
589+
self.assertIn('WARNING:perceval.backends.core.jenkins:'
590+
'Skipping blacklisted build: apex-build-brahmaputra:106', cm.output)
591+
592+
# Builds from JOB_BUILDS_1 + JOB_BUILDS_2 except those 2 in blacklist
593+
self.assertEqual(len(builds), 67)
594+
574595

575596
class TestJenkinsBackendArchive(TestCaseBackendArchive):
576597
"""Jenkins backend tests using an archive"""
@@ -834,6 +855,7 @@ def test_setup_cmd_parser(self):
834855

835856
args = ['--tag', 'test', '-u', USER, '-t', TOKEN,
836857
'--no-archive', '--sleep-time', '60', '--detail-depth', '2',
858+
'--blacklist-builds', 'job_1:123',
837859
'--blacklist-ids', '1', '2', '3', '4', '--',
838860
SERVER_URL]
839861

@@ -846,6 +868,7 @@ def test_setup_cmd_parser(self):
846868
self.assertEqual(parsed_args.sleep_time, 60)
847869
self.assertTrue(parsed_args.no_archive)
848870
self.assertListEqual(parsed_args.blacklist_ids, ['1', '2', '3', '4'])
871+
self.assertListEqual(parsed_args.blacklist_builds, ['job_1:123'])
849872

850873

851874
if __name__ == "__main__":

0 commit comments

Comments
 (0)