首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Jenkins -你可以在工作时间后触发一个阶段/步骤,并且只触发一次(不是每天)吗?

基础概念

Jenkins 是一个开源的自动化服务器,用于自动化各种任务,如构建、测试和部署软件。它支持通过插件扩展功能,并且可以通过定时任务或事件触发构建。

相关优势

  1. 自动化:减少人工干预,提高效率。
  2. 可扩展性:通过插件支持多种构建和部署任务。
  3. 灵活性:可以根据不同的需求配置不同的构建流程。

类型

Jenkins 的构建触发器主要有以下几种:

  1. 定时触发:通过 cron 表达式定时触发构建。
  2. 事件触发:通过代码仓库(如 Git)的推送事件触发构建。
  3. 手动触发:通过 Jenkins 界面手动触发构建。

应用场景

Jenkins 广泛应用于持续集成(CI)和持续部署(CD)的场景,适用于软件开发、测试和部署的全流程自动化。

解决方案

要在工作时间后触发一个阶段/步骤,并且只触发一次(不是每天),可以使用 Jenkins 的 Build periodically 功能,并结合一些额外的逻辑来实现。

示例代码

假设你有一个 Jenkins 任务,你想在工作时间后触发一个特定的阶段/步骤,并且只触发一次。你可以使用以下步骤:

  1. 创建一个定时任务:使用 Build periodically 功能,并设置一个 cron 表达式,确保它在工作时间后触发。
代码语言:txt
复制
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())
}

参考链接

解释

  1. 定时任务:通过 Build periodically 设置一个 cron 表达式,确保它在工作时间后触发。
  2. 条件判断:在 when 条件中使用 shouldTriggerOnce 方法,判断是否应该触发该步骤。
  3. 时间检查:在 shouldTriggerOnce 方法中,检查当前时间是否在工作时间后,并且距离上次执行时间超过 24 小时。
  4. 记录执行时间:使用 getLastExecutionTimesaveLastExecutionTime 方法记录和读取上次执行时间。

通过这种方式,你可以确保在特定时间段后只触发一次构建步骤。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

软件测试|Jenkins创建Pipeline

,登录之后页面的左侧导航栏就能看到如下所示的图标:图片如果已经安装了Jenkins普通版本,可以【Manage Jenkins】——【ManagePlugins】中搜索BlueOcean安装,安装完之后同样主界面做侧导航栏可以看到上图中的图标...图片当然,在你考虑用这种方式创建流水线之前,必须已经设计好的流水线的步骤并且写好了可靠的Jenkinsfile。写Jenkinsfile之前我们先来熟悉一些名词。...下面是我编写的一个由【编译】——【编译Docker镜像】——【部署】——【测试】这几个阶段组成的一条流水线。不熟悉PipelineScript的同学,可以先熟悉一下语法,语法不是文章关注的重点。...但是这种方式使用起来有一定门槛,那就是必须熟悉PipelineScript的语法规则。那如果说我是一个新手,并没有语言基础,是不是就不能自己创建Pipeline了?...当然不是,下面要介绍的第二种方式,就不需要你手写代码了,Jenkins会自动帮你生成。图片使用BlueOcean插件创建Pipeline图片还记得文章开头安装的BlueOcean插件

1.5K30

收下这份Jenkins保姆级教程,拿下阿里厂牌,进场干活!

