gitlab runner throws "Cleaning up file based variables 00:01 ERROR: Job failed: exit code 1" at the end
gitlab runner throws "Cleaning up file based variables 00:01 ERROR: Job failed: exit code 1" at the end
即使我的所有步骤都成功通过,Gitlab CI 也显示了这一点 -
“清理基于文件的变量
00:01
错误:作业失败:退出代码 1"
并在最后失败了。同样有趣的是,这只发生在我的 master 分支上。它在其他分支上成功运行。有没有人遇到这个问题并找到解决方案?
- >
for dir in $(git log -m -1 --name-only -r --pretty="format:" "$CI_COMMIT_SHA"); do
if [[ -f "$dir" ]]; then
SERVICE=$(echo "$dir")
# helm install the service
fi
done
- echo "deployed"
概览
这让我发疯了,我仍然不确定合适的答案是什么。我只是 运行 自己解决了这个问题,并在这个问题上花费了数小时。我认为 GitLab 在命令替换方面搞砸了(显示 new release yesterday),尽管我可能对这个问题或其时机有误。它似乎也只发生在某些命令替换而不是其他命令替换时,我最初怀疑它可能与输出到 /dev/null
有关,但不会深入研究。它总是在启动命令替换后立即失败。
我的代码
我的代码与您的类似(下面是简化版),尝试以多种方式对其进行操作,但每次使用命令替换都会产生相同的失败消息:
Cleaning up file based variables 00:01
ERROR: Job failed: exit code 1
我所做的尝试包括以下内容:
- folders=$(find .[^.]* * -type d -maxdepth 0 -exec echo {} \; 2>/dev/null)
- >
while read folder; do
echo "$folder"
done <<< "$folders"
还有...
- >
while read folder; do
echo "$folder"
done <<< $(find .[^.]* * -type d -maxdepth 0 -exec echo {} \; 2>/dev/null)
这两个版本在我的本地机器上都成功了,但在 GitLab 上失败了(我可能在上面有拼写错误 - 请不要仔细检查,它是我实际程序的简化版本)。
我是如何修复的
我没有使用命令替换 $(...)
,而是选择了进程替换 <(...)
,它似乎没有问题。
- >
while read folder; do
echo "$folder"
done < <(find .[^.]* * -type d -maxdepth 0 -exec echo {} \; 2>/dev/null)
如果可能的话,我会尝试在您的代码中替换相同的内容:
- >
while read dir; do
# the rest goes here
done < <(git log -m -1 --name-only -r --pretty="format:" "$CI_COMMIT_SHA")
问题也可能出在 if 语句中的行(回显),您可以将其替换为以下内容:
read SERVICE < <(echo "$dir")
同样,不确定这是否会为您解决问题,因为我仍然不确定原因是什么,但它解决了我的问题。祝你好运。
一旦我将脚本从 .gitlab-ci.yml 文件删除到另一个 scipt.sh 文件并在 gitlab yaml 中调用 script.sh 文件,错误似乎就消失了。
我们 运行 在 GitLab v13.3.6-ee
中使用我们用于打开新合并请求的脚本的以下行处理相同的问题:
COUNTBRANCHES=`echo ${LISTMR} | grep -o "\"source_branch\":\"${CI_COMMIT_REF_NAME}\"" | wc -l`;
正如@ctwheels 所说,将该行更改为:
read COUNTBRANCHES < <(echo ${LISTMR} | grep -o "\"source_branch\":\"${CI_COMMIT_REF_NAME}\"" | wc -l);
解决了我们的问题。
在我的例子中,我的脚本以 curl
命令结束 URL 这将 return 403 禁止并可能挂断
curl -s "$ENV_URL/hello" | grep "hello world"
...如果这对任何人有帮助:-)
我在尝试使用受保护的 CI/CD 变量时出现此错误。
这对我来说是一个非常特殊的cific 用例 (.NetCore),但它最终会帮助某人。
在我的例子中,日志中没有写入任何错误,测试成功执行,但作业失败并显示问题中存在的消息。
我在我的源项目中引用了cing xunit(不仅在我的测试项目中),我不知道为什么这会导致 ci 作业失败(但在本地显示只有一个警告:无法找到 testhost.dll。请发布您的测试项目并重试)。
从我的源项目(不是测试项目)中删除 xunit 解决了这个问题。
即使我的所有步骤都成功通过,Gitlab CI 也显示了这一点 - “清理基于文件的变量 00:01 错误:作业失败:退出代码 1"
并在最后失败了。同样有趣的是,这只发生在我的 master 分支上。它在其他分支上成功运行。有没有人遇到这个问题并找到解决方案?
- >
for dir in $(git log -m -1 --name-only -r --pretty="format:" "$CI_COMMIT_SHA"); do
if [[ -f "$dir" ]]; then
SERVICE=$(echo "$dir")
# helm install the service
fi
done
- echo "deployed"
概览
这让我发疯了,我仍然不确定合适的答案是什么。我只是 运行 自己解决了这个问题,并在这个问题上花费了数小时。我认为 GitLab 在命令替换方面搞砸了(显示 new release yesterday),尽管我可能对这个问题或其时机有误。它似乎也只发生在某些命令替换而不是其他命令替换时,我最初怀疑它可能与输出到 /dev/null
有关,但不会深入研究。它总是在启动命令替换后立即失败。
我的代码
我的代码与您的类似(下面是简化版),尝试以多种方式对其进行操作,但每次使用命令替换都会产生相同的失败消息:
Cleaning up file based variables 00:01 ERROR: Job failed: exit code 1
我所做的尝试包括以下内容:
- folders=$(find .[^.]* * -type d -maxdepth 0 -exec echo {} \; 2>/dev/null)
- >
while read folder; do
echo "$folder"
done <<< "$folders"
还有...
- >
while read folder; do
echo "$folder"
done <<< $(find .[^.]* * -type d -maxdepth 0 -exec echo {} \; 2>/dev/null)
这两个版本在我的本地机器上都成功了,但在 GitLab 上失败了(我可能在上面有拼写错误 - 请不要仔细检查,它是我实际程序的简化版本)。
我是如何修复的
我没有使用命令替换 $(...)
,而是选择了进程替换 <(...)
,它似乎没有问题。
- >
while read folder; do
echo "$folder"
done < <(find .[^.]* * -type d -maxdepth 0 -exec echo {} \; 2>/dev/null)
如果可能的话,我会尝试在您的代码中替换相同的内容:
- >
while read dir; do
# the rest goes here
done < <(git log -m -1 --name-only -r --pretty="format:" "$CI_COMMIT_SHA")
问题也可能出在 if 语句中的行(回显),您可以将其替换为以下内容:
read SERVICE < <(echo "$dir")
同样,不确定这是否会为您解决问题,因为我仍然不确定原因是什么,但它解决了我的问题。祝你好运。
一旦我将脚本从 .gitlab-ci.yml 文件删除到另一个 scipt.sh 文件并在 gitlab yaml 中调用 script.sh 文件,错误似乎就消失了。
我们 运行 在 GitLab v13.3.6-ee
中使用我们用于打开新合并请求的脚本的以下行处理相同的问题:
COUNTBRANCHES=`echo ${LISTMR} | grep -o "\"source_branch\":\"${CI_COMMIT_REF_NAME}\"" | wc -l`;
正如@ctwheels 所说,将该行更改为:
read COUNTBRANCHES < <(echo ${LISTMR} | grep -o "\"source_branch\":\"${CI_COMMIT_REF_NAME}\"" | wc -l);
解决了我们的问题。
在我的例子中,我的脚本以 curl
命令结束 URL 这将 return 403 禁止并可能挂断
curl -s "$ENV_URL/hello" | grep "hello world"
...如果这对任何人有帮助:-)
我在尝试使用受保护的 CI/CD 变量时出现此错误。
这对我来说是一个非常特殊的cific 用例 (.NetCore),但它最终会帮助某人。
在我的例子中,日志中没有写入任何错误,测试成功执行,但作业失败并显示问题中存在的消息。
我在我的源项目中引用了cing xunit(不仅在我的测试项目中),我不知道为什么这会导致 ci 作业失败(但在本地显示只有一个警告:无法找到 testhost.dll。请发布您的测试项目并重试)。
从我的源项目(不是测试项目)中删除 xunit 解决了这个问题。