如何通过jenkins文件每2小时触发一次jenkis构建

时间:2020-01-31 09:58:17

标签: javascript jenkins jenkins-pipeline

下面是我的詹金斯文件:

#!groovy


node('EJ2Release') {
    try {
        deleteDir()

        stage('Import') {
            git url: 'https://gitlab.syncfusion.com/essential-studio/ej2-groovy-scripts.git', branch: 'master', credentialsId: env.JENKINS_CREDENTIAL_ID
            shared = load 'src/shared.groovy'
        }

        stage('Checkout') {
            checkout scm
            shared.getProjectDetails()
            shared.gitlabCommitStatus('running')
        }

        if(shared.checkCommitMessage()) {
            stage('Install'){
                shared.install()
            }

            stage('Build') {
                sh 'npm run build'
            }
        
            stage('Publish') {
                shared.publish()
            }
            if(shared.isProtectedBranch()) {
                stage('SampleBrowser') {
                    shared.triggerSampleBrowserBuild()
                } 
            }
        }

        shared.gitlabCommitStatus('success')
        deleteDir()
    }
    catch(Exception e) {
        println(e)        
        shared.gitlabCommitStatus('failed')
        deleteDir()
        error('Build Failed')
    }
}

下面是我的常规脚本-https://github.com/kumaresan-subramani/jenkins-build/blob/master/groovy

我想每2小时触发一次我的Jenkins构建,我尝试了很多选择,但对我来说没有运气。任何人都可以提出任何建议来解决这个问题。

我在jenkins文件中尝试过以下操作:

#!groovy


node('EJ2Release') {
    try {
        deleteDir()
        triggers {
          pollSCM 'H/10 * * * *'
        }
        stage('Import') {
            git url: 'https://gitlab.syncfusion.com/essential-studio/ej2-groovy-scripts.git', branch: 'master', credentialsId: env.JENKINS_CREDENTIAL_ID
            shared = load 'src/shared.groovy'
        }
 ----------------etc----------
}

2 个答案:

答案 0 :(得分:2)

如果必须由SCM进行任何提交,则pollSCM触发器仅触发您的构建。

如果您还想在没有提交的情况下每2小时触发一次,则必须使用cron-trigger:

triggers {
    cron('0 */2 * * *')
}

答案 1 :(得分:1)

这里有两个问题,第一个是RNoB在他的答案中写道,您应该使用cron而不是pollSCM。第二个问题是您混淆了声明式和脚本化管道(see my answer here for more information)。

要在脚本化管道中设置cron触发器,应使用属性步骤(可用于设置作业的大多数属性和触发器(请参阅管道语法生成器以查看安装中可用的内容)。应该足够:

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

node('EJ2Release') {
    try {
        deleteDir()
        stage('Import') {
            git url: 'https://gitlab.syncfusion.com/essential-studio/ej2-groovy-scripts.git', branch: 'master', credentialsId: env.JENKINS_CREDENTIAL_ID
            shared = load 'src/shared.groovy'
        }
 ----------------etc----------
}

请注意,我将属性步骤放置在节点分配之外,这意味着该步骤在作业开始后尽快执行。再一次,这仅适用于脚本化管道。