Jenkins声明性管道:管道中特定于触发器的阶段
我正在使用Jenkins声明性管道,不知道是否有任何方法可以周期性地触发特定阶段 我的意思是,当我们签出SCM时,管道会触发,但是阶段2对我们的一些项目来说太长了。因此,我不想等待这个阶段,我只想每天运行这个阶段,但仍然将这个阶段保存在文件中 有没有办法做到这一点?这样做的最佳方法是什么Jenkins声明性管道:管道中特定于触发器的阶段,jenkins,jenkins-pipeline,jenkins-declarative-pipeline,Jenkins,Jenkins Pipeline,Jenkins Declarative Pipeline,我正在使用Jenkins声明性管道,不知道是否有任何方法可以周期性地触发特定阶段 我的意思是,当我们签出SCM时,管道会触发,但是阶段2对我们的一些项目来说太长了。因此,我不想等待这个阶段,我只想每天运行这个阶段,但仍然将这个阶段保存在文件中 有没有办法做到这一点?这样做的最佳方法是什么 stage('Stage 1') { steps { script { // do something
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。在回答中添加了此信息现在我可以通过另一种方式获得日期,但可能是我的错误,没有正确阐明我的情况。日期不是正确的参数,可能或者可能没有办法做到这一点。。假设今天是星期五,请检查开发部门。。由于它的星期五,它将再次工作,但我希望它应该是自动触发没有签出,但只有这个阶段应该在管道每天运行