[英]Github actions "always()" condition not working as expected?
我感興趣的是為什么這個 always() 條件在 Github 工作流中沒有按預期運行。
我有一個核心管道,它工作得很好。 如果二級工作流失敗,三級工作流仍然運行,但前提是二級工作流中的 boolean output == true。
在輔助管道中,output 步驟應該僅在 boolean 輸入設置為 true 時運行。 盡管我使用了完全相同的語法,但它似乎只在條件為 always() 而不是 always() && 時運行。
這是核心管道(有效):
name: Core Pipeline
on:
workflow_dispatch:
inputs:
boolean:
description: 'boolean'
required: false
default: true
type: boolean
jobs:
secondary-workflow:
uses: ./.github/workflows/secondary-workflow.yaml
with:
boolean: true
tertiary-workflow:
needs: secondary-workflow
uses: ./.github/workflows/tertiary-workflow.yaml
if: always() && needs.secondary-workflow.outputs.boolean == 'true'
這是輔助工作流程(未按預期工作):
on:
workflow_call:
inputs:
boolean:
description: 'Boolean'
required: false
default: true
type: boolean
outputs:
boolean:
description: "Test Output"
value: ${{ jobs.job-4.outputs.boolean }}
jobs:
job-1:
runs-on: ubuntu-latest
steps:
- name: job 1
run: echo 'This job runs'
job-2:
runs-on: ubuntu-latest
needs: job-1
steps:
- name: job 2
run: echo 'This job runs'
job-3:
runs-on: ubuntu-latest
needs: [job-1, job-2]
steps:
- name: Exit
run: echo "This job fails"; exit 1
job-4:
runs-on: ubuntu-latest
needs: [job-1, job-2, job-3]
if: always() && inputs.boolean == 'true' (ADDING THE && CAUSES THE JOB TO BE SKIPPED)
steps:
- id: setOutput
run: echo "boolean=true" >> $GITHUB_OUTPUT; echo "OUTPUT_SET"
outputs:
boolean: ${{ steps.setOutput.outputs.boolean }}
我的問題是,為什么在 always() 之外添加第二個條件對核心管道有效,但對輔助管道無效?
謝謝!
當你比較
if: always() && inputs.boolean == 'true'
您正在將 boolean 與字符串進行比較。 在類型不匹配時, 操作將操作數強制轉換為數字; true
變為1
,並且'true'
(字符串)變為NaN
,並且1 == NaN
為 false。 要修復,您可以與 boolean 文字而不是字符串進行比較:
if: always() && inputs.boolean == true
或者您應該能夠自己檢查 boolean:
if: always() && inputs.boolean
至於為什么看似相同的條件在一個地方起作用而在另一個地方不起作用,我的猜測是可重用工作流中的輸入參數類型為 boolean,而needs.secondary-workflow.outputs.boolean
是一個字符串,所以比較到'true'
作品。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.