diff --git a/pom.xml b/pom.xml
index 3c535b86..a17a6537 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,6 +78,12 @@
import
pom
+
+
+ org.jenkins-ci.plugins.workflow
+ workflow-cps
+ 3817.vd20b_7e2b_692b_
+
diff --git a/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java b/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java
index aa98e73e..409ef336 100644
--- a/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java
+++ b/src/main/java/org/jenkinsci/plugins/workflow/job/WorkflowJob.java
@@ -540,17 +540,23 @@ public void replaceAction(@NonNull Action a) {
@NonNull
@Override public Collection extends SCM> getSCMs() {
+ Collection extends SCM> definedSCMs = definition != null
+ ? definition.getSCMs()
+ : Collections.emptySet();
WorkflowRun b = getLastSuccessfulBuild();
if (b == null) {
b = getLastCompletedBuild();
}
if (b == null) {
- return Collections.emptySet();
+ return definedSCMs;
}
Map scms = new LinkedHashMap<>();
for (WorkflowRun.SCMCheckout co : b.checkouts(null)) {
scms.put(co.scm.getKey(), co.scm);
}
+ for (SCM scm : definedSCMs) {
+ scms.put(scm.getKey(), scm);
+ }
return scms.values();
}
diff --git a/src/test/java/org/jenkinsci/plugins/workflow/job/WorkflowJobTest.java b/src/test/java/org/jenkinsci/plugins/workflow/job/WorkflowJobTest.java
index 54ed91ce..1a3ef6e3 100644
--- a/src/test/java/org/jenkinsci/plugins/workflow/job/WorkflowJobTest.java
+++ b/src/test/java/org/jenkinsci/plugins/workflow/job/WorkflowJobTest.java
@@ -76,6 +76,32 @@ public class WorkflowJobTest {
j.assertLogContains("second version", b2);
}
+ @Issue("JENKINS-38669")
+ @Test public void nonEmptySCMListForGitSCMJobBeforeBuild() throws Exception {
+ WorkflowJob p = j.jenkins.createProject(WorkflowJob.class, "p");
+ CpsScmFlowDefinition def = new CpsScmFlowDefinition(new GitSCM("I don't care"), "Jenkinsfile");
+ assertEquals("Expecting one SCM for definition", 1, def.getSCMs().size());
+ p.setDefinition(def);
+ assertEquals("Expecting one SCM", 1, p.getSCMs().size());
+ }
+
+ @Issue("JENKINS-38669")
+ @Test public void neverBuiltSCMBasedJobMustBeTriggerableByHook() throws Exception {
+ sampleRepo.init();
+ sampleRepo.write("Jenkinsfile", "echo 'first version'");
+ sampleRepo.git("add", "Jenkinsfile");
+ sampleRepo.git("commit", "-m", "init");
+ WorkflowJob p = j.jenkins.createProject(WorkflowJob.class, "p");
+ p.addTrigger(new SCMTrigger(""));
+ p.setDefinition(new CpsScmFlowDefinition(new GitSCM(sampleRepo.toString()), "Jenkinsfile"));
+ j.jenkins.setQuietPeriod(0);
+ j.createWebClient().getPage(new WebRequest(j.createWebClient().createCrumbedUrl(p.getUrl() + "polling"), HttpMethod.POST));
+ j.waitUntilNoActivity();
+ WorkflowRun b1 = p.getLastBuild();
+ assertEquals(1, b1.getNumber());
+ j.assertLogContains("first version", b1);
+ }
+
@Test
public void addAction() throws Exception {
WorkflowJob p = j.jenkins.createProject(WorkflowJob.class, "p");