diff --git a/jenkins_jobs/modules/builders.py b/jenkins_jobs/modules/builders.py index 8efd38409..9fa9780d9 100644 --- a/jenkins_jobs/modules/builders.py +++ b/jenkins_jobs/modules/builders.py @@ -115,6 +115,7 @@ def copyartifact(parser, xml_parent, data): * **permalink** * **workspace-latest** * **build-param** + * **downstream-build** :arg str build-number: specifies the build number to get when when specific-build is specified as which-build @@ -135,6 +136,11 @@ def copyartifact(parser, xml_parent, data): last successful build when upstream-build is specified as which-build :arg string param: specifies to use a build parameter to get the build when build-param is specified as which-build + :arg str upstream-project-name: specifies the project name of downstream + when downstream-build is specified as which-build + :arg str upstream-build-number: specifies the number of the build to + find its downstream build when downstream-build is specified as + which-build :arg string parameter-filters: Filter matching jobs based on these parameters (optional) diff --git a/jenkins_jobs/modules/helpers.py b/jenkins_jobs/modules/helpers.py index 481825ac6..15844a6a6 100644 --- a/jenkins_jobs/modules/helpers.py +++ b/jenkins_jobs/modules/helpers.py @@ -172,7 +172,8 @@ def copyartifact_build_selector(xml_parent, data, select_tag='selector'): 'upstream-build': 'TriggeredBuildSelector', 'permalink': 'PermalinkBuildSelector', 'workspace-latest': 'WorkspaceSelector', - 'build-param': 'ParameterizedBuildSelector'} + 'build-param': 'ParameterizedBuildSelector', + 'downstream-build': 'DownstreamBuildSelector'} if select not in selectdict: raise InvalidAttributeError('which-build', select, @@ -203,6 +204,11 @@ def copyartifact_build_selector(xml_parent, data, select_tag='selector'): XML.SubElement(selector, 'id').text = permalinkdict[permalink] if select == 'build-param': XML.SubElement(selector, 'parameterName').text = data['param'] + if select == 'downstream-build': + XML.SubElement(selector, 'upstreamProjectName').text = ( + data['upstream-project-name']) + XML.SubElement(selector, 'upstreamBuildNumber').text = ( + data['upstream-build-number']) def findbugs_settings(xml_parent, data): diff --git a/tests/builders/fixtures/copy-artifact003.xml b/tests/builders/fixtures/copy-artifact003.xml new file mode 100644 index 000000000..3ccfb193f --- /dev/null +++ b/tests/builders/fixtures/copy-artifact003.xml @@ -0,0 +1,18 @@ + + + + + foo + *.tar.gz + /home/foo + true + true + true + PUBLISH=true + + bar + 123 + + + + diff --git a/tests/builders/fixtures/copy-artifact003.yaml b/tests/builders/fixtures/copy-artifact003.yaml new file mode 100644 index 000000000..45a494997 --- /dev/null +++ b/tests/builders/fixtures/copy-artifact003.yaml @@ -0,0 +1,12 @@ +builders: + - copyartifact: + project: foo + filter: "*.tar.gz" + target: /home/foo + which-build: downstream-build + upstream-project-name: bar + upstream-build-number: "123" + optional: true + flatten: true + do-not-fingerprint: true + parameter-filters: PUBLISH=true