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

GitLab CI/CD Pipeline作业before_script中拼接两个变量不生效问题

问题根因

  • 你把prefix_common的计算逻辑放在了for循环外部,是对find返回的所有文件路径整体做切割,而非针对当前循环的单个文件路径计算对应值,如果你本地测试时刚好只有一个文件,所以结果符合预期,但GitLab CI环境下的文件列表和你本地不一致,就会出现值异常
  • 你当前的for循环遍历find结果的写法,在GitLab CI默认的POSIX shell环境下会有分词异常问题,很容易导致common_file变量赋值为空,最终拼接结果就会出现前缀缺失,只有_filesuffix的情况
  • 你写的cp命令里的变量拼接引号规则混乱,也会增加变量解析异常的概率

修复方案

调整后的before_script如下,把前缀计算移到循环内部,优化变量引用规则,同时显式指定用bash执行避免shell兼容问题:

before_script:
  - rm -rf .terraform
  - terraform --version
  - mkdir ~/.aws
  - echo "[default]" > ~/.aws/credentials 
  - echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >>  ~/.aws/credentials
  - echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >>  ~/.aws/credentials
  - mkdir ./deployments
  - ls common
  # 改用while遍历find结果,避免文件名含特殊字符时分词错误
  - find common -type f | while read -r f;
      do 
        common_file="$(basename "$f")"
        # 针对当前单个文件计算前缀,不要在循环外全局计算
        prefix_common="$(echo "$f" | cut -d"/" -f 1)"
        # 简化变量拼接的引号写法,整段用双引号包裹即可
        cp "$f" "./deployments/${common_file}_${prefix_common}";
      done

如果还是有变量解析问题,可以在脚本开头加set -x打印执行过程的变量值,方便快速定位异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:04