当前位置: 首页 > 知识库问答 >
问题:

如何在作业结束时运行脚本,即使作业被取消?

危飞文
2023-03-14

这是我目前在GitHub上使用的工作流程

name: Windows10 - CI
on: [ push ]
jobs:
  run-test:
    runs-on: [ self-hosted, windows, DO ]
    steps:
      - uses: actions/checkout@v2
        with:
          clean: false

      - name: Run nds2 CI - Sanity Test
        if: github.ref == 'refs/heads/master'
        run: cd c:\actions-runner\_work\nds2\nds2 ; python3 ci_host.py --master

      - name: Run nds2 CI - Build Installer
        if: github.ref != 'refs/heads/master'
        run: cd c:\actions-runner\_work\nds2\nds2 ; python3 ci_host.py

我有一台windows 10计算机,它使用GitHub runner监听传入的作业。在传入作业时,如果正在向主分支推送脚本ci_主机。py使用“--master”标志运行,该标志会启动一个VM并对其运行多个测试。最终,在测试结束时,脚本将VM恢复到预先配置的快照。

因此,基本上我试图实现的是,当通过GitHub操作web界面取消作业时,处理测试的脚本在作业中被取消,并且没有机会将VM恢复到之前的干净状态(快照)。

即使作业被取消,我如何运行将在工作流结束时运行的脚本?因此,无论发生什么,我的VM都可以恢复到其干净状态

提前感谢您的帮助:)

共有1个答案

阎英朗
2023-03-14

您可以使用作业状态检查功能来执行步骤,具体取决于作业之前发生了什么(或没有发生):

>

  • 成功:当前面的步骤都没有失败或被取消时返回true

    始终:即使取消,也始终返回。当严重故障阻止任务运行时,作业或步骤将不会运行。例如,如果获取源失败。

    取消:如果工作流被取消,则返回true

    失败:当作业的任何前一步失败时返回true

    使用示例:

    steps:
      ...
      - name: Execute if the job succeeded
        if: ${{ success() }}
      
      - name: Execute if the job failed
        if: ${{ failure() }}
      
      - name: Execute if the job was cancelled
        if: ${{ cancelled() }}
      
      - name: Always execute
        if: ${{ always() }}
    

  •  类似资料:
    • 是否可以从Groovy脚本运行jenkins作业? 我知道这是可能的运行詹金斯的工作从管道像这样 生成作业:“测试” 这也不起作用 构建(“测试”) 错误 生成作业:“测试” 编辑后执行系统Groovy脚本并添加 我在Hudson.instance.queue这条线上出错了。计划(作业,0,causeAction,paramsAction) 构建步骤“执行系统Groovy脚本”将构建标记为失败

    • 我很想知道任务计划程序如何结束正在运行的任务。我已将一个应用程序添加到任务计划程序作业中,并且它接缝类似于在任务计划程序中为我的作业按 end 时(从任务计划程序启动它后),任务被窗口杀死(没有在我的应用程序中收到或消息)。我也没有找到一种方法来配置我希望如何在任务计划程序中关闭我的任务。我的目标是处理任务计划程序发送的消息(如果有)并很好地关闭我的应用程序。

    • 问题内容: 在我们的centos6服务器中。我想以apache用户的身份在cron作业中执行php脚本,但不幸的是它不起作用。 这是crontab的版本(crontab -uapache -e) 这是“ test.php”文件的源代码,可以与“ apache”用户作为所有者正常工作。 我尝试将php替换为php的完整路径(/ usr / local / php / bin / php),但它也不起

    • 我对是否可以在从属节点中使用Groovy脚本运行Jenkins作业感到困惑。我提到了一个 StackOverflow 答案 [1],它说 System Groovy 脚本作业可以在主站而不是从站中运行,并且要在从站中运行作业,它必须是 Groovy 脚本而不是 System Groovy 脚本。有人可以澄清我是否可以使用系统时髦脚本运行从属作业吗?由于我正在尝试通过Groovy脚本,因此无法访问几

    • 问题内容: 很简单,我有要每月执行一次的节点脚本。 但这是行不通的,大概是因为该命令正在运行的路径或外壳。我尝试了以下通过cron执行节点的方法(已通过-v测试): 我没办法尝试了,有什么建议吗? 问题答案: 只需提供cron作业中node的完整路径即可,例如:

    • 问题内容: 我想每天午夜运行一个PHP脚本。在研究如何执行此操作之后,似乎达到此目的的最佳方法是使用CRON作业。 如果我的php脚本位于http://example.com/scripts/scriptExample.php,是否有人可以显示此CRON命令的外观的最简单示例? 我浏览了许多帖子,但找不到足够简单的示例供我学习和借鉴。 问题答案: Crontab需要服务器上的完整路径。 这将每天在