# trigger

* [trigger](#trigger)
  * [poll SCM](#poll-scm)
  * [`parameterizedCron`](#parameterizedcron)
* [triggered by](#triggered-by)
  * [libs](#libs)
  * [GerritCause](#gerritcause)

### trigger

#### poll SCM

```groovy
properties([
  // every 6 hours
  pipelineTriggers([
    pollSCM( ignorePostCommitHooks: true, scmpoll_spec: 'H H/6 * * *' )
  ])
])
```

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

* declarative:

  ```groovy
  triggers {
    pollSCM ignorePostCommitHooks: true, scmpoll_spec: 'H H * * *'
  }
  ```

#### [`parameterizedCron`](https://github.com/jenkinsci/parameterized-scheduler-plugin)

```groovy
properties([
  parameters([
    choice(choices: ['', 'a', 'b', 'c'], description: '', name: 'var1')
    choice(choices: ['', 'a', 'b', 'c'], description: '', name: 'var2')
  ]),
  pipelineTriggers([
    parameterizedCron( '''
      H/3 * * * * % var1=a; var2=b
      H/6 * * * * % var1=b; var2=a
    ''' )
  ])
])
```

### triggered by

{% hint style="info" %}

> references:
>
> * [gitlab](https://stackoverflow.com/a/55366682/2940319)
> * [CauseAction.class](https://javadoc.jenkins.io/hudson/model/CauseAction.html)
>   * [Cause.UpstreamCause](https://javadoc.jenkins-ci.org/hudson/model/Cause.UpstreamCause.html)
>   * [Cause.UserIdCause](https://javadoc.jenkins.io/hudson/model/Cause.UserIdCause.html)
>   * [RebuildCause](https://javadoc.jenkins.io/plugin/rebuild/com/sonyericsson/rebuild/RebuildCause.html)
>   * [ReplayCause](https://javadoc.jenkins.io/plugin/workflow-cps/org/jenkinsci/plugins/workflow/cps/replay/ReplayCause.html)
>   * [TimerTrigger.TimerTriggerCause](https://javadoc.jenkins.io/hudson/triggers/TimerTrigger.TimerTriggerCause.html)
>   * [ParameterizedTimerTriggerCause](https://javadoc.jenkins.io/plugin/parameterized-scheduler/org/jenkinsci/plugins/parameterizedscheduler/ParameterizedTimerTriggerCause.html)
> * [source code : yet-another-build-visualizer-plugin](https://www.programcreek.com/java-api-examples/?code=jenkinsci%2Fyet-another-build-visualizer-plugin%2Fyet-another-build-visualizer-plugin-master%2Fsrc%2Fmain%2Fjava%2Fcom%2Faxis%2Fsystem%2Fjenkins%2Fplugins%2Fdownstream%2Fyabv%2FBuildFlowAction.java)
>   {% endhint %}

* get build cause

  ```groovy
  import hudson.model.Cause.UserIdCause
  import org.jenkinsci.plugins.workflow.job.WorkflowRun

  workflowRun build = currentBuild.rawBuild

  println build.getCauses().collect { it.getClass().getCanonicalName() }
  println build.getCauses().collect { it.getClass().getCanonicalName() }.collect { it.tokenize('.').last() }

  println """
    cause                               : ${build.getCauses().toString()}
    cause.getClass()                    : ${build.getCauses().getClass()} : ${build.getCauses().getClass().getCanonicalName()}
    build.getCause( UserIdCause.class ) : ${build.getCause( UserIdCause.class )}
  """
  ```

  * console output

    ```
    [Pipeline] echo
    [hudson.model.Cause.UserIdCause]
    [Pipeline] echo
    [UserIdCause]
    [Pipeline] echo

        cause                               : [hudson.model.Cause$UserIdCause@bf8cb337]
        cause.getClass()                    : class java.util.Collections$UnmodifiableRandomAccessList : java.util.Collections.UnmodifiableRandomAccessList
        build.getCause( UserIdCause.class ) : hudson.model.Cause$UserIdCause@bf8cb337
    ```
* get user id if triggered by manually

  ```groovy
  import hudson.model.Cause.UserIdCause
  import org.jenkinsci.plugins.workflow.job.WorkflowRun

  workflowRun build = currentBuild.rawBuild
  if ( build.getCause(UserIdCause.class) ) {
    println """
      username : ${build.getCause(hudson.model.Cause.UserIdCause.class).getUserName()}
      id       : ${build.getCause(hudson.model.Cause.UserIdCause.class).getUserId()}
      mail     : ${build.getCause(hudson.model.Cause.UserIdCause.class).getUserId()}@domain.com
    """
  }
  ```

  * or

    ```groovy
    import hudson.model.Cause.UserIdCause

    if ( build.getCause(UserIdCause.class) ) {
      println """
        username : ${build.getCause(UserIdCause.class).getUserName()}
        id       : ${build.getCause(UserIdCause.class).getUserId()}
        mail     : ${build.getCause(UserIdCause.class).getUserId()}@domain.com
      """
    }
    ```
* get causedby

  ```groovy
  import org.jenkinsci.plugins.workflow.job.WorkflowRun
  import hudson.model.Cause.*
  import hudson.triggers.TimerTrigger.TimerTriggerCause
  import org.jenkinsci.plugins.workflow.cps.replay.ReplayCause
  import org.jenkinsci.plugins.parameterizedscheduler.ParameterizedTimerTriggerCause
  import org.jenkinsci.plugins.workflow.cps.replay.ReplayCause
  import com.sonyericsson.rebuild.RebuildCause

  def getCasuedBy( workflowRun build = currentBuild.rawBuild ) {
      CauseAction causeAction = currentBuild.rawBuild.getAction(CauseAction.class)
      causeAction.getCauses().each { Cause cause ->
        if ( cause instanceof Cause.UpstreamCause            ) println ( 'by upstream'                  )
        if ( cause instanceof Cause.UserIdCause              ) println ( 'by user'                      )
        if ( cause instanceof ReplayCause                    ) println ( 'by reply'                     )
        if ( cause instanceof RebuildCause                   ) println ( 'by rebuild'                   )
        if ( cause instanceof TimerTriggerCause              ) println ( 'by timer'                     )
        if ( cause instanceof ParameterizedTimerTriggerCause ) println ( 'by ParameterizedTimerTrigger' )
      }
  }
  ```
* gitlab

  ```groovy
  currentBuild.rawBuild.getCause(com.dabsquared.gitlabjenkins.cause.GitLabWebHookCause).getData()
  // or
  commit = currentBuild.rawBuild.getCause(com.dabsquared.gitlabjenkins.cause.GitLabWebHookCause).getData().getLastCommit()
  ```

#### libs

```groovy
import hudson.model.Cause.*
import hudson.triggers.TimerTrigger.TimerTriggerCause
import org.jenkinsci.plugins.parameterizedscheduler.ParameterizedTimerTriggerCause
import org.jenkinsci.plugins.workflow.cps.replay.ReplayCause
import com.sonyericsson.rebuild.RebuildCause

Boolean byCron( WorkflowRun build = currentBuild.rawBuild ) {
  build.getCause( TimerTriggerCause.class ) && true
}
Boolean byParameterizedCron( WorkflowRun build = currentBuild.rawBuild ) {
  build.getCause( ParameterizedTimerTriggerCause.class ) && true
}
Boolean byTimer( WorkflowRun build = currentBuild.rawBuild ) {
  byCron( build ) || byParameterizedCron( build )
}
Boolean byUpstream( WorkflowRun build = currentBuild.rawBuild ) {
  build.getCause( Cause.UpstreamCause.class ) && true
}
Boolean byUserId( WorkflowRun build = currentBuild.rawBuild ) {
  build.getCause( Cause.UserIdCause.class ) && true
}
Boolean byReplay( WorkflowRun build = currentBuild.rawBuild ) {
  byUserId( build ) && build.getCause( ReplayCause.class )
}
Boolean byRebuild( WorkflowRun build = currentBuild.rawBuild ) {
  byUserId( build ) && build.getCause( RebuildCause.class )
}
```

#### GerritCause

{% hint style="info" %}

> check [imarslo : GerritCause](https://github.com/marslo/ibook/blob/marslo/docs/jenkins/script/build.html#gerritcause)
> {% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://imarslo.gitbook.io/handbook/jenkins/jenkinsfile/trigger.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