还是以上一节的房产公司为例,如果按照传统的"瀑布开发模式",先挖10栋楼的地基、再盖骨架、然后架设屋顶,每个阶段都等到前一个阶段完成开始,可能需要两年才能一次性交付10栋楼。...轮询SCM(Poll SCM) 9.1、触发远程构建     实际上就是通过 url + token 的方式来进行远程触发构建,可以构建触发器处选择 “触发远程构建”,并且设置对应的token 即完成配置了...配置完以后,下方会显示网址,一旦访问就会触发构建,要把网址变量中的JENKINS_URL和TOKEN_NAME切换成自己的Jenkins的地址(http://ip:端口)以及token。...9.2、其他工程构建触发     有些项目之间可能存在着一些依赖关系,需要先启动依赖项目再启动自身,那么此时就可以项目中配置其他项目构建触发,当依赖项目构建完成后会立即构建该项目。 ?     ...* * # 每天的8点,12点,22点各构建一次 0 8,12,22 * * * # 每天中午12点定时构建一次 H 12 * * * # 每天下午18点定时构建一次 H 18 * * * #

1.2K40
  • Jenkins自动化部署Python应用

    【日】字段是1,2,5,表示1日、2日、5日执行操作 - 可以用整数之间一个范围 【时】字段是2-6,表示2,3,4,5,6小时执行操作 / 时间的间隔频率 【时】字段是0-23/2,则表示每两小时执行一次正斜线和星号可以一起使用...) H 6 * * * 每天中午12点定时构建一次 H 12 * * * 每小时的前半小时内,每10分钟执行一次 H(0-29)/10 * * * * 每工作日,每2小时过去,从上午9:45开始...点,4点 0 10,14,16 * * * 朝九晚五工作时间内每半小时 H/30 9-17 * * 1-5 工作日1,3,5每一个半小时运行一次 H/30 H/2 * * 1,3,5 工作日,早...“构建操作”选项卡中,可以设置构建成功或失败执行的操作,例如发送邮件、发布到服务器等。 5、触发构建 配置完成,保存点击项目的“Build Now”按钮,触发构建。...构建完成可以查看构建日志和测试报告,进行问题排查和代码优化。 以上便是Jenkins工具的下载及使用说明,我们可以通过他快速部署一个自动化任务,是一个部署定时任务的不错方式。 还不赶快试试!!!

    1K10

    Appium+python自动化(四十二)- 寿终正寝完结篇 - 结尾有惊喜,过时不候(超详解)

    import包时会首先从pythonPATH的环境变量中来查看包,如果没有的PYTHONPATH中所包含的目录没有工程目录的根目录,那么导入不是一个目录下的其他工程中的包时会出现import错误...4.3下载与安装 下载地址:https://jenkins.io/download/ 下载安装到指定的路径即可,默认启动页面为localhots:8080,如果8080端口被占用无法打开,可以进入到jenkins...如下图配置:       */5 * * * * (每5分钟检查一次源码变化) 4.5jenkins定时构建语法 这是其实就是corn表达式,几分钟就可以掌握,有兴趣的可以百度一下,花费几分钟简单的学习一下...,取值0~7,其中0和7代表的都是周日 4.6使用案例 每天下午下班前18点定时构建一次 0 18 * * * 每天早上8点构建一次 0 8 * * * 每30分钟构建一次: H/30 * * * *...5.小结 到此,Appium自动化测试框架就全部完成了,聪明的都懂了吗???框架自己搭建起来???嘿嘿!慢慢地来吧。

    1.6K30

    如何使用 Jenkins 的脚本化流水线(Pipeline)

    “持续”的概念是相对于的应用环境来说的:某些情况下,持续发布可以每天可以是每周,这取决于的业务需要。特定场景中,例如严重 bug 的修复,就需要在环境准备好尽快地发布程序。...这个块不是必须但是建议使用,而且是一个好的实践。如果代码中包含这个的话,Jenkins 会进行调度,当有任何节点是可用状态时运行所有的步骤并且创建指定的工作目录。...阶段块 下一个需要的是“stage:” 的流水线中的多个步骤可以组合为阶段。在这些阶段中可能包括: 拉取代码 构建工程 部署应用 执行功能测试 执行性能测试 上面的每个阶段可以包括多个动作。...而且,可以配置 Jenkins 自动轮询的库,当检测到有更新时触发新的构建。...配置 Jenkins 轮询的代码库不是一个轻量级、高效获取更新的方式。而 Git Hooks 是一个比较好的方式。文章自定义 Git——Git Hooks 提供了如何配置的内容。

    8.6K70

    Gradle For Android(8)--建立持续集成

    介绍 Continuous Integration(CI)持续集成可以团队中每天构建非常多次。每一次自动构建都可以验证最新Push到主仓库的提交。...接下来从这几个方面介绍CI系统: Jenkins TeamCity Jenkins Setting up Jenkins 如果没有机器上安装Jenkins,那么可以Jenkins官网中下载,并且按照以下步骤安装...当你找到了Gradle插件,下载安装完重启即可。 Configuring the build 一旦安装完可以Jenkins中创建一个CI工程。...可以指定Gradle tasks来分发APK。最后,会统一看如何分发APK,因为分发这个步骤不属于任何一个构建系统。 TeamCity 和Jenkins不一样,TeamCity是免费的开源工程。...可以选择Gradle Build Step,并且把它添加到Build Configuration。点击Run...,就可以开始Android构建了。

    1.2K30

    敏捷测试价值观、方法和实践读书笔记(10)

    保证软件构建单一可信源 减少环境之间的差异 自动化所有步骤 让团队的工作快速得到反馈 持续集成与测试 只有确定代码没有质量问题,才会将其提交到主干进行合并,一旦代码合并,就进入了提交阶段。...提交阶段,开发人员将代码合并到主干后会触发的相关活动,包括代码合并、服务器端编译构建、服务器端单元测试、静态代码扫描和动态覆盖率分析等。...提交阶段执行时长不超过 10分钟 提交阶段的活动完成并生成二进制包,进入自动化验收阶段,此阶段包含自动部署、冒烟测试以及自动化测试等活动 与测试相关的持续集成实践 提交前本地运行所有的提交测试 提交测试通过后再继续工作...学到了什么? 将如何防止它在未来再次发生? (5)改进和修正。 混沌工程的价值 (1)混沌工程能够帮助发现系统中的未知因素,并且能让我们正常工作时间对其进行修复,避免牺牲休息时间。...敏捷专家 Dan Ashby 个人文章Continuous Testing in DevOps 中表示:可以看到为什么人们很难理解在这样一个根本没有提到测试的模型中,测试处于这样的位置。

    8810

    Jenkins持续集成「编译打包、代码检查、单元测试、环境部署、软件测试​」

    这个情况下去打包,就一定会打包失败并且完整告诉哪个文件哪行代码出了什么错。开发人员收到错误反馈就会修改代码然后重新打包。...每天都去编译打包,每天都能发现问题。 1.开发阶段 静态代码检测是个什么意思? 通过 Jenkins 平台来自动对代码进行静态检查。...开发人员可以每周做一次总结并处理。 可以通过 Jenkins 再做单元测试,这个需要开发人员自己配合了,他们自己写了单元测试代码,我们才能将单元测试代码集成到 Jenkins 平台。...先做完静态检查,将它编译打包,对打包的代码进行单元测试,这个从整体的代码层面不是从业务层面,而是代码的优质程度。单元测试从自己写的业务函数层面、系统功能层面,来自我检测一下这个有没有问题。...测试包部署流程: 开发一般部署自己的测试环境,测完包给到测试。正式环境一般都是运维。

    63720

    的第一个 Jenkins 项目,从这里开始

    部署 Jenkins 局域网服务 我们先过一遍部署 Jenkins 服务的步骤,因为网上讲这块内容的资料很多,所以我说一些重点步骤和需要出错的点。...即可进入 Jenkins Web 界面: 完成以上步骤一个简单的 Jenkins 服务就部署好了。...管理 Jenkins 环境 真正开始Jenkins 任务时,还需要先做一些额外的配置工作,顺便可以了解一下 Jenkins 的操作界面和相关概念。...第一个 Jenkins 项目 准备工作做好,现在我们可以开始搭建自己的构建项目了。...其实 Jenkins 可以玩的非常多,我们今天讲最主要的内容。学习一个新东西要用先整体到局部的策略,避免一开始就陷入到细枝末节中。

    95720

    Jenkins持续集成「编译打包、代码检查、单元测试、环境部署、软件测试​」

    这个情况下去打包,就一定会打包失败并且完整告诉哪个文件哪行代码出了什么错。开发人员收到错误反馈就会修改代码然后重新打包。...每天都去编译打包,每天都能发现问题。 1.开发阶段 静态代码检测是个什么意思? 通过 Jenkins 平台来自动对代码进行静态检查。...如果尽早介入,不是等代码全部开发完成才介入。 定时来做这 2 件事: 可以从开发层面很好地把控代码质量。既然加入了 Jenkins,就会有邮件通知也会有报告展示。开发人员可以每周做一次总结并处理。...先做完静态检查,将它编译打包,对打包的代码进行单元测试,这个从整体的代码层面不是从业务层面,而是代码的优质程度。单元测试从自己写的业务函数层面、系统功能层面,来自我检测一下这个有没有问题。...测试包部署流程: 开发一般部署自己的测试环境,测完包给到测试。正式环境一般都是运维。

    1.8K00

    Jenkins_流水线语法_002

    参数 parameters 指令提供了一个用户触发流水线时应该提供的参数列表。这些用户指定参数的值可通过 params 对象提供给流水线步骤, 了解更多请参考示例。...默认情况下, 如果定义了某个阶段的代理,进入该stage 的 agent 该 stage 的 when 条件将会被评估。...另外, 通过添加 failFast true 到包含 parallel的 stage 中, 当其中一个进程失败时,可以强制所有的 parallel 阶段都被终止。...声明式流水线可能使用在 流水线步骤引用中记录的所有可用的步骤, 它包含一个完整的步骤列表, 其中添加了下面列出的步骤,这些步骤声明式流水线中 only supported 。...详情参见 JENKINS-27421 和 JENKINS-26481。 语法比较 当Jenkins 流水线第一次构建时, Groovy 被选为基础。

    1.7K90

    Jenkins构建Maven项目

    触发远程构建 其他工程构建触发 定时构建 轮询SCM(不建议) Git Hook自动触发构建 安装Gitee Hook Jenkins设置自动构建 项目中添加webhook Jenkins的参数化构建...Stage:阶段一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作,比如Build、Test、Deploy、State是一个逻辑分组的概念。...Step:步骤,Step是最基本的操作单元,可以是打印一句话,也可以是构建一个Docker镜像,由各类Jenkins插件提供。...) 0 8,12,22 * 每天中午12点定时构建一次:H 12 * 每天下午18点定时构建一次: H 18 * 每个小时的前半个小时内的每10分钟: H(0-29)/10 每两小时一次,每个工作日上午...---- Git Hook自动触发构建 Jenkins的内置触发构建器中,轮询SCM可以实现GitLab代码更新、项目自动构建,但是该方案的性能不佳,有没有更好的方案?

    1.5K20

    jenkins接入钉钉api接口自动化测试报告自动发送

    分别为:分钟,小时,一个月中第几天,第几月,一周中第几天常用格式:H/30 * * * * 每30分钟构建一次H H/2 * * * 每2个小时构建一次0 8 * * * 每天早上8点构建一次0,8,12,22...* * * 每天8点,12点,22点构建各一次推送触发:当指定远端仓库存在推送或合并行为时,触发jenkins构建生成对应git仓库的凭证api tokengitlab举例:个人头像->Settings...prometheusData.txt的文件,该文件记录着测试用例的通过情况,则可以通过代码里编写一个读取该文件的方法,然后构建结束后进行调用。...安全设置(这个是钉钉app创建群机器人时的设置):ip设置:钉钉群里的机器人接收指定ip发送请求关键字:接收信息中包含关键字的请求。...jenkins自动化脚本运行完毕,通过post build task来触发该后置脚本的运行,便可获取并发送刚刚生成的测试报告的信息到钉钉群里。

    10910

    jenkens2权威指南

    阶段阶段步骤之间的关系 支持环境: 开发一个流水线脚本 Jenkins的流水线脚本既可以流水线类型的Jenkins任务中创建, 也可以定义一个叫作Jenkinsfile的外部文件中。...否则, 如果轮询功能打开, 一次运行完成,源码控制仓库中的变更将被自动检测, 并触发一次任务的执行。...回放功能可以让你在一次运行结果的基础上修改代码并再次触发流水线。 这会保存一次全新的构建记录, 但原始代码依然保持从前的状态。...它接收一个数值并且延迟相应的时间再继续执行。 默认的时间单位是秒 等待直到(waitUntil) 这个步骤会导致整个过程一直等待直到某件事发生。...它允许选择一种方法来测试某些条件, 然后基于结果执行一个或者多个构建步骤 构建后处理 传统的(基于Web的) Jenkins自由风格类型任务包含一个构建操作部分, 在那里用户可以添加一些构建结束一定发生的行为

    1.8K20

    Jenkins 中文社区技术交流微信群问题集之一

    当到某个时间点时,就只执行扫描阶段。 回答一 当代码没有变化,我们为什么要重复执行扫描呢? 回答二 换成两个流水线,一个提交触发一个定时触发 回答三 一条流水线加个开关设置是否跳过扫描。 2....3. post 里如何指定 agent 请教一下,jenkinsfile中 post里面可以指定agent?...4. windows 上 无法使用 curl 有些步骤是跑 Windows 节点上, Windows 上又希望能发 http 请求。...可以考虑这样做,把现在的事情分成两个阶段阶段 windows 上测试,然后将数据和 html 报告上传到某个地方,阶段二,将数据和报告下载回来,比如下载到 master 上。...下 我的问题就是可以不可在多分支流水线第一次启动时,不要拉取代码 回答 建立一条流水线,接受 gitlab 触发,然后根据触发请求中的数据,决定拉取哪个代码仓库。

    96030

    Sendible如何从Jenkins迁移到Argo

    不是云原生 当然, Kubernetes 中运行 Jenkins 是可能的,同样也可能在触发工作时启动动态 pod。...如果 Kubernetes 之外运行 Jenkins并且没有一个自动伸缩系统,那么可能会一直运行代理节点,这可能会增加你的成本。 为什么使用 Argo?...同样,可以将此迁移作为重新考虑并行性和任务排序的机会。Jenkins 流水线当然提供了并行运行的步骤,但这是一个必须有意识地选择的东西。...可以 Jenkins 旁边慢慢运行 Workflows——甚至可以Jenkins 触发 Workflows。当我们开始时,我们先转移自动化集成测试,然后再转移到更复杂的 CI 工作。...随着我们每天使用 Argo Workflows,我们仍然在学习关于它的新东西,我们仍然处于不断重构我们的 Workflows 以获得绝对最好的结果的阶段

    1.7K30

    一文了解CICD的常见问题

    它们都会将构建和测试,一次运行中执行完成。 ④第二轮测试 构建完成,就要进行第二轮测试。如果第一轮已经涵盖了所有测试内容,第二轮可以省略,当然,这时构建步骤也要移到第一轮测试前面。...2 实现步骤 ①集成代码 当我们完成开发工作,需要提交代码到代码库前,我们至少需要在本地跑一次单元测试,保证全部测试通过后,才可以将代码提交至我们的代码库Git上面去。...②自动构建 通过CI工具,可以设置一个勾子,当代码提交触发相应构建。例如,我们提交了module A的代码时,Jenkins会扫描到我们这次提交,勾子触发module A的构建。...所以CI工具里面,我们需要配置好在module A构建成功,自动触发module C的构建,经过类似步骤1、2这样的构建,最终会生成产品P的war包。...区别在于功能测试阶段,Maven执行到default生成周期的test阶段,不会执行后面的package和install。因为它只需要Maven帮忙运行测试代码即可,它本身没有什么可以构建的。

    1.5K30

    前端工程化之CICD那点破事

    前沿:朋友们,还在手动“丢包”?机械化搬运工当得不是滋味吧?想不想学习自动化流水线构建~如果想,这篇适合,结合CICD来自动化构建前端项目,本文树酱?...啊乐同学:那我可以将这些细节把命令集成到一个shell脚本呀,这样也不是自动化? 3.CICD时代 CICD是什么?...image.png 持续交付:持续交付是持续集成的基础上,可以将集成的代码依次部署到测试环境、予发布环境、生产环境等中 image.png ?...如果是script阶段中的其中一个任务失败,则任务进行,构建阶段的状态跟install一样也是失败 3.当代码仓库中代码发生变更,Travis就会自动触发,并执行.travis.yml定义好的命令,完成测试和构建...同时jenkins作为一个可扩展的自动化服务器,可以用作简单的 CI 服务器,具有自动化构建、测试和部署等功能,简而言之,jenkins可以方便我们日常的前端项目版本更新迭代(开发、测试、生产环境等),

    1.4K31

    Jenkins触发构建--事件触发

    事件触发 事件触发就是发生了某个事件就触发pipeline执行,这个事件可以能想到的任何事件,比如手动界面上触发、其它job主动触发、HTTP API Webhook触发等。...阶段构建时,前面阶段的问题导致后面阶段无法执行 注意:这种需要手动构建当前任务一次,让jenkins加载pipeline,trigger指令才生效 gitlab通知触发 gitlab通知触发是指当...(已废弃) 2.gitlab创建一个项目,test-a,地址http://1.1.1.1/book/test-a 3.jenkins上创建pipelien项目,可以同名称test-a。...Jenkins发现的test-a项目开启了这个触发功能,就会根据pipeline的配置进行相应处理,符合条件就会触发执行。...如果粘贴Jenkins web配置中显示的地址+Token,会报错403问题。这是因为如果没指定账号密码,gitlab只能通过匿名用户去访问Jenkins去传参。

    5.8K20
    领券