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

如何在上一步失败的同时运行下一个github操作步骤?

卜飞鸣
2023-03-14

这个问题类似于如何运行github操作步骤,即使前一步失败,但仍然无法完成作业,但接受的答案对我没有帮助,因为它会创建一个额外的作业。

下面我要做的是

  • 当测试应用程序(步骤2)通过时;测试清理步骤应该运行,github操作工作流返回成功
  • 当测试应用程序(步骤2)失败时;应运行测试清洁、行动松弛和失败行动步骤。github操作工作流返回失败

我如何修复下面的代码来实现它?

name: CI
on:
  pull_request:
    branches:
    - master
  push:
    branches:
      - master

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1    

    - name: test-app
      run: ./gradlew test

    - name: test-clean
      run: some cleanup that should run always

    - name: action-slack
      if: ${{ step2.result != 'success' }}
      uses: 8398a7/action-slack@v3
      with:
          status: ${{ step2.result }}
          fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
      env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

    - name: fail-action        
      run:  |
         if ${{ step2.result != 'success' }}; then
            exit 1
         fi

共有1个答案

章高爽
2023-03-14

您可以使用状态检查函数来了解前面步骤的状态。如果您不包含这样的函数if:成功()

要处理前面步骤的结果,您可以使用步骤上下文,如步骤。

这是一个结合所有内容的工作示例:

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    # Mock to test workflow
    - name: Test app
      id: test-app # will be referenced later
      run: |
        echo "Testing app (randomly fails)"
        if [[ $(($RANDOM % 2)) == 0 ]]; then exit 0; else exit 1; fi

    # runs always
    - name: test-clean
      if: always()
      run: echo "Cleanup after tests"

    # runs if previous jobs failed and test-app was not successful (failure/cancelled)
    - name: action-slack
      if: failure() && steps.test-app.outcome != 'success'
      run: |
        echo "Run action-slack"
        echo "Result of test-app was '${{ steps.test-app.outcome }}'"

PS:另一个问题的答案并没有添加额外的工作,而是包含了一个如何在工作中应用它的示例。然而,这个答案并不能解决您的具体用例,但它可以通过提供一些指导来帮助您

 类似资料:
  • 我已经在GitHub操作中设置了一个工作流来运行我的测试并创建测试覆盖的工件。我的YAML文件的精简版本如下所示: 问题是当测试失败时,工件不会被创建。 我从文档中找到了关于的条件,但这也会导致在我的步骤失败时运行此步骤。我不希望发生这种情况,因为在这种情况下没有什么可归档的。 如果上一步已经运行(成功或失败),我如何才能运行此步骤?

  • 我试图遵循Github的一个示例,使用Github操作测试我的构建,然后压缩测试结果并将其上传为工件。https://help.github.com/en/actions/automating-your-workflow-with-github-actions/persisting-workflow-data-using-artifacts#uploading-build-and-test-art

  • 我刚刚开始为一个项目设置一个Github操作工作流。我试图在一个容器内运行工作流步骤,并使用以下工作流定义: 但工作流无法声明容器立即停止到期。 我尝试了很多图片,包括官方文档中描述的“alpine:3.8”图片,但容器停止了。 根据GitHub操作的工作流语法,在容器部分中:“一个容器,用于运行作业中尚未指定容器的任何步骤。”我的假设是容器将被启动,步骤将在Docker容器内运行。

  • 步骤1和步骤2是需要在安装网站上运行的安装步骤,并且只需要在chrome上运行一次来为场景创建安装。一旦完成,那么步骤3和步骤4需要在客户端网站上的不同浏览器/设备(即Chrome,Firefox,Safari,Mobile)上进行检查。 我的框架是用Cucumber和JavaScript编写的。我如何在cucumber中实现这一点,场景的一些步骤只在chrome上运行一次,其余的步骤应该在不同的

  • 问题内容: 朋友你好,我试图显示我的Jave Gui应用程序中的记录,我做了一些代码,但是当我单击下一步按钮时,它显示了最后一条记录。还有什么其他方法可以查看之间的记录,请帮忙。 问题答案: 您需要将数据库代码与GUI代码分开。您还需要将您的应用程序分解为更小的,更容易编码的步骤。 这是您的应用程序在启动时需要做的事情: 打开与数据库的连接。 选择表Soil_det的所有键,然后将键保存在列表中。

  • 我正在做Spring批次。我有一个分区步骤(对象列表),然后是读者和作家的从属步骤。 我想以并行模式执行。因此,我希望每个分区都有一个特定的读写器实例。 目前,创建的分区使用相同的读写器实例。因此,这些操作是在串行模式下完成的:读取和写入第一个分区,然后在第一个分区完成后对下一个分区执行相同的操作。 Spring Boot配置类: partitionner类 读者类 作家班 你能告诉我我的密码有什