Почему Gitlab CI не может получить подмодуль git, но при следующем pu sh проверяет подмодуль? - PullRequest
0 голосов
/ 06 августа 2020

Мой проект состоит из родительского и дочернего проектов. Дочерний проект включен в родительский проект как подмодуль.

Я использую Gitlab CI. Ниже представлен файл .gitlab-ci.yml.

stages:
 - build

variables:
  GIT_SUBMODULE_STRATEGY: recursive
  
build-backend:
  image: mcr.microsoft.com/dotnet/core/sdk:3.1
  stage: build
  script:
    - echo "build-backend"
    - apt update -y
    - apt install -y nodejs npm
    - node --version
    - npm --version
    - ls -al MyApp/client
    - dotnet publish MyApp /p:PublishProfile="Profile"

Файл gitmodules выглядит так:

[submodule "MyApp/client"]
    path = MyApp/client
    url = ../myappclient.git
    branch = master

  

Если я внесу изменения в исходный код и pu sh на Gitlab, затем Gitlab выдает эту ошибку

fatal: destination path '/builds/def/abc/xyz/MyApp/client' already exists and is not an empty directory.

Полное сообщение об ошибке

Running with gitlab-runner 13.1.0 (6214287e)
  on runner-docker-builder-7.dev.nsynd.com spMNyspT
Preparing the "docker" executor
00:00
Using Docker executor with image mcr.microsoft.com/dotnet/core/sdk:3.1 ...
Pulling docker image mcr.microsoft.com/dotnet/core/sdk:3.1 ...
Using docker image sha256:052ed32b57d8892af69eb4141a96032b01534ccc63db136c5649813e727c78ca for mcr.microsoft.com/dotnet/core/sdk:3.1 ...
Preparing environment
00:02
Running on runner-spmnyspt-project-440-concurrent-0 via runner-docker-builder-7.dev.nsynd.com...
Getting source from Git repository
00:04
Fetching changes...
Reinitialized existing Git repository in /builds/def/abc/xyz/.git/
Checking out b626802d as MyBranch...
Updating/initializing submodules recursively...
Synchronizing submodule url for 'MyApp/client'
fatal: destination path '/builds/def/abc/xyz/MyApp/client' already exists and is not an empty directory.
fatal: clone of 'https://gitlab-ci-token:[MASKED]@git.dfghj.com/def/abc/mysubmodule.git' into submodule path '/builds/def/abc/xyz/MyApp/client' failed
Failed to clone 'MyApp/client'. Retry scheduled
fatal: destination path '/builds/def/abc/xyz/MyApp/client' already exists and is not an empty directory.
fatal: clone of 'https://gitlab-ci-token:[MASKED]@git.dfghj.com/def/abc/mysubmodule.git' into submodule path '/builds/def/abc/xyz/MyApp/client' failed
Failed to clone 'MyApp/client' a second time, aborting
ERROR: Job failed: exit code 1

Если я сделаю sh другое изменение (любое надуманное изменение), то сборка работает.

  1. Почему Gitlab не может получить подмодуль в первый раз?
  2. Нужно ли мне выполнять очистку после последней сборки?
...