github-action:IF 有 ELSE 吗?

sab*_*sab 22 github-actions

在 github 操作中,我有一个 if,但如果我处于 else 情况下,我仍然需要运行其他东西。有没有一种干净的方法来做到这一点,或者我是否必须在 false 的相同条件下执行另一个步骤?

 - if: contains(['SNAPSHOT'],env.BUILD_VERSION)
   name:IF
   run: echo ":)"
 - if: false == contains(['SNAPSHOT'], env.BUILD_VERSION)
   name: Else
   run: echo ":("
Run Code Online (Sandbox Code Playgroud)

lbr*_*ile 31

您可以执行以下操作,这只会在条件通过的情况下运行脚本:

job_name:
  runs-on: windows-latest
  if: "!contains(github.event.head_commit.message, 'SKIP SCRIPTS')"    <--- skips everything in this job if head commit message does not contain 'SKIP SCRIPTS'

  steps:
    - uses: ....
  
    - name: condition 1
      if: "contains(github.event.head_commit.message, 'CONDITION 1 MSG')"
      run: script for condition 1

   - name: condition 2
      if: "contains(github.event.head_commit.message, 'CONDITION 2 MSG')"
      run: script for condition 2
Run Code Online (Sandbox Code Playgroud)

等等。当然,你可以在这里使用你自己的条件。


aga*_*rys 17

您可以考虑使用haya14busa/action-cond操作。if-else当需要操作来设置其他步骤的动态配置时(不需要重复整个步骤来在几个参数中设置不同的值),它非常有用。

例子:

- name: Determine Checkout Depth
  uses: haya14busa/action-cond@v1
  id: fetchDepth
  with:
    cond: ${{ condition }}
    if_true: '0'  # string value
    if_false: '1' # string value
- name: Checkout
  uses: actions/checkout@v2
  with:
    fetch-depth: ${{ steps.fetchDepth.outputs.value }}
Run Code Online (Sandbox Code Playgroud)


小智 17

基于 github 操作的命令的替代解决方案是使用 shell 脚本命令来执行 if else 语句。

在 Ubuntu 机器上,检查提交是否有标签的示例工作流程,

runs-on: ubuntu-latest
steps:
  - uses: actions/checkout@v2
  - run: |
      ls
      echo ${{ github.ref }}
      ref='refs/tags/v'
      if [[ ${{ github.ref }} == *${ref}* ]]; then
        v=$(echo ${{ github.ref }} | cut -d'/' -f3)
        echo "version tag is ${v}"
      else
        echo "There is no github tag reference, skipping"
      fi
Run Code Online (Sandbox Code Playgroud)


fab*_*oad 16

GitHub Actions 没有else语句来运行不同的命令/操作/代码。但是你是对的,你需要做的就是创建另一个具有反向if条件的步骤。顺便说一句,您可以使用!代替false ==.

以下是一些链接:if 语句运算符

  • @Peter如果您将条件写在“${{ }}”括号中,则可以使用“!”。[此处](https://github.com/fabasoad/twilio-voice-call-action/actions/runs/440407309/workflow#L24) 是一个示例 (3认同)
  • 我会这么做,但最终看起来非常难看。谢谢 ! (2认同)
  • 所以你不能在一个“steps.name”中有多个“if”? (2认同)

Ham*_*mdi 14

我发现我们也可以使用表达式来实现这一点,我是这样做的:

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      PkgDesc: ${{ github.event.inputs.packageDescription != '' && github.event.inputs.packageDescription ||  format('{0} - {1}', 'Commit', github.SHA)  }}
Run Code Online (Sandbox Code Playgroud)

语法:${{ x && 'ifTrue' || '如果假' }}

更多详细信息https://github.com/actions/runner/issues/409#issuecomment-752775072