【发布时间】:2021-09-23 17:13:08
【问题描述】:
我希望能够根据输入提供的作业 id 运行作业,但是 IF 表达式似乎不起作用(在作业上下文中)并且我让两个作业都在运行(在下面的示例图像中)。
【问题讨论】:
标签: github github-actions
我希望能够根据输入提供的作业 id 运行作业,但是 IF 表达式似乎不起作用(在作业上下文中)并且我让两个作业都在运行(在下面的示例图像中)。
【问题讨论】:
标签: github github-actions
对于我测试的here,关于你想要达到的目标有两点需要评估。
if 表达式的语法${{ github.event.inputs.job-name }} == {{ github.job }}
应该是
${{ github.event.inputs.job-name == github.job }}
如果表达式包含任何运算符,则表达式必须包含在 ${{ }} 中才能显式标记它以进行评估 (reference)。
作业级别的 if 表达式似乎无法检索 github.job 值。与正确的语法一样,它同时完成了两项工作:
在这种情况下,解决方法可能是在步骤级别使用 if 表达式,或使用 job 作为前提来检查上下文,然后使用具有 needs 字段的其他作业来执行每个操作。
job-a:
name: job-a
runs-on: ubuntu-latest
# if: ${{ github.event.inputs.job-name == github.job }}
steps:
- name: Print something
if: ${{ github.event.inputs.job-name == github.job }}
run: |
echo ${{ github.job }}
echo ${{ github.event.inputs.job-name == github.job }}
echo ${{ github.event.inputs.job-name }} ${{ github.job }}
job-b:
name: job-b
runs-on: ubuntu-latest
# if: ${{ github.event.inputs.job-name == github.job }}
steps:
- name: Print something
if: ${{ github.event.inputs.job-name == github.job }}
run: |
echo ${{ github.job }}
echo ${{ github.event.inputs.job-name == github.job }}
echo ${{ github.event.inputs.job-name }} ${{ github.job }}
将返回此job-a 作为输入,并且不会执行job-b 步骤。
但是,正如我上面所说,如果您在作业级别取消注释if,则job-a 和job-b 甚至都不会被执行(上图)。
【讨论】:
也可以在工作级别完成。在手动触发并且不想连续注释/取消注释您不想执行的部分时很有用。 只需使用实际的作业名称进行匹配,而不是 'github.job'
name: Conditional job Selection based on input
on:
workflow_dispatch:
inputs:
job-name:
description: 'Job id'
required: true
jobs:
build:
name: build
if: ${{ github.event.inputs.job-name == 'build' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: echo
run: |
echo "this is build job"
- name: Other steps
uses: actions/setup-java@v1
with:
java-version: '1.8'
distribution: 'adopt'
release:
name: release
if: ${{ github.event.inputs.job-name == 'release' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: echo
run: |
echo "this is release job"
- name: Other steps1
uses: actions/setup-java@v1
with:
java-version: '1.8'
distribution: 'adopt'
【讨论】: