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

如何在gitlab-ci.yml中循环遍历目录?语法错误问题求助

GitLab CI中遍历目录的正确实现方法

你的目录结构为:

  • /src
    • /app1
    • /app2
    • /app3

你已经能通过以下代码获取文件夹列表:

script:
  - cd ${CI_PROJECT_DIR}/src/
  - folders=($(ls -d */))
  - echo ${folders[@]}

但原有的for循环写法会报错syntax error: unexpected end of file,原因是GitLab CI默认将每个-开头的行视为独立命令,循环的for、do、done分散在不同行时,bash无法识别完整的循环结构。

以下是几种可行的解决方法:

方法1:使用多行脚本块(推荐)

通过|符号将循环代码标记为一个完整的bash脚本块,保留换行和缩进:

script:
  - cd ${CI_PROJECT_DIR}/src/
  - |
    for folder in */; do
      echo "${folder}"
      # 在此添加需要执行的脚本,例如:
      # cd "${folder}" && npm install && npm run build
    done

这种写法可读性强,适合复杂的循环逻辑。

方法2:将循环写成单行

用分号分隔循环的各个部分,作为单个命令执行:

script:
  - cd ${CI_PROJECT_DIR}/src/
  - for folder in */; do echo "${folder}"; done

方法3:用bash -c包裹循环

将循环逻辑作为参数传递给bash执行:

script:
  - cd ${CI_PROJECT_DIR}/src/
  - bash -c 'for folder in */; do echo "${folder}"; done'

额外优化:避免使用ls获取目录

直接用bash的glob匹配*/比ls -d */更安全,能处理包含空格的目录名,无需先将目录存入数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:32:09