diff --git a/jenkins_jobs/modules/triggers.py b/jenkins_jobs/modules/triggers.py index 35b6d3a33..50534c58e 100644 --- a/jenkins_jobs/modules/triggers.py +++ b/jenkins_jobs/modules/triggers.py @@ -407,6 +407,39 @@ def github_pull_request(parser, xml_parent, data): data.get('auto-close-on-fail', False)).lower() +def gitlab_merge_request(parser, xml_parent, data): + """yaml: gitlab-merge-request + Build merge requests in gitlab and report results. + Requires the Jenkins `Gitlab MergeRequest Builder Plugin. + `_ + + :arg string cron: cron syntax of when to run (required) + :arg string project-path: gitlab-relative path to project (required) + + Example: + + .. literalinclude:: \ + /../../tests/triggers/fixtures/gitlab-merge-request.yaml + """ + ghprb = XML.SubElement(xml_parent, 'org.jenkinsci.plugins.gitlab.' + 'GitlabBuildTrigger') + if not data.get('cron', None): + raise jenkins_jobs.errors.JenkinsJobsException( + 'gitlab-merge-request is missing "cron"') + if not data.get('project-path', None): + raise jenkins_jobs.errors.JenkinsJobsException( + 'gitlab-merge-request is missing "project-path"') + + # Because of a design limitation in the GitlabBuildTrigger Jenkins plugin + # both 'spec' and '__cron' have to be set to the same value to have them + # take effect. Also, cron and projectPath are prefixed with underscores + # in the plugin, but spec is not. + XML.SubElement(ghprb, 'spec').text = data.get('cron') + XML.SubElement(ghprb, '__cron').text = data.get('cron') + XML.SubElement(ghprb, '__projectPath').text = data.get('project-path') + + def build_result(parser, xml_parent, data): """yaml: build-result Configure jobB to monitor jobA build result. A build is scheduled if there diff --git a/setup.cfg b/setup.cfg index 6bda4b43b..ec087679a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -171,6 +171,7 @@ jenkins_jobs.triggers = gerrit=jenkins_jobs.modules.triggers:gerrit github=jenkins_jobs.modules.triggers:github github-pull-request=jenkins_jobs.modules.triggers:github_pull_request + gitlab-merge-request=jenkins_jobs.modules.triggers:gitlab_merge_request pollscm=jenkins_jobs.modules.triggers:pollscm script=jenkins_jobs.modules.triggers:script timed=jenkins_jobs.modules.triggers:timed diff --git a/tests/triggers/fixtures/gitlab-merge-request.xml b/tests/triggers/fixtures/gitlab-merge-request.xml new file mode 100644 index 000000000..3b74c410d --- /dev/null +++ b/tests/triggers/fixtures/gitlab-merge-request.xml @@ -0,0 +1,10 @@ + + + + + * * * * * + <__cron>* * * * * + <__projectPath>test/project + + + diff --git a/tests/triggers/fixtures/gitlab-merge-request.yaml b/tests/triggers/fixtures/gitlab-merge-request.yaml new file mode 100644 index 000000000..622f157d6 --- /dev/null +++ b/tests/triggers/fixtures/gitlab-merge-request.yaml @@ -0,0 +1,4 @@ +triggers: + - gitlab-merge-request: + cron: '* * * * *' + project-path: 'test/project'