Jenkins声明性管道:管道中特定于触发器的阶段

Jenkins声明性管道:管道中特定于触发器的阶段,jenkins,jenkins-pipeline,jenkins-declarative-pipeline,Jenkins,Jenkins Pipeline,Jenkins Declarative Pipeline,我正在使用Jenkins声明性管道,不知道是否有任何方法可以周期性地触发特定阶段 我的意思是,当我们签出SCM时,管道会触发,但是阶段2对我们的一些项目来说太长了。因此,我不想等待这个阶段,我只想每天运行这个阶段,但仍然将这个阶段保存在文件中 有没有办法做到这一点?这样做的最佳方法是什么 stage('Stage 1') { steps { script { // do something

我正在使用Jenkins声明性管道,不知道是否有任何方法可以周期性地触发特定阶段

我的意思是,当我们签出SCM时,管道会触发,但是阶段2对我们的一些项目来说太长了。因此,我不想等待这个阶段,我只想每天运行这个阶段,但仍然将这个阶段保存在文件中

有没有办法做到这一点?这样做的最佳方法是什么

    stage('Stage 1') {
        steps {
            script {
                  // do something
                )
            }
        }
    }

    stage('Stage 2') {
      triggers {
        cron('H H 0 0 0')
        }
        steps {
            script {
                  // do something
                )
            }
        }
    }
    stage('Stage 2') {
        steps {
            script {
                  // do something
                )
            }
        }
    }

请参阅下面的代码/方法,它将让您了解如何在特定日期或特定条件下执行特定阶段。您可以根据自己的要求更改条件
使用插件时间戳获取时间戳相关信息

# Get the day from the build timestamp
def getday = env.BUILD_TIMESTAMP
getday = getday .split(" ")
// Extract current day
getday = getday [3]
pipeline 
{
  agent any
 options { timestamps () }
 stages {
 stage('Stage 1') {
        steps {
            script {
                  // do something
                )
            }
        }
    }

 stage('Stage 2') {
      when 
            {
                // Note: You can change condition as per your need
                // Stage will run only when the day is Mon 
                expression {
                     getday == "Mon"
                }
            }
        steps {
            script {
                  // do something
                )
            }
        }
    }


}

配置BuildTimestamp: 如果您的构建时间戳未配置为获取日期信息,则可以使用下面的方法执行此操作

管理Jenkins->配置系统->构建时间戳->单击启用构建时间戳
将模式设置为:yyyy-MM-dd HH:MM:ss z-EEE

请注意:Triggeres指令在jenkins管道中可用,如下所示,您可以在其中设置cron条件,但它将在所有阶段执行,而不是在单个阶段执行

// Declarative //
pipeline {
    agent any
    triggers {
        cron('H H 0 0 0')
    }
    stages {
        stage('Stage 1') {
        steps {
            script {
                  // do something
                )
            }
        }
      }
    }
}

请参阅下面的代码/方法,它将让您了解如何在特定日期或特定条件下执行特定阶段。您可以根据自己的要求更改条件
使用插件时间戳获取时间戳相关信息

# Get the day from the build timestamp
def getday = env.BUILD_TIMESTAMP
getday = getday .split(" ")
// Extract current day
getday = getday [3]
pipeline 
{
  agent any
 options { timestamps () }
 stages {
 stage('Stage 1') {
        steps {
            script {
                  // do something
                )
            }
        }
    }

 stage('Stage 2') {
      when 
            {
                // Note: You can change condition as per your need
                // Stage will run only when the day is Mon 
                expression {
                     getday == "Mon"
                }
            }
        steps {
            script {
                  // do something
                )
            }
        }
    }


}

配置BuildTimestamp: 如果您的构建时间戳未配置为获取日期信息,则可以使用下面的方法执行此操作

管理Jenkins->配置系统->构建时间戳->单击启用构建时间戳
将模式设置为:yyyy-MM-dd HH:MM:ss z-EEE

请注意:Triggeres指令在jenkins管道中可用,如下所示,您可以在其中设置cron条件,但它将在所有阶段执行,而不是在单个阶段执行

// Declarative //
pipeline {
    agent any
    triggers {
        cron('H H 0 0 0')
    }
    stages {
        stage('Stage 1') {
        steps {
            script {
                  // do something
                )
            }
        }
      }
    }
}


我提供的解决方案有效吗you@Altaf,我正在尝试,但困惑在于管道是如何触发的?我的意思是,如何在不触发它的情况下启动它?我想要的是在没有SCM的情况下触发,就像
triggers{}
是什么样的doing@seumral:您可以在Build Triggers部分下从jenkins配置触发,所以您不需要将其添加到管道中script@Altaf,那么它是否只会触发此阶段或整个管道?我提供的解决方案是否有效you@Altaf,我现在正在尝试,但困惑在于管道是如何触发的?我的意思是,如何在不触发它的情况下启动它?我想要的是在没有SCM的情况下触发,就像
triggers{}
是什么样的doing@seumral:您可以在Build Triggers部分下从jenkins配置触发,所以您不需要将其添加到管道中script@Altaf,那么它将只触发此阶段或完整管道吗?我无法修复错误
无效选项类型“时间戳“
。。它需要一个插件吗?詹金斯2.263.4是version@semural:是,您可以使用插件时间戳
https://plugins.jenkins.io/timestamper/
。不幸的是,我又犯了一个错误
java.lang.ArrayIndexOutOfBoundsException:3
。env.BUILD_时间戳的输出为2021-05-14 12:50:35 CEST。。我看不见工作日info@semural:哦,你需要配置它:管理Jenkins->配置系统->构建时间戳->点击启用构建时间戳。设置模式:yyyy MM dd HH:MM:ss z EEE。在回答中添加了此信息现在我可以通过另一种方式获得日期,但可能是我的错误,没有正确阐明我的情况。日期不是正确的参数,可能或者可能没有办法做到这一点。。假设今天是星期五,请检查开发部门。。由于星期五,它将再次工作,但我想要的是,它应该在不签出的情况下自动触发,但只有此阶段应该每天在管道中运行。我无法修复错误
无效的选项类型“timestamps”
。。它需要一个插件吗?詹金斯2.263.4是version@semural:是,您可以使用插件时间戳
https://plugins.jenkins.io/timestamper/
。不幸的是,我又犯了一个错误
java.lang.ArrayIndexOutOfBoundsException:3
。env.BUILD_时间戳的输出为2021-05-14 12:50:35 CEST。。我看不见工作日info@semural:哦,你需要配置它:管理Jenkins->配置系统->构建时间戳->点击启用构建时间戳。设置模式:yyyy MM dd HH:MM:ss z EEE。在回答中添加了此信息现在我可以通过另一种方式获得日期,但可能是我的错误,没有正确阐明我的情况。日期不是正确的参数,可能或者可能没有办法做到这一点。。假设今天是星期五,请检查开发部门。。由于它的星期五,它将再次工作,但我希望它应该是自动触发没有签出,但只有这个阶段应该在管道每天运行