首页 > 解决方案 > 使用 Gitlab 作业失败

问题描述

我已经使用 Gitlab 来运行 CI 计划。

问题顺序:

  1. 使用以下 yaml 脚本运行 CI 计划,现在 CI 已通过

  2. 再次运行 CI 计划,现在 CI 失败并出现以下错误代码

    警告:删除 MediaDrmCts/app/build/outputs/apk/debug/output.json 失败:参数无效

环境: Windows PC Shell 中的 Gitlab 运行器

Yaml 代码:

assembleDebug:
  stage: build
  script:
    - echo 'start building...'
    - cd MediaDrmCts
    - ./gradlew clean assemble
  artifacts:
    paths:
      - MediaDrmCts/app/build/outputs/

debugTests:
  stage: test
  script:
    - cd MediaDrmCts
    - ./gradlew -Pci --console=plain :app:testDebug

错误日志: 错误日志

请帮助我们解决问题?

标签: androidandroid-ndkgitlabyamlgitlab-ci

解决方案


这可能与 GitLab 中在 Windows 上杀死进程的问题有关:

tl;dr windows runner(当前版本约为 13.6,尚未修复)无法正确终止在作业中启动的完整进程树,因此保留文件锁的进程留待下一个作业/管道失败当它试图清理

过去我遇到过类似的问题,解决方法是清理制作它们的作业中的麻烦目录,而不是让 git clean 命令在下一个作业中清理它们。

一种选择:

debugTests:
  stage: test
  script:
    - cd MediaDrmCts
    - ./gradlew -Pci --console=plain :app:testDebug
  after_script:
    - if (Test-Path ./MediaDrmCts/app/build) { Remove-Item ./MediaDrmCts/app/build -Recurse -Force; }
...

另外的选择

如果您的构建对 repo 文件夹的清洁程度不敏感,那么您可以尝试关闭文件git clean -ffdx中的步骤.gitlab-ci.yml

...
variables:
  GIT_CLEAN_FLAGS: none
...

这将告诉 GitLab 运行器在每次运行之前不要尝试清理额外文件的存储库。

请记住,这可能会产生一些意想不到的后果,例如以前在其他分支上运行时遗留的错误文件,所以要小心,并进行良好的测试!


推荐阅读