Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
f4009b5
specifies an ignorable pusher
Jun 22, 2015
891455a
specifies an ignorable pusher
Jun 22, 2015
f84123f
documents ignorable pusher
Jun 23, 2015
1494279
Merge branch 'stable'
Jun 23, 2015
985cc73
fixes breaking of backward compatibility caused by the implementation…
Jun 23, 2015
be4c874
Merge branch 'stable'
Jun 23, 2015
784abc6
fixes access to ignorable pusher
Jun 23, 2015
f5b2488
Merge branch 'stable'
Jun 23, 2015
0ce901a
fixes needless line deletion
Jun 23, 2015
23abd4a
fixes NPE if regex for ignorable pusher is null
Jun 24, 2015
fa122af
Merge branch 'stable'
Jun 24, 2015
9bcadfa
[maven-release-plugin] prepare for next development iteration
KostyaSha Aug 30, 2015
93cb2f9
don't run cleaner if we don't manage hooks
lanwen Aug 30, 2015
b6e21f1
throw config exception on empty jenkins root url
lanwen Aug 30, 2015
f4f6525
[maven-release-plugin] prepare release github-1.13.1
KostyaSha Aug 30, 2015
2f684d0
[maven-release-plugin] prepare for next development iteration
KostyaSha Aug 30, 2015
f0a971f
check hook url for override before checking jenkins default url
lanwen Aug 31, 2015
c4657a2
[maven-release-plugin] prepare release github-1.13.2
KostyaSha Aug 31, 2015
0dbb10d
[maven-release-plugin] prepare for next development iteration
KostyaSha Aug 31, 2015
73b60b4
fixes typo
Aug 31, 2015
b10ad38
[FIXES JENKINS-30223] return back com.cloudbees.jenkins.Credential
lanwen Aug 31, 2015
28cb051
[maven-release-plugin] prepare release github-1.13.3
lanwen Sep 2, 2015
f4b6e2e
Merge tag 'github-1.13.3' into stable
Sep 9, 2015
7cc6f54
fixes constructor parameter name (@DataBoundConstructor)
Sep 10, 2015
4d7c47f
Merge branch 'stable'
Sep 10, 2015
6763575
Merge remote-tracking branch 'upstream/master'
Sep 10, 2015
6a52fdc
Merge remote-tracking branch 'upstream/master'
Oct 9, 2015
6990b83
Merge remote-tracking branch 'upstream/master'
Oct 16, 2015
082ed8c
fixes SonarQube issues
Oct 16, 2015
72d1013
turns logic of ignoring a pusher to avoid further mocking
Oct 16, 2015
02157bc
Merge remote-tracking branch 'upstream/master'
Oct 22, 2015
0567134
Merge remote-tracking branch 'upstream/master'
Nov 10, 2015
33473e9
Merge remote-tracking branch 'upstream/master'
Dec 18, 2015
57f1f57
Merge remote-tracking branch 'upstream/master'
Dec 21, 2015
28e9481
Merge remote-tracking branch 'upstream/master'
Jan 8, 2016
7a68f89
Merge remote-tracking branch 'upstream/master'
Jan 19, 2016
6f52adc
Merge remote-tracking branch 'upstream/master'
Jan 29, 2016
4fc39e2
merges config.jelly into config.groovy
Feb 10, 2016
e985ff1
Merge remote-tracking branch 'upstream/master'
Feb 24, 2016
ddd4d67
Merge remote-tracking branch 'upstream/master'
Mar 18, 2016
49c1e3a
Merge remote-tracking branch 'upstream/master'
Apr 11, 2016
9802aa1
Merge remote-tracking branch 'upstream/master'
May 2, 2016
07bd103
Merge remote-tracking branch 'upstream/master'
May 17, 2016
79d37a0
Merge remote-tracking branch 'upstream/master'
Jun 27, 2016
b2daf8b
Merge remote-tracking branch 'upstream/master'
Jul 21, 2016
830e436
Merge remote-tracking branch 'upstream/master'
Jul 26, 2016
b1d8812
Merge remote-tracking branch 'upstream/master'
aderigs Aug 21, 2016
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
<dependency>
<groupId>org.jmock</groupId>
<artifactId>jmock-junit4</artifactId>
<version>2.5.1</version>
<version>2.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
20 changes: 19 additions & 1 deletion src/main/java/com/cloudbees/jenkins/GitHubPushTrigger.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,26 @@
* @author Kohsuke Kawaguchi
*/
public class GitHubPushTrigger extends Trigger<AbstractProject<?, ?>> implements GitHubTrigger {
String pushBy;
private final String ignorablePusher;

@DataBoundConstructor
public GitHubPushTrigger(final String ignorablePusher) {
this.ignorablePusher = ignorablePusher;
}

public GitHubPushTrigger() {
this("");
}

@Override
public String pushBy() {
return pushBy;
}

@Override
public String getIgnorablePusher() {
return ignorablePusher;
}

/**
Expand All @@ -69,7 +87,7 @@ public void onPost() {
* Called when a POST is made.
*/
public void onPost(String triggeredByUser) {
final String pushBy = triggeredByUser;
pushBy = triggeredByUser;
getDescriptor().queue.execute(new Runnable() {
private boolean runPolling() {
try {
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/com/cloudbees/jenkins/GitHubTrigger.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,15 @@ public void parseAssociatedNames(AbstractProject<?, ?> job, Collection<GitHubRep
}
}
}

String pushBy();

/**
* Gets the regular expression to which the name or email of an ignorable pusher is to be
* matched.
*
* @return the regular expression to which the name or email of an ignorable pusher is to be
* matched.
*/
String getIgnorablePusher();
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this breaks backward compatibility

}
23 changes: 21 additions & 2 deletions src/main/java/com/cloudbees/jenkins/GitHubWebHook.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
import hudson.triggers.Trigger;
import hudson.util.AdaptedIterator;
import hudson.util.Iterators.FilterIterator;

import jenkins.model.Jenkins;
import net.sf.json.JSONObject;

import org.acegisecurity.Authentication;
import org.acegisecurity.context.SecurityContextHolder;
import org.apache.commons.codec.binary.Base64;
Expand All @@ -32,7 +34,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
* Receives github hook.
*
Expand Down Expand Up @@ -186,7 +187,9 @@ public void doIndex(StaplerRequest req, StaplerResponse rsp) {
public void processGitHubPayload(String payload, Class<? extends Trigger<?>> triggerClass) {
JSONObject o = JSONObject.fromObject(payload);
String repoUrl = o.getJSONObject("repository").getString("url"); // something like 'https://github.com/kohsuke/foo'
String pusherName = o.getJSONObject("pusher").getString("name");
final JSONObject pusher = o.getJSONObject("pusher");
final String pusherName = pusher.getString("name");
final String pusherEmail = pusher.getString("email");

LOGGER.info("Received POST for {}", repoUrl);
LOGGER.debug("Full details of the POST was {}", o.toString());
Expand All @@ -207,6 +210,22 @@ public void processGitHubPayload(String payload, Class<? extends Trigger<?>> tri
for (AbstractProject<?, ?> job : Jenkins.getInstance().getAllItems(AbstractProject.class)) {
GitHubTrigger trigger = (GitHubTrigger) job.getTrigger(triggerClass);
if (trigger != null) {
final String regex = trigger.getIgnorablePusher();

if (pusherName != null && !pusherName.isEmpty()
&& pusherName.matches(regex)) {

LOGGER.info("Ignoring pusher [{}] ...", pusherName);
continue;
}

if (pusherEmail != null && !pusherEmail.isEmpty()
&& pusherEmail.matches(regex)) {

LOGGER.info("Ignoring pusher [{}] ...", pusherEmail);
continue;
}

LOGGER.debug("Considering to poke {}", job.getFullDisplayName());
if (GitHubRepositoryNameContributor.parseAssociatedNames(job).contains(changedRepository)) {
LOGGER.info("Poked {}", job.getFullDisplayName());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<f:entry title="${%github.ignorablePusher}" help="/descriptor/com.cloudbees.jenkins.GitHubPushTrigger/help/ignorablePusher">
<f:textbox name="github.ignorablePusher" value="${instance.ignorablePusher}" />
</f:entry>
</j:jelly>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
github.ignorablePusher=Ignorable pusher
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
github.ignorablePusher=Ignorierbarer Pusher
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div>
This defines a regular expression to which the name or email of an ignorable pusher is to be matched. Such a push wil be ignored. Normally a preceding push of Jenkins him self could be prevented that way.
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div>
Hier wird ein regulärer Ausdruck definiert, der zu dem Namen oder der E-Mail eines ignorierbaren Pushers paßt. Solch ein Push wird ignoriert. Üblicherweise kann kann auf diese Weise damit ein vorhergehender Push von Jenkins selber verhindert werden.
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.cloudbees.jenkins;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import hudson.model.FreeStyleProject;
import hudson.plugins.git.GitSCM;
import hudson.scm.SCM;

import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;

import com.cloudbees.jenkins.GitHubPushTrigger.DescriptorImpl;

/**
* @author <a href = "mailto:achim.derigs@graudata.com">Achim Derigs</a>
*/
public final class GitHubPushTriggerTestCase {

@Rule
public final JenkinsRule j = new JenkinsRule();

private static void triggerWebHook(final String repositoryUrl, final String pusherName)
throws IOException {

final DescriptorImpl descriptor = DescriptorImpl.get();
final URL url = descriptor.getHookUrl();
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.connect();

final String payload = "payload={\"repository\":{\"url\":\"" + repositoryUrl
+ "\"},\"pusher\":{\"name\":\"" + pusherName + "\",\"email\":\"\"}}";

final OutputStream stream = connection.getOutputStream();

try {
stream.write(payload.getBytes(StandardCharsets.UTF_8));
} finally {
stream.close();
}

assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode());
}

@Test
public void trigger() throws IOException {
final String repositoryUrl = "https://github.com/OpenDataSpace/parent";
final SCM scm = new GitSCM(repositoryUrl);
final FreeStyleProject project = j.createFreeStyleProject();
project.setScm(scm);

final String expected = System.getProperty("user.name");
final GitHubPushTrigger trigger = new GitHubPushTrigger();
project.addTrigger(trigger);
triggerWebHook(repositoryUrl, expected);

final String actual = trigger.pushBy();
assertEquals(expected, actual);
}

@Test
public void ignore() throws IOException {
final String repositoryUrl = "https://github.com/OpenDataSpace/parent";
final SCM scm = new GitSCM(repositoryUrl);
final FreeStyleProject project = j.createFreeStyleProject();
project.setScm(scm);

final String pusherName = System.getProperty("user.name");
final GitHubPushTrigger trigger = new GitHubPushTrigger(pusherName);
project.addTrigger(trigger);
triggerWebHook(repositoryUrl, pusherName);

final Object object = trigger.pushBy();
assertNull(object);
}
}