[
https://issues.jenkins-ci.org/browse/JENKINS-10147?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=162956#comment-162956
]
Julien-Pierre Avérous commented on JENKINS-10147:
-------------------------------------------------
Here a git diff with a little bit cleaner implementation, with a check box in
the UI to activate / deactivate this functionality.
{code}
diff --git
a/src/main/java/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig.java
b/src/main/java/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig.java
index d955f4c..304337d 100644
---
a/src/main/java/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig.java
+++
b/src/main/java/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig.java
@@ -12,6 +12,11 @@ import hudson.model.Node;
import hudson.model.Run;
import org.kohsuke.stapler.DataBoundConstructor;
+import hudson.scm.SCM;
+import hudson.scm.PollingResult;
+import hudson.util.LogTaskListener;
+import static hudson.scm.PollingResult.*;
+
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
@@ -27,22 +32,56 @@ import java.util.concurrent.Future;
*/
public class BlockableBuildTriggerConfig extends BuildTriggerConfig {
private final BlockingBehaviour block;
+ private final boolean buildScm;
+
public boolean buildAllNodesWithLabel;
- public BlockableBuildTriggerConfig(String projects, BlockingBehaviour
block, List<AbstractBuildParameters> configs) {
+ public BlockableBuildTriggerConfig(String projects, BlockingBehaviour
block, boolean buildScm, List<AbstractBuildParameters> configs) {
super(projects, ResultCondition.ALWAYS, false, configs);
this.block = block;
+ this.buildScm = buildScm;
}
@DataBoundConstructor
- public BlockableBuildTriggerConfig(String projects, BlockingBehaviour
block, List<AbstractBuildParameterFactory>
configFactories,List<AbstractBuildParameters> configs) {
+ public BlockableBuildTriggerConfig(String projects, BlockingBehaviour
block, boolean buildScm, List<AbstractBuildParameterFactory>
configFactories,List<AbstractBuildParameters> configs) {
super(projects, ResultCondition.ALWAYS, false, configFactories,
configs);
this.block = block;
+ this.buildScm = buildScm;
}
public BlockingBehaviour getBlock() {
return block;
}
+
+ public boolean getBuildScm() {
+ return buildScm;
+ }
+
+ @Override
+ public boolean needRebuild(AbstractProject project)
+ {
+ if (getBuildScm() == false)
+ return true;
+
+ SCM scm = project.getScm();
+
+ if (scm != null)
+ {
+ // Check that we don't have change in SCM
+ PollingResult res = project.poll(LogTaskListener.NULL);
+
+ if (res == NO_CHANGES)
+ {
+ // Check that we have a sucessfull build
+ Run success = project.getLastSuccessfulBuild();
+
+ if (success != null)
+ return false;
+ }
+ }
+
+ return true;
+ }
@Override
public List<Future<AbstractBuild>> perform(AbstractBuild<?, ?> build,
Launcher launcher, BuildListener listener) throws InterruptedException,
IOException {
diff --git
a/src/main/java/hudson/plugins/parameterizedtrigger/BuildTriggerConfig.java
b/src/main/java/hudson/plugins/parameterizedtrigger/BuildTriggerConfig.java
index d5144a7..c6f52be 100644
--- a/src/main/java/hudson/plugins/parameterizedtrigger/BuildTriggerConfig.java
+++ b/src/main/java/hudson/plugins/parameterizedtrigger/BuildTriggerConfig.java
@@ -31,6 +31,8 @@ import
hudson.plugins.parameterizedtrigger.AbstractBuildParameters.DontTriggerEx
import hudson.tasks.Messages;
import hudson.util.FormValidation;
+import hudson.console.HyperlinkNote;
+
import jenkins.model.Jenkins;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.stapler.AncestorInPath;
@@ -201,6 +203,11 @@ public class BuildTriggerConfig implements
Describable<BuildTriggerConfig> {
}
return actions;
}
+
+ public boolean needRebuild(AbstractProject project)
+ {
+ return true;
+ }
/**
* Note that with Hudson 1.341, trigger should be using
@@ -222,7 +229,10 @@ public class BuildTriggerConfig implements
Describable<BuildTriggerConfig> {
for (AbstractProject project :
getProjectList(build.getProject().getParent(),env)) {
List<Action> list = getBuildActions(actions, project);
- futures.add(schedule(build, project, list));
+ if (needRebuild(project))
+ futures.add(schedule(build, project, list));
+ else
+ listener.getLogger().println("Skipping " +
HyperlinkNote.encodeTo('/'+ project.getUrl(), project.getFullDisplayName()) +
". Don't need to rebuild.");
}
}
@@ -247,7 +257,10 @@ public class BuildTriggerConfig implements
Describable<BuildTriggerConfig> {
for (AbstractProject project :
getProjectList(build.getProject().getParent(),env)) {
List<Action> list = getBuildActions(actions, project);
- futures.put(project, schedule(build, project, list));
+ if (needRebuild(project))
+ futures.put(project, schedule(build, project,
list));
+ else
+ listener.getLogger().println("Skipping " +
HyperlinkNote.encodeTo('/'+ project.getUrl(), project.getFullDisplayName()) +
". Don't need to rebuild.");
}
}
return futures;
diff --git
a/src/main/java/hudson/plugins/parameterizedtrigger/TriggerBuilder.java
b/src/main/java/hudson/plugins/parameterizedtrigger/TriggerBuilder.java
index b5b4262..fb6b100 100644
--- a/src/main/java/hudson/plugins/parameterizedtrigger/TriggerBuilder.java
+++ b/src/main/java/hudson/plugins/parameterizedtrigger/TriggerBuilder.java
@@ -99,7 +99,7 @@ public class TriggerBuilder extends Builder implements
DependecyDeclarer {
if(!projectList.isEmpty()){
//handle non-blocking configs
if(futures.isEmpty()){
- listener.getLogger().println("Triggering projects: " +
getProjectListAsString(projectList));
+ listener.getLogger().println("Triggering or skipped
projects: " + getProjectListAsString(projectList));
continue;
}
//handle blocking configs
diff --git
a/src/main/resources/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig/config.jelly
b/src/main/resources/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig/config.jelly
index 1c49bbd..a279ef5 100644
---
a/src/main/resources/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig/config.jelly
+++
b/src/main/resources/hudson/plugins/parameterizedtrigger/BlockableBuildTriggerConfig/config.jelly
@@ -22,9 +22,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN
THE SOFTWARE.
-->
<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="${%Projects to build}" field="projects">
<f:textbox />
</f:entry>
+
+ <f:block>
+ <f:checkbox title="${%Build triggered projects only if there is SCM
changes}" field="buildScm" checked="${instance.buildScm==true}" />
+ </f:block>
+
<!-- TODO: replace with <f:optionalProperty> -->
<f:optionalBlock field="block" title="${%Block until the triggered projects
finish their builds}" checked="${instance.block!=null}">
<j:set var="descriptor"
value="${app.getDescriptorOrDie(descriptor.getPropertyType(field).clazz)}" />
{code}
> Add 'poll SCM' option to build step
> -----------------------------------
>
> Key: JENKINS-10147
> URL: https://issues.jenkins-ci.org/browse/JENKINS-10147
> Project: Jenkins
> Issue Type: New Feature
> Components: parameterized-trigger
> Reporter: G. Ann Campbell
> Assignee: huybrechts
> Priority: Minor
>
> It would be nice, in at least the 'build step' part of the
> parameterized-trigger plugin, to have the option to build conditionally based
> on SCM polling.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jenkins-ci.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira