bash - gitlab runner 最后抛出 "Cleaning up file based variables 00:01 ERROR: Job failed: exit code 1"

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

即使我所有的步骤都成功通过,Gitlab CI 显示了这一点 -
"清理基于文件的变量
00:01
错误:作业失败:退出代码 1"
并最终失败了。同样有趣的是,这只发生在我的主分支上。它在其他分支上成功运行。有没有人遇到过这个问题并找到了解决方案?

    - >
     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 语句( echo )中的那一行,您可以将其替换为以下内容:
read SERVICE < <(echo "$dir")

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

关于bash - gitlab runner 最后抛出 "Cleaning up file based variables 00:01 ERROR: Job failed: exit code 1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65412154/

相关文章:

bash - 比较 bash 中两个文件之间的文件权限

docker - GITLAB-CI 管道无法登录到不安全的注册表

continuous-integration - Kubernetes CI/CD 流水线

visual-studio-2010 - TFS 2010 自动构建服务器

gitlab - 非常简单的gitlab-ci.yml报告语法错误

docker - 将图层存储在gitlab ci docker executor中

Bash Shell 脚本 - 如果 Find 没有返回我期望的结果

regex - 使用 sed 用字符串为文件中的所有数字添加前缀

Bash 脚本将 cat 输出存储在变量中,然后回显它

java - Travis-ci 忽略 gradle 的缓存设置