【问题标题】:Github Actions - Run job from inputGithub Actions - 从输入运行作业
【发布时间】:2021-09-23 17:13:08
【问题描述】:

我希望能够根据输入提供的作业 id 运行作业,但是 IF 表达式似乎不起作用(在作业上下文中)并且我让两个作业都在运行(在下面的示例图像中)。

Example code and pipeline run

【问题讨论】:

    标签: github github-actions


    【解决方案1】:

    对于我测试的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-ajob-b 甚至都不会被执行(上图)。

    【讨论】:

      【解决方案2】:

      也可以在工作级别完成。在手动触发并且不想连续注释/取消注释您不想执行的部分时很有用。 只需使用实际的作业名称进行匹配,而不是 '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'
        
      

      【讨论】:

        猜你喜欢
        • 2021-12-19
        • 2020-03-24
        • 2021-04-26
        • 2021-04-03
        • 2021-08-28
        • 2021-11-16
        • 2021-05-13
        • 2020-01-28
        • 2022-11-02
        相关资源
        最近更新 更多