我有一组GitHub操作作业,我想在web查找结果上有条件地运行这些作业。然而,我不希望这些工作失败,我只是不想让它们运行。
我目前正在讨论的是这个问题,但它似乎不像预期的那样有效:
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表示任务应该跳过):
- 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逻辑中缺少了一些东西,但我不知道上面是什么。
发布于 2022-12-01 02:03:04
您缺少一些额外的代码,这些代码是将步骤的输出作为作业输出所必需的。基于示例:定义作业的输出,您的check-previous-build.yml应该如下所示:
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
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 }}"https://stackoverflow.com/questions/74521915
复制相似问题