首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跳过后续的Github操作

跳过后续的Github操作
EN

Stack Overflow用户
提问于 2022-11-21 16:22:43
回答 1查看 43关注 0票数 1

我有一组GitHub操作作业,我想在web查找结果上有条件地运行这些作业。然而,我不希望这些工作失败,我只是不想让它们运行。

我目前正在讨论的是这个问题,但它似乎不像预期的那样有效:

代码语言:javascript
复制
jobs:
  check-previous-build:
    uses: ./.github/workflows/check-previous-build.yml

  bundle-install:
    uses: ./.github/workflows/deps-bundle-install.yml
    secrets: inherit
    needs:
      - check-previous-build
    if: ${{ needs.check_previous_build.outputs.previous_build == 'true'}}

检查任务看起来如下( 200表示任务应该跳过):

代码语言:javascript
复制
- name: Check Previous Build
        id: check_previous_build
        run: |
          sha=$(git show HEAD --format=%T -q)
          url=http://example.com/check?id=${sha}
          echo "Checking $url .."
          status_code=$(curl -s -o /dev/null -w "%{http_code}" $url)
          if [[ $status_code -ge 200 && $status_code -le 299 ]]; then
            echo -e "\x1B[32m✅ Build has previously completed  \x1B[0m"
            echo "previous_build=true" >> $GITHUB_OUTPUT
          fi
          echo "previous_build=false" >> $GITHUB_OUTPUT

我觉得needs.check_previous_build.outputs.previous_build逻辑中缺少了一些东西,但我不知道上面是什么。

EN

回答 1

Stack Overflow用户

发布于 2022-12-01 02:03:04

您缺少一些额外的代码,这些代码是将步骤的输出作为作业输出所必需的。基于示例:定义作业的输出,您的check-previous-build.yml应该如下所示:

代码语言:javascript
复制
name: Check Previous Build

on:
  workflow_call:
    outputs:
      previous_build:
        description: "Status of the job"
        value: ${{ jobs.check-previous-build.outputs.previous_build }}

jobs:
    check-previous-build:
      runs-on: ubuntu-latest
      outputs:
        previous_build: ${{ steps.check-previous-build.outputs.previous_build }}
      steps:
      - name: Check Previous Build
        id: check-previous-build
        run: |
          url=http://example.com/
          status_code=$(curl -s -o /dev/null -w "%{http_code}" $url)
          if [[ $status_code -ge 200 && $status_code -le 299 ]]; then
            echo -e "\x1B[32m✅ Build has previously completed  \x1B[0m"
            echo "previous_build=success" >> $GITHUB_OUTPUT
          else
            echo "previous_build=fail" >> $GITHUB_OUTPUT
          fi

作业上的outputs对象需要显式定义并绑定到该作业中步骤的输出。可重用的工作流需要类似的处理,但需要使用workflow_call块中的workflow_call对象。见使用可重用工作流的输出

这比较次要,但条件语句也需要一个else块,否则previous_build变量总是false (在本例中为fail )。

你在主要工作流程中有了正确的想法。我省略了${{ }}条件中的if语法,它被自动计算为表达式(关于表达)。

main-workflow.yml

代码语言:javascript
复制
name: Ed's Workflow

on:
  push:
  workflow_dispatch:

jobs:
  check-previous-build:
    uses: ./.github/workflows/check-previous-build.yml

  bundle-install:
    needs: check-previous-build
    runs-on: ubuntu-latest
    if: needs.check-previous-build.outputs.previous_build == 'success'
    steps:
      - name: deps-bundle-install
        run: echo "${{ needs.check-previous-build.outputs.previous_build }}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74521915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档