Jenkins 是一个开源的自动化服务器,用于自动化各种任务,如构建、测试和部署软件。它支持通过插件扩展功能,并且可以通过定时任务或事件触发构建。
Jenkins 的构建触发器主要有以下几种:
Jenkins 广泛应用于持续集成(CI)和持续部署(CD)的场景,适用于软件开发、测试和部署的全流程自动化。
要在工作时间后触发一个阶段/步骤,并且只触发一次(不是每天),可以使用 Jenkins 的 Build periodically
功能,并结合一些额外的逻辑来实现。
假设你有一个 Jenkins 任务,你想在工作时间后触发一个特定的阶段/步骤,并且只触发一次。你可以使用以下步骤:
Build periodically
功能,并设置一个 cron 表达式,确保它在工作时间后触发。pipeline {
agent any
stages {
stage('Trigger Once') {
when {
expression { return shouldTriggerOnce() }
}
steps {
echo 'This step will trigger only once after working hours.'
}
}
}
}
def shouldTriggerOnce() {
def currentTime = new Date()
def startOfWorkingHours = new Date().setHours(18, 0, 0, 0) // 6 PM
def endOfWorkingHours = new Date().setHours(23, 59, 59, 999) // 11:59 PM
if (currentTime >= startOfWorkingHours && currentTime <= endOfWorkingHours) {
def lastExecutionTime = getLastExecutionTime()
if (lastExecutionTime == null || currentTime.getTime() - lastExecutionTime.getTime() > 86400000) { // 24 hours
saveLastExecutionTime(currentTime)
return true
}
}
return false
}
def getLastExecutionTime() {
// 从文件或数据库中读取上次执行时间
// 示例:return new Date(new File('lastExecutionTime.txt').text.toLong())
return null
}
def saveLastExecutionTime(Date time) {
// 将当前时间保存到文件或数据库中
// 示例:new File('lastExecutionTime.txt').write(time.getTime().toString())
}
Build periodically
设置一个 cron 表达式,确保它在工作时间后触发。when
条件中使用 shouldTriggerOnce
方法,判断是否应该触发该步骤。shouldTriggerOnce
方法中,检查当前时间是否在工作时间后,并且距离上次执行时间超过 24 小时。getLastExecutionTime
和 saveLastExecutionTime
方法记录和读取上次执行时间。通过这种方式,你可以确保在特定时间段后只触发一次构建步骤。
领取专属 10元无门槛券
手把手带您无忧上云