gitlab 中的基本 ci 实现错误致命:找不到远程引用

ali*_*ani 5 continuous-integration docker gitlab-ci gitlab-ci-runner

我设置了新的 gitlab docker ,然后设置了一个基于 microsoft/dotnet:latest 的带有 docer 执行器的 runner docker,然后我向 gitlab 添加了一个简单的项目,只是一个 dotnet core hello world 然后我创建了一个 ci 文件,如下所示:

image:  microsoft/dotnet:latest

stages:
  - build


variables:
  project: "ConsoleApp"

before_script:
  - "dotnet restore"

build:
  stage: build
  variables:
    build_path: "$ConsoleApp"
  script:
    - "cd $build_path"
    - "dotnet build"
Run Code Online (Sandbox Code Playgroud)

然后在管道中我得到这个输出:

Preparing environment
 Running on runner-vtysysr-project-2-concurrent-0 via e189cc9d1c60...
Getting source from Git repository
00:07
 Fetching changes with git depth set to 50...
 Reinitialized existing Git repository in /builds/root/gitlabcitest/.git/
 fatal: couldn't find remote ref refs/pipelines/18
Uploading artifacts for failed job
00:06
 ERROR: Job failed: exit code 1
Run Code Online (Sandbox Code Playgroud)

我搜索了错误,但所有答案都是关于有分支的项目,但我没有任何分支,只是一个简单的 hello world 项目。

Von*_*onC 4

OP ali-kamrani在评论中补充道:

我的问题是config在 runner docker 中的 ssh 中:将 ssh 密钥添加到 docker后,问题得到解决。


其他途径(针对其他用户)如果与问题 36123类似gitlab-org/gitlab

我们过去git push --mirror经常从不同的存储库镜像一些项目。
事实证明,它还删除了未知分支,即pipelines/XXXX和merge/XXXX。

我们现在显式地推送和删除每个分支并忽略所有pipelines/XXXX分支merge/XXXX。
后来就没有再出现这个错误了。

我知道您没有很多分支机构,但这里的问题不在于您当地的分支机构。
它通过本地启动的推送操作来修剪本地不存在的远程分支。

基本上,管道取决于管道特定的引用refs/pipelines/*,并且在管道运行时它必须存在。
因此,如果git push --mirror删除这些引用,您可能会遇到作业失败的情况。

同一个问题说明了类似的场景:

在我们的设置中,我们使用系统挂钩将 GitLab 存储库镜像到更靠近 GitLab Runner 实例所在位置的另一个位置。
这已经运行了很长一段时间了。

然而,现在 GitLab 依赖于refs/pipelines/<pipeline ID>现有的 ref,我们所有的运行器都会失败。

问题是refs/pipelines/<pipeline ID>引用是在幕后创建的,并且没有调用系统挂钩(因此我们不知道需要镜像的新引用)。
内置的Repository Mirroring功能不太适合我们,因为它必须为每个存储库进行配置;通过 System Hooks,我们可以自动镜像所有存储库。