Skip to content

Commit

Permalink
[JENKINS-31789] Added GitLab Plugin support
Browse files Browse the repository at this point in the history
Added missing TestCases for GitLab Plugin: check values and use lowercase syntax

Fixed values since rebuildOpenMergeRequest only accepts never, source, both

Added a release notes for GitLab Plugin
  • Loading branch information
v1v authored and Victor Martinez committed Dec 16, 2015
1 parent 6532c4b commit b41056b
Show file tree
Hide file tree
Showing 5 changed files with 244 additions and 1 deletion.
4 changes: 3 additions & 1 deletion docs/Home.md
Expand Up @@ -21,6 +21,8 @@ Browse the Jenkins issue tracker to see any [open issues](https://issues.jenkins

## Release Notes
* 1.42 (unreleased)
* Added support for the [GitLab Plugin](https://wiki.jenkins-ci.org/display/JENKINS/GitLab+Plugin)
([JENKINS-31789](https://issues.jenkins-ci.org/browse/JENKINS-31789))
* Added support for the [Ruby Metrics Plugin](https://wiki.jenkins-ci.org/display/JENKINS/RubyMetrics+plugin)
([JENKINS-31830](https://issues.jenkins-ci.org/browse/JENKINS-31830))
* Added support for the [DOS Trigger Plugin](https://wiki.jenkins-ci.org/display/JENKINS/DOS+Trigger)
Expand Down Expand Up @@ -631,4 +633,4 @@ Browse the Jenkins issue tracker to see any [open issues](https://issues.jenkins
* extendedEmail(recipients, subject, content, closure) - Configure email-ext plugin
* gerrit(closure) - Configure Gerrit Trigger plugin
* 1.0
* Initial release
* Initial release
@@ -0,0 +1,26 @@
job('example') {
scm {
git {
remote {
name('origin')
url('git@serverA:account/repo1.git')
}
}
}
triggers {
gitlabPush {
buildOnMergeRequestEvents(false)
buildOnPushEvents(false)
enableCiSkip(false)
setBuildDescription(false)
addNoteOnMergeRequest(false)
rebuildOpenMergeRequest('never')
addVoteOnMergeRequest(false)
useCiFeatures(false)
acceptMergeRequestOnSuccess()
allowAllBranches(false)
includeBranches('include1,include2')
excludeBranches('exclude1,exclude2')
}
}
}
@@ -0,0 +1,112 @@
package javaposse.jobdsl.dsl.helpers.triggers

import javaposse.jobdsl.dsl.Context

import static javaposse.jobdsl.dsl.Preconditions.checkArgument

class GitlabTriggerContext implements Context {
private static final Set<String> VALID_EXECUTION_STATUSES = ['never', 'source', 'both']
String includeBranches = ''
String excludeBranches = ''
String rebuildOpenMergeRequest = 'never'
boolean buildOnMergeRequestEvents = true
boolean buildOnPushEvents = true
boolean enableCiSkip = true
boolean setBuildDescription = true
boolean addNoteOnMergeRequest = true
boolean addVoteOnMergeRequest = true
boolean useCiFeatures = false
boolean acceptMergeRequestOnSuccess = false
boolean allowAllBranches = false

/**
* Comma-separated list of source branches allowed to trigger a build from a Push event
*/
void includeBranches(String includeBranches) {
this.includeBranches = includeBranches
}

/**
* Comma-separated list of source branches disabled to trigger a build from a Push event
*/
void excludeBranches(String excludeBranches) {
this.excludeBranches = excludeBranches
}

/**
* If set, builds on merge request events. Defaults to {@code true}.
*/
void buildOnMergeRequestEvents(boolean buildOnMergeRequestEvents = true) {
this.buildOnMergeRequestEvents = buildOnMergeRequestEvents
}

/**
* If set, builds on push events request events. Defaults to {@code true}.
*/
void buildOnPushEvents(boolean buildOnPushEvents = true) {
this.buildOnPushEvents = buildOnPushEvents
}

/**
* If set, enables [ci-skip]. Defaults to {@code true}.
*/
void enableCiSkip(boolean enableCiSkip = true) {
this.enableCiSkip = enableCiSkip
}

/**
* If set, sets build description to build cause (eg. Merge request or Git Push) . Defaults to {@code true}.
*/
void setBuildDescription(boolean setBuildDescription = true) {
this.setBuildDescription = setBuildDescription
}

/**
* If set, adds note with build status on merge requests. Defaults to {@code true}.
*/
void addNoteOnMergeRequest(boolean addNoteOnMergeRequest = true) {
this.addNoteOnMergeRequest = addNoteOnMergeRequest
}

/**
* If set, vote added to note with build status on merge requests. Defaults to {@code true}.
*/
void addVoteOnMergeRequest(boolean addVoteOnMergeRequest = true) {
this.addVoteOnMergeRequest = addVoteOnMergeRequest
}

/**
* If set, enables GitLab 8.1 Continuous Integration feature. Defaults to {@code false}.
*/
void useCiFeatures(boolean useCiFeatures = true) {
this.useCiFeatures = useCiFeatures
}

/**
* If set, accepts merge request on success. Defaults to {@code false}.
*/
void acceptMergeRequestOnSuccess(boolean acceptMergeRequestOnSuccess = true) {
this.acceptMergeRequestOnSuccess = acceptMergeRequestOnSuccess
}

/**
* If set, allows all branches (Ignoring Filtered Branches). Defaults to {@code false}.
*/
void allowAllBranches(boolean allowAllBranches = false) {
this.allowAllBranches = allowAllBranches
}

/**
* Only rebuild open Merge Requests.
*
* Possible values for are {@code 'never'}, {@code 'source'} and {@code 'both'}.
*/
void rebuildOpenMergeRequest(String rebuildOpenMergeRequest) {
checkArgument(
VALID_EXECUTION_STATUSES.contains(rebuildOpenMergeRequest),
"rebuildOpenMergeRequest must be one of ${VALID_EXECUTION_STATUSES.join(', ')}"
)
this.rebuildOpenMergeRequest = rebuildOpenMergeRequest

}
}
Expand Up @@ -346,4 +346,30 @@ class TriggerContext extends AbstractExtensibleContext {
nextBuildNum(0)
}
}

/**
* Trigger that runs jobs on push notifications from GitLab.
*
* @since 1.42
*/
@RequiresPlugin(id = 'gitlab-plugin', minimumVersion = '1.1.28')
void gitlabPush(@DslContext(GitlabTriggerContext) Closure closure) {
GitlabTriggerContext context = new GitlabTriggerContext()
ContextHelper.executeInContext(closure, context)
triggerNodes << new NodeBuilder().'com.dabsquared.gitlabjenkins.GitLabPushTrigger' {
spec()
triggerOnPush(context.buildOnPushEvents)
triggerOnMergeRequest(context.buildOnMergeRequestEvents)
triggerOpenMergeRequestOnPush(context.rebuildOpenMergeRequest)
ciSkip(context.enableCiSkip)
setBuildDescription(context.setBuildDescription)
addNoteOnMergeRequest(context.addNoteOnMergeRequest)
addCiMessage(context.useCiFeatures)
addVoteOnMergeRequest(context.addVoteOnMergeRequest)
allowAllBranches(context.allowAllBranches)
includeBranchesSpec(context.includeBranches ?: '')
excludeBranchesSpec(context.excludeBranches ?: '')
acceptMergeRequestOnSuccess(context.acceptMergeRequestOnSuccess)
}
}
}
Expand Up @@ -848,4 +848,81 @@ class TriggerContextSpec extends Specification {
where:
schedule << [null, '']
}

def 'call gitlabPush trigger with no options'() {
when:
context.gitlabPush {
}

then:
with(context.triggerNodes[0]) {
name() == 'com.dabsquared.gitlabjenkins.GitLabPushTrigger'
children().size() == 13
spec[0].value().empty
triggerOnPush[0].value() == true
triggerOnMergeRequest[0].value() == true
triggerOpenMergeRequestOnPush[0].value() == 'never'
ciSkip[0].value() == true
setBuildDescription[0].value() == true
addNoteOnMergeRequest[0].value() == true
addCiMessage[0].value() == false
addVoteOnMergeRequest[0].value() == true
allowAllBranches[0].value() == false
includeBranchesSpec[0].value().empty
excludeBranchesSpec[0].value().empty
acceptMergeRequestOnSuccess[0].value() == false
}
1 * mockJobManagement.requireMinimumPluginVersion('gitlab-plugin', '1.1.28')
}

def 'call gitlabPush trigger with all optionss'() {
when:
context.gitlabPush {
buildOnMergeRequestEvents(value)
buildOnPushEvents(value)
enableCiSkip(value)
setBuildDescription(value)
addNoteOnMergeRequest(value)
rebuildOpenMergeRequest('both')
addVoteOnMergeRequest(value)
useCiFeatures(value)
acceptMergeRequestOnSuccess(value)
allowAllBranches(value)
includeBranches('include1,include2')
excludeBranches('exclude1,exclude2')
}

then:
with(context.triggerNodes[0]) {
name() == 'com.dabsquared.gitlabjenkins.GitLabPushTrigger'
children().size() == 13
spec[0].value().empty
triggerOnPush[0].value() == value
triggerOnMergeRequest[0].value() == value
triggerOpenMergeRequestOnPush[0].value() == 'both'
ciSkip[0].value() == value
setBuildDescription[0].value() == value
addNoteOnMergeRequest[0].value() == value
addCiMessage[0].value() == value
addVoteOnMergeRequest[0].value() == value
allowAllBranches[0].value() == value
includeBranchesSpec[0].value() == 'include1,include2'
excludeBranchesSpec[0].value() == 'exclude1,exclude2'
acceptMergeRequestOnSuccess[0].value() == value
}
1 * mockJobManagement.requireMinimumPluginVersion('gitlab-plugin', '1.1.28')

where:
value << [true, false]
}

def 'call gitlabPush trigger with invalid rebuildOpenMergeRequest'() {
when:
context.gitlabPush {
rebuildOpenMergeRequest('FOO')
}

then:
thrown(DslScriptException)
}
}

0 comments on commit b41056b

Please sign in to comment.