From 67247c21ee6def0daa15356763d67854c7913fc5 Mon Sep 17 00:00:00 2001 From: Sai Raveendra Kandregula Date: Wed, 22 Jan 2025 16:03:46 +0530 Subject: [PATCH 1/8] Pipeline SCM Element Get Bug Fix --- jenkinsapi/job.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/jenkinsapi/job.py b/jenkinsapi/job.py index 00df4714..809e7fd2 100644 --- a/jenkinsapi/job.py +++ b/jenkinsapi/job.py @@ -539,6 +539,13 @@ def get_scm_type(self): if scm_element: # multibranch pipeline. self._scm_prefix = multibranch_scm_prefix + if not scm_element: + pipeline_scm_prefix = "definition/" + _pipeline_scm_path = pipeline_scm_prefix + "scm" + scm_element = element_tree.find(_pipeline_scm_path) + if scm_element: + # standard pipeline. + self._scm_prefix = pipeline_scm_prefix scm_class = scm_element.get("class") if scm_element else None scm = self._scm_map.get(scm_class) if not scm: From 34466fb3000005bd31dc711d57d9922b712400d2 Mon Sep 17 00:00:00 2001 From: Sai Raveendra Kandregula Date: Thu, 24 Apr 2025 09:01:34 +0530 Subject: [PATCH 2/8] Updated Alternate SCM elements search logic --- jenkinsapi/job.py | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/jenkinsapi/job.py b/jenkinsapi/job.py index 809e7fd2..0505608f 100644 --- a/jenkinsapi/job.py +++ b/jenkinsapi/job.py @@ -531,21 +531,26 @@ def load_config(self): def get_scm_type(self): element_tree = self._get_config_element_tree() scm_element = element_tree.find("scm") + multibranch_scm_prefix = "properties/org.jenkinsci.plugins.\ + workflow.multibranch.BranchJobProperty/branch/" + pipeline_scm_prefix = "definition/" + alt_scm_elems = [ + { + "prefix" : multibranch_scm_prefix, # multibranch pipeline. + "path" : multibranch_scm_prefix + "scm" + }, + { + "prefix" : pipeline_scm_prefix, # standard pipeline. + "path" : pipeline_scm_prefix + "scm" + }, + ] if not scm_element: - multibranch_scm_prefix = "properties/org.jenkinsci.plugins.\ - workflow.multibranch.BranchJobProperty/branch/" - multibranch_path = multibranch_scm_prefix + "scm" - scm_element = element_tree.find(multibranch_path) - if scm_element: - # multibranch pipeline. - self._scm_prefix = multibranch_scm_prefix - if not scm_element: - pipeline_scm_prefix = "definition/" - _pipeline_scm_path = pipeline_scm_prefix + "scm" - scm_element = element_tree.find(_pipeline_scm_path) - if scm_element: - # standard pipeline. - self._scm_prefix = pipeline_scm_prefix + for scm_elm_conf in alt_scm_elems: + scm_element = element_tree.find(scm_elm_conf['path']) + if scm_element: + # SCM Element found. + self._scm_prefix = scm_elm_conf['prefix'] + break scm_class = scm_element.get("class") if scm_element else None scm = self._scm_map.get(scm_class) if not scm: From 8bf5c1e873b74d6c088334e1e0c034667f38482f Mon Sep 17 00:00:00 2001 From: Sai Raveendra Kandregula Date: Thu, 24 Apr 2025 09:02:10 +0530 Subject: [PATCH 3/8] Added Pipeline SCM Test --- jenkinsapi_tests/systests/job_configs.py | 50 +++++++++++++++++++ .../systests/test_job_pipeline_scm.py | 25 ++++++++++ 2 files changed, 75 insertions(+) create mode 100644 jenkinsapi_tests/systests/test_job_pipeline_scm.py diff --git a/jenkinsapi_tests/systests/job_configs.py b/jenkinsapi_tests/systests/job_configs.py index 35fa782e..6f894ba7 100644 --- a/jenkinsapi_tests/systests/job_configs.py +++ b/jenkinsapi_tests/systests/job_configs.py @@ -339,3 +339,53 @@ """.strip() + +PIPELINE_SCM_CONF_TEST_PARAMS = { + "scm_class" : "hudson.plugins.git.GitSCM", + "git_url" : "https://example.com/sairk/pipeline-test.git" +} + +PIPELINE_SCM_JOB = f""" + + + + + + + + + + + + false + + + GitLab + + false + + + + + 2 + + + {PIPELINE_SCM_CONF_TEST_PARAMS['git_url']} + 09aef3c0-4b97-4b42-b23a-29d134dfb763 + + + + + main + + + false + + + + Jenkinsfile + true + + + false +""" diff --git a/jenkinsapi_tests/systests/test_job_pipeline_scm.py b/jenkinsapi_tests/systests/test_job_pipeline_scm.py new file mode 100644 index 00000000..c0249a14 --- /dev/null +++ b/jenkinsapi_tests/systests/test_job_pipeline_scm.py @@ -0,0 +1,25 @@ +import pytest +from jenkinsapi_tests.systests.job_configs import PIPELINE_SCM_CONF_TEST_PARAMS, PIPELINE_SCM_JOB +from jenkinsapi.build import Build +from jenkinsapi.job import Job + +@pytest.fixture(scope="function") +def jenkins(mocker): + return mocker.MagicMock() + +@pytest.fixture(scope="function") +def job(monkeypatch, jenkins): + def fake_get_config(cls, tree=None): # pylint: disable=unused-argument + return PIPELINE_SCM_JOB + + monkeypatch.setattr(Job, "get_config", fake_get_config) + + fake_job = Job("http://", "Fake_Job", jenkins) + return fake_job + +def test_pipeline_scm(job : Job): + """ + Can we extract git build revision data from a build object? + """ + assert job.get_scm_type() == job._scm_map[PIPELINE_SCM_CONF_TEST_PARAMS['scm_class']] + assert job.get_scm_url()[0] == PIPELINE_SCM_CONF_TEST_PARAMS['git_url'] \ No newline at end of file From 23e00526ebca640354ece6418636b40b44df827f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 03:32:22 +0000 Subject: [PATCH 4/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- jenkinsapi/job.py | 12 ++++++------ jenkinsapi_tests/systests/job_configs.py | 4 ++-- .../systests/test_job_pipeline_scm.py | 17 +++++++++++++---- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/jenkinsapi/job.py b/jenkinsapi/job.py index 0505608f..573f35ba 100644 --- a/jenkinsapi/job.py +++ b/jenkinsapi/job.py @@ -536,20 +536,20 @@ def get_scm_type(self): pipeline_scm_prefix = "definition/" alt_scm_elems = [ { - "prefix" : multibranch_scm_prefix, # multibranch pipeline. - "path" : multibranch_scm_prefix + "scm" + "prefix": multibranch_scm_prefix, # multibranch pipeline. + "path": multibranch_scm_prefix + "scm", }, { - "prefix" : pipeline_scm_prefix, # standard pipeline. - "path" : pipeline_scm_prefix + "scm" + "prefix": pipeline_scm_prefix, # standard pipeline. + "path": pipeline_scm_prefix + "scm", }, ] if not scm_element: for scm_elm_conf in alt_scm_elems: - scm_element = element_tree.find(scm_elm_conf['path']) + scm_element = element_tree.find(scm_elm_conf["path"]) if scm_element: # SCM Element found. - self._scm_prefix = scm_elm_conf['prefix'] + self._scm_prefix = scm_elm_conf["prefix"] break scm_class = scm_element.get("class") if scm_element else None scm = self._scm_map.get(scm_class) diff --git a/jenkinsapi_tests/systests/job_configs.py b/jenkinsapi_tests/systests/job_configs.py index 6f894ba7..3ed5e803 100644 --- a/jenkinsapi_tests/systests/job_configs.py +++ b/jenkinsapi_tests/systests/job_configs.py @@ -341,8 +341,8 @@ """.strip() PIPELINE_SCM_CONF_TEST_PARAMS = { - "scm_class" : "hudson.plugins.git.GitSCM", - "git_url" : "https://example.com/sairk/pipeline-test.git" + "scm_class": "hudson.plugins.git.GitSCM", + "git_url": "https://example.com/sairk/pipeline-test.git", } PIPELINE_SCM_JOB = f""" diff --git a/jenkinsapi_tests/systests/test_job_pipeline_scm.py b/jenkinsapi_tests/systests/test_job_pipeline_scm.py index c0249a14..650c0b76 100644 --- a/jenkinsapi_tests/systests/test_job_pipeline_scm.py +++ b/jenkinsapi_tests/systests/test_job_pipeline_scm.py @@ -1,12 +1,17 @@ import pytest -from jenkinsapi_tests.systests.job_configs import PIPELINE_SCM_CONF_TEST_PARAMS, PIPELINE_SCM_JOB +from jenkinsapi_tests.systests.job_configs import ( + PIPELINE_SCM_CONF_TEST_PARAMS, + PIPELINE_SCM_JOB, +) from jenkinsapi.build import Build from jenkinsapi.job import Job + @pytest.fixture(scope="function") def jenkins(mocker): return mocker.MagicMock() + @pytest.fixture(scope="function") def job(monkeypatch, jenkins): def fake_get_config(cls, tree=None): # pylint: disable=unused-argument @@ -17,9 +22,13 @@ def fake_get_config(cls, tree=None): # pylint: disable=unused-argument fake_job = Job("http://", "Fake_Job", jenkins) return fake_job -def test_pipeline_scm(job : Job): + +def test_pipeline_scm(job: Job): """ Can we extract git build revision data from a build object? """ - assert job.get_scm_type() == job._scm_map[PIPELINE_SCM_CONF_TEST_PARAMS['scm_class']] - assert job.get_scm_url()[0] == PIPELINE_SCM_CONF_TEST_PARAMS['git_url'] \ No newline at end of file + assert ( + job.get_scm_type() + == job._scm_map[PIPELINE_SCM_CONF_TEST_PARAMS["scm_class"]] + ) + assert job.get_scm_url()[0] == PIPELINE_SCM_CONF_TEST_PARAMS["git_url"] From bb5bf461e9019d09a846fcbef6ae3310cf771089 Mon Sep 17 00:00:00 2001 From: Sai Raveendra Kandregula Date: Thu, 24 Apr 2025 09:22:13 +0530 Subject: [PATCH 5/8] Updated Pipeline SCM Testcase --- .../systests/test_job_pipeline_scm.py | 27 ++++--------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/jenkinsapi_tests/systests/test_job_pipeline_scm.py b/jenkinsapi_tests/systests/test_job_pipeline_scm.py index 650c0b76..c393553c 100644 --- a/jenkinsapi_tests/systests/test_job_pipeline_scm.py +++ b/jenkinsapi_tests/systests/test_job_pipeline_scm.py @@ -1,32 +1,15 @@ -import pytest from jenkinsapi_tests.systests.job_configs import ( PIPELINE_SCM_CONF_TEST_PARAMS, PIPELINE_SCM_JOB, ) -from jenkinsapi.build import Build -from jenkinsapi.job import Job +from jenkinsapi_tests.test_utils.random_strings import random_string - -@pytest.fixture(scope="function") -def jenkins(mocker): - return mocker.MagicMock() - - -@pytest.fixture(scope="function") -def job(monkeypatch, jenkins): - def fake_get_config(cls, tree=None): # pylint: disable=unused-argument - return PIPELINE_SCM_JOB - - monkeypatch.setattr(Job, "get_config", fake_get_config) - - fake_job = Job("http://", "Fake_Job", jenkins) - return fake_job - - -def test_pipeline_scm(job: Job): +def test_pipeline_scm(jenkins): """ - Can we extract git build revision data from a build object? + Can we extract scm info from a pipeline scm job? """ + job_name = random_string() + job = jenkins.create_job(job_name, PIPELINE_SCM_JOB) assert ( job.get_scm_type() == job._scm_map[PIPELINE_SCM_CONF_TEST_PARAMS["scm_class"]] From 6f4a6a640ad052598e59b760a88481a2629339fd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 03:52:24 +0000 Subject: [PATCH 6/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- jenkinsapi_tests/systests/test_job_pipeline_scm.py | 1 + 1 file changed, 1 insertion(+) diff --git a/jenkinsapi_tests/systests/test_job_pipeline_scm.py b/jenkinsapi_tests/systests/test_job_pipeline_scm.py index c393553c..7c965dcb 100644 --- a/jenkinsapi_tests/systests/test_job_pipeline_scm.py +++ b/jenkinsapi_tests/systests/test_job_pipeline_scm.py @@ -4,6 +4,7 @@ ) from jenkinsapi_tests.test_utils.random_strings import random_string + def test_pipeline_scm(jenkins): """ Can we extract scm info from a pipeline scm job? From cbdb45e235b68de2a3a65ada41ac6a6bec9983bc Mon Sep 17 00:00:00 2001 From: Sai Raveendra Kandregula Date: Thu, 24 Apr 2025 09:49:54 +0530 Subject: [PATCH 7/8] Updated Pipeline SCM Conf --- jenkinsapi_tests/systests/job_configs.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/jenkinsapi_tests/systests/job_configs.py b/jenkinsapi_tests/systests/job_configs.py index 3ed5e803..cbc3268d 100644 --- a/jenkinsapi_tests/systests/job_configs.py +++ b/jenkinsapi_tests/systests/job_configs.py @@ -358,20 +358,13 @@ false - - - GitLab - - false - - + 2 {PIPELINE_SCM_CONF_TEST_PARAMS['git_url']} - 09aef3c0-4b97-4b42-b23a-29d134dfb763 From 76661b5569db52225d34950d88b8c91fd70a4ed3 Mon Sep 17 00:00:00 2001 From: Sai Raveendra Kandregula Date: Thu, 24 Apr 2025 10:06:29 +0530 Subject: [PATCH 8/8] Updated Pipeline SCM Conf --- jenkinsapi_tests/systests/job_configs.py | 25 +++--------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/jenkinsapi_tests/systests/job_configs.py b/jenkinsapi_tests/systests/job_configs.py index cbc3268d..b64b3fe5 100644 --- a/jenkinsapi_tests/systests/job_configs.py +++ b/jenkinsapi_tests/systests/job_configs.py @@ -346,21 +346,9 @@ } PIPELINE_SCM_JOB = f""" - - - - - - - - - - - - false - - - + + + 2 @@ -372,13 +360,6 @@ main - false - - - Jenkinsfile - true - - false """