GitLab CI遍历dist目录文件时curl报错,请求排查解决
GitLab CI流水线中for循环执行curl报错的解决方案
问题根源
- 单引号错误包裹命令:你的curl命令被一对单引号完全包裹,Shell会将整个字符串
curl -H "X-JFrog-Art-Api: $ARTIFACTORY_PW" -XPUT "$ARTIFACTORY_IMAGE_TAG" -T dist/$file当作一个完整的命令名去系统中查找,而非执行curl命令并传递参数,这直接导致了“找不到文件或目录”的错误。 - 文件路径重复无效:
$file变量本身已经是./dist/xxx格式的完整相对路径,你在-T参数里写成dist/$file,会生成dist/./dist/xxx这种无效路径,即使解决单引号问题,curl也会找不到要上传的文件。
修复后的脚本
script: - set -vux - ls ./dist/* - | for file in ./dist/*; do if [ -f "${file}" ]; then export ARTIFACTORY_IMAGE_TAG=${DATASCIENCE_REPO}/$(basename "${file}")/${IMAGE_VERSION} curl -H "X-JFrog-Art-Api: ${ARTIFACTORY_PW}" -XPUT "${ARTIFACTORY_IMAGE_TAG}" -T "${file}" fi done dependencies: - package-build
修改说明
- 移除curl命令外层的单引号,让Shell正确识别curl命令及对应参数。
- 将
-T dist/$file改为-T "${file}",使用变量自带的正确文件路径。 - 给所有变量引用加上双引号(如
${file}、${ARTIFACTORY_PW}等),避免文件名含空格等特殊字符时出现解析错误。 - 给
${IMAGE_VERSION}加上大括号,保持变量引用的一致性和可读性。
内容的提问来源于stack exchange,提问作者Amir
相关产品推荐
相关产品推荐

