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
相关产品推荐
相关产品推荐

