繁体   English   中英

gitlab 跑步者在最后抛出“清理基于文件的变量 00:01 错误:作业失败:退出代码 1”

[英]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 用命令替换搞砸了一些东西(昨天显示了一个新版本),尽管我对这个问题或它的时机可能是错误的。 它似乎也只发生在某些命令替换而不是其他命令替换时,我最初怀疑它可能与输出到/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 语句(echo)中的行,您可以将其替换为以下内容:

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);

解决了我们的问题。

尝试使用受保护的 CI/CD 变量时出现此错误。

在我的例子中,我的脚本以curl命令结束,命令 URL 将返回 403 Forbidden 并可能挂断

curl -s "$ENV_URL/hello" | grep "hello world"

...如果这对任何人有帮助:-)

这对我来说是一个非常具体的用例(.NetCore),但它最终会帮助某人。

在我的例子中,日志中没有写入错误,测试成功执行,但作业失败,问题中显示存在消息。

我在我的源项目中引用了 xunit(不仅在我的测试项目中),我不知道为什么这会导致 ci 作业失败(但在本地工作时只显示警告:无法找到 testhost.dll。请发布你的测试项目并重试)。

从我的源项目(不是测试项目)中删除 xunit 解决了这个问题。

在我的例子中,我只有一个条件命令,如果最后一个条件为假,那么 gitlab 认为脚本出错(即使不是这样,因为它使用最后一行作为返回值)

这就是我的脚本的样子,如果项目使用的是 yarn 而不是 npm,它将出错

      [ -f yarn.lock ] && yarn install --frozen-lockfile --cache .npm && yarn prod
      [ ! -f yarn.lock ] && npm ci --prefer-offline --cache .npm && npm run prod --cache .npm

所以解决方案只是确保最后一行返回 true

      [ -f yarn.lock ] && yarn install --frozen-lockfile --cache .npm && yarn prod
      [ ! -f yarn.lock ] && npm ci --prefer-offline --cache .npm && npm run prod --cache .npm
      true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM