【问题标题】:gitlab runner throws "Cleaning up file based variables 00:01 ERROR: Job failed: exit code 1" at the endgitlab runner 最后抛出“清理基于文件的变量 00:01 错误:作业失败:退出代码 1”
【发布时间】:2021-04-01 08:39:53
【问题描述】:

即使我的所有步骤都成功通过,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" 

【问题讨论】:

    标签: bash continuous-integration gitlab-ci gitlab-ci-runner


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 哪一个受保护的变量?
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        我们在 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);
        

        解决了我们的问题。

        【讨论】:

          【解决方案5】:

          一旦我将脚本从 .gitlab-ci.yml 文件删除到另一个 scipt.sh 文件并在 gitlab yaml 中调用 script.sh 文件,错误似乎就消失了。

          【讨论】:

          • 知道如何将环境变量传递给 script.sh 文件吗?
          • 您可以在 gitlab ci yaml 中定义变量,并在调用脚本时传递变量。前任。 /script-to-be-called.sh "$CI_COMMIT_TAG"
          【解决方案6】:

          概述

          这让我发疯了,我仍然不确定合适的答案是什么。我自己也遇到了这个问题,并在这个问题上投入了几个小时。我认为 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 上失败了(我上面可能有错别字 - 请不要仔细检查,这是我实际程序的简化版本)。


          我是如何解决的

          我没有使用命令替换$(...),而是选择了进程替换&lt;(...),它似乎可以正常工作。

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

          同样,我不确定这是否会为您解决问题,因为我仍然不确定原因是什么,但它解决了我的问题。祝你好运。

          【讨论】:

          • 感谢您避免我“沉迷于这个问题”:)
          猜你喜欢
          • 1970-01-01
          • 2021-11-23
          • 2011-07-10
          • 2023-03-10
          • 1970-01-01
          • 2021-07-08
          • 1970-01-01
          • 2012-01-22
          • 1970-01-01
          相关资源
          最近更新 更多