• Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Minor Minor
    • core
    • None

      From what I can tell this syntax should work for defining an SCMTrigger within Jenkinsfile:

      properties([
          pipelineTriggers([
              scm('H/5 * * * *')
          ])
      ])
      

      For comparison, this works for the TimerTrigger:

      properties([
          pipelineTriggers([
              cron('H/5 * * * *')
          ])
      ])
      

      As a workaround, this does work correctly:

      properties([
          pipelineTriggers([
              [$class: "SCMTrigger", scmpoll_spec: "H/5 * * * *"],
          ])
      ])
      

      This is the error I get when using scm:

      hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: hudson.plugins.git.GitSCM.call() is applicable for argument types: (java.lang.String) values: [H/5 * * * *]
      Possible solutions: all(), wait(), any(), wait(long), each(groovy.lang.Closure), any(groovy.lang.Closure)
      at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
      at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:64)
      at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
      at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:151)
      at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:21)
      at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:115)
      at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:103)
      at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149)
      at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146)
      at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:16)
      at WorkflowScript.run(WorkflowScript:12)
      at __cps.transform__(Native Method)
      at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:48)
      at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
      at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
      at sun.reflect.GeneratedMethodAccessor275.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:497)
      at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
      at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
      at com.cloudbees.groovy.cps.Next.step(Next.java:58)
      at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:154)
      at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
      at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:33)
      at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:30)
      at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
      at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:30)
      at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:164)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:361)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:80)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:236)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:226)
      at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:47)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
      at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)
      Finished: FAILURE

          [JENKINS-37731] syntax for SCMTrigger in pipelineTriggers

          Andrew Bayer added a comment -

          That was on core 2.7.2, fyi.

          Andrew Bayer added a comment - That was on core 2.7.2, fyi.

          Andrew Bayer added a comment -

          Also worth noting that scmpoll_spec is nothing but a parameter name. The XML serialization of SCMTrigger uses spec, since that's what the getter in the parent is for. So I think it's worth breaking.

          Andrew Bayer added a comment - Also worth noting that scmpoll_spec is nothing but a parameter name. The XML serialization of SCMTrigger uses spec , since that's what the getter in the parent is for. So I think it's worth breaking.

          Daniel Beck added a comment -

          So I think it's worth breaking.

          TBH `DataboundConstructor` seem very brittle given they rely on parameter names…

          Note that with https://github.com/jenkins-infra/repository-permissions-updater/blob/5d2d9720e95e59fdeb91b0000626aed4d1b23d83/Jenkinsfile#L3 there's at least one Jenkinsfile in the wild that relies on that parameter name. Would require https://wiki.jenkins-ci.org/display/JENKINS/Marking+a+new+plugin+version+as+incompatible+with+older+versions

          Daniel Beck added a comment - So I think it's worth breaking. TBH `DataboundConstructor` seem very brittle given they rely on parameter names… Note that with https://github.com/jenkins-infra/repository-permissions-updater/blob/5d2d9720e95e59fdeb91b0000626aed4d1b23d83/Jenkinsfile#L3 there's at least one Jenkinsfile in the wild that relies on that parameter name. Would require https://wiki.jenkins-ci.org/display/JENKINS/Marking+a+new+plugin+version+as+incompatible+with+older+versions

          Andrew Bayer added a comment -

          Hrm. Since we're in core and not a plugin, that just makes things more fun. I guess a @Deprecated constructor may make sense?

          Andrew Bayer added a comment - Hrm. Since we're in core and not a plugin, that just makes things more fun. I guess a @Deprecated constructor may make sense?

          Andrew Bayer added a comment -

          Got a possible fix incoming. We shall see. =)

          Andrew Bayer added a comment - Got a possible fix incoming. We shall see. =)

          Andrew Bayer added a comment -

          PRs up and linked in core and multibranch.

          Andrew Bayer added a comment - PRs up and linked in core and multibranch.

          Code changed in jenkins
          User: Andrew Bayer
          Path:
          pom.xml
          src/test/java/org/jenkinsci/plugins/workflow/multibranch/JobPropertyStepTest.java
          http://jenkins-ci.org/commit/workflow-multibranch-plugin/1b68fff0b887c9c64570b43262561c09d222cec3
          Log:
          JENKINS-37731 Tests for proper handling of SCMTrigger in step.

          Note that we're pretty much stuck with SCMTrigger not working right
          with the snippet generator pre-core-2.21 (or whenever
          https://github.com/jenkinsci/jenkins/pull/2526 lands). SCMTrigger is
          just busted vis a vis the Snippet Generator. So what we're doing here
          is testing runtime syntax, and snippet generation against core with a
          new enough version to have the "pollScm" symbol on SCMTrigger's descriptor.

          Also enabled/fixed some snippetizer round trip tests that now can
          work, while I was here.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: pom.xml src/test/java/org/jenkinsci/plugins/workflow/multibranch/JobPropertyStepTest.java http://jenkins-ci.org/commit/workflow-multibranch-plugin/1b68fff0b887c9c64570b43262561c09d222cec3 Log: JENKINS-37731 Tests for proper handling of SCMTrigger in step. Note that we're pretty much stuck with SCMTrigger not working right with the snippet generator pre-core-2.21 (or whenever https://github.com/jenkinsci/jenkins/pull/2526 lands). SCMTrigger is just busted vis a vis the Snippet Generator. So what we're doing here is testing runtime syntax, and snippet generation against core with a new enough version to have the "pollScm" symbol on SCMTrigger's descriptor. Also enabled/fixed some snippetizer round trip tests that now can work, while I was here.

          Code changed in jenkins
          User: Andrew Bayer
          Path:
          pom.xml
          src/test/java/org/jenkinsci/plugins/workflow/multibranch/JobPropertyStepTest.java
          http://jenkins-ci.org/commit/workflow-multibranch-plugin/4fa8a41c30a5e950d15df98df8126bb48ac8485b
          Log:
          Merge pull request #30 from abayer/jenkins-37731

          JENKINS-37731 Tests for proper handling of SCMTrigger in step.

          Compare: https://github.com/jenkinsci/workflow-multibranch-plugin/compare/3c4bae1a259d...4fa8a41c30a5

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: pom.xml src/test/java/org/jenkinsci/plugins/workflow/multibranch/JobPropertyStepTest.java http://jenkins-ci.org/commit/workflow-multibranch-plugin/4fa8a41c30a5e950d15df98df8126bb48ac8485b Log: Merge pull request #30 from abayer/jenkins-37731 JENKINS-37731 Tests for proper handling of SCMTrigger in step. Compare: https://github.com/jenkinsci/workflow-multibranch-plugin/compare/3c4bae1a259d...4fa8a41c30a5

          Code changed in jenkins
          User: Andrew Bayer
          Path:
          core/src/main/java/hudson/triggers/SCMTrigger.java
          core/src/main/resources/hudson/triggers/SCMTrigger/config.jelly
          http://jenkins-ci.org/commit/jenkins/75745f00428226d648ccbee899f2970adf51c899
          Log:
          [FIXED JENKINS-37731] Change symbol and constructor for SCMTrigger. (#2526)

          • [FIXED JENKINS-37731] Change symbol and constructor for SCMTrigger.

          Using "scm" as the @Symbol led to collisions with the "scm" global
          variable in Pipeline, so that had to go. Changed it to "pollScm". Also
          moved the @DataBoundConstructor to the single-parameter constructor,
          deprecated the two-parameter constructor, created a @DataBoundSetter
          for ignorePostCommitHooks, and added a getter for "scmpoll_spec" to
          fix snippet generator and general syntactic goodness.

          So now, with this, it's possible to do:

          properties([
          pipelineTriggers([
          pollScm('@daily')
          ])
          ])

          Tada.

          Tests for the snippet generator and job property stuff will be landing
          in a separate PR for workflow-multibranch.

          • Review comments.
          • Updating @since to 2.22

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: core/src/main/java/hudson/triggers/SCMTrigger.java core/src/main/resources/hudson/triggers/SCMTrigger/config.jelly http://jenkins-ci.org/commit/jenkins/75745f00428226d648ccbee899f2970adf51c899 Log: [FIXED JENKINS-37731] Change symbol and constructor for SCMTrigger. (#2526) [FIXED JENKINS-37731] Change symbol and constructor for SCMTrigger. Using "scm" as the @Symbol led to collisions with the "scm" global variable in Pipeline, so that had to go. Changed it to "pollScm". Also moved the @DataBoundConstructor to the single-parameter constructor, deprecated the two-parameter constructor, created a @DataBoundSetter for ignorePostCommitHooks, and added a getter for "scmpoll_spec" to fix snippet generator and general syntactic goodness. So now, with this, it's possible to do: properties([ pipelineTriggers([ pollScm('@daily') ]) ]) Tada. Tests for the snippet generator and job property stuff will be landing in a separate PR for workflow-multibranch. Review comments. Updating @since to 2.22

          Andrew Bayer added a comment -

          Merged and will be released in core 2.22.

          Andrew Bayer added a comment - Merged and will be released in core 2.22.

            abayer Andrew Bayer
            danjasek Dan Jasek
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: