You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions中Terraform目录过滤条件失效问题求助

解决GitHub Actions中Terraform目录过滤失效的问题

你的问题出在两个地方:一是步骤中if条件的写法错误,二是当前方案会为所有目录创建job(即使步骤被跳过),效率较低。以下是两种可行的解决方法:

方法一:修正步骤中的过滤条件

你给matrix.directory额外添加了双引号,导致contains函数判断的是带引号的字符串而非目录本身。移除引号即可让条件生效:

jobs:
  collectInputs:
      name: Collect terraform directories
      runs-on: ubuntu-latest
      outputs:
        directories: ${{ steps.dirs.outputs.directories }}
      steps:
        - name: Checkout
          uses: actions/checkout@v2

        - name: Get root directories
          id: dirs
          uses: clowdhaus/terraform-composite-actions/directories@main

        - name: Outputs
          run: echo "${{ steps.dirs.outputs.directories}}"
  tflint:
    name: tflint
    needs: collectInputs
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        directory: ${{ fromJson(needs.collectInputs.outputs.directories) }}
    steps:
      - name: Clone repo
        uses: actions/checkout@v2

      - name: show only directory with 'module' substring
        # 移除matrix.directory外层的双引号
        if: contains(matrix.directory, 'module')
        run: echo "This directory contains string 'module'"

方法二:在Matrix中提前过滤目录

更高效的方式是直接在生成matrix时过滤出包含module的目录,避免为不符合条件的目录创建job:

jobs:
  collectInputs:
      name: Collect terraform directories
      runs-on: ubuntu-latest
      outputs:
        directories: ${{ steps.dirs.outputs.directories }}
      steps:
        - name: Checkout
          uses: actions/checkout@v2

        - name: Get root directories
          id: dirs
          uses: clowdhaus/terraform-composite-actions/directories@main

        - name: Outputs
          run: echo "${{ steps.dirs.outputs.directories}}"
  tflint:
    name: tflint
    needs: collectInputs
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      # 使用filter函数提前过滤目录
      matrix:
        directory: ${{ fromJson(needs.collectInputs.outputs.directories) | filter(directory, contains(directory, 'module')) }}
    steps:
      - name: Clone repo
        uses: actions/checkout@v2

      - name: show only directory with 'module' substring
        run: echo "This directory contains string 'module'"

这种方式下,只有名称包含module的目录会触发tflint作业,无需额外的步骤条件判断。

内容的提问来源于stack exchange,提问作者Sergei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:39:51