Не удается найти репозиторий проекта в git -сервере для пользовательских хуков - PullRequest
0 голосов
/ 18 апреля 2020

Я использовал docker -compose для запуска локального сервера gitlab.

git:
    container_name: git-server
    image: gitlab/gitlab-ce:latest
    hostname: 'gitlab.example.com'
    ports:
      - '8090:80'
      - '22:22'
    volumes:
      - "$PWD/srv/gitlab/config:/etc/gitlab"
      - "$PWD/srv/gitlab/logs:/var/log/gitlab"
      - "$PWD/srv/gitlab/data:/var/opt/gitlab"
    networks:
      - net

Я хочу настроить пользовательские хуки для репозитория проекта, который я создал в веб-интерфейсе gitlab, чтобы он запускал задание jenkins. Согласно документации gitlab, это путь к репозиториям в омнибусных установках, где мне нужно будет создать каталог custom-hooks

/var/opt/gitlab/git-data/repositories/<group>/<project>.git

Но внутри / var / opt / gitlab / git -data / repositories , Я вообще не вижу групповой каталог или каталог проекта

root@gitlab:~# ls -lt /var/opt/gitlab/git-data/repositories
total 0
drwxr-s---. 3 git root 16 Apr 18 04:05 @hashed
drwxr-sr-x. 3 git root 17 Apr 18 04:00 +gitaly
root@gitlab:~#

Я попытался выполнить поиск, используя find. Но ничего не вернулось. Я пытался искать по именам файлов в моем репозитории проекта, но это также ничего не возвращало.

В веб-интерфейсе gitlab я могу видеть все это. Но на сервере нет ни одного файла и каталога.

Как получается, что я не могу найти какой-либо файл в моих репозиториях, когда sh находится на gitlab-сервере?

Поскольку я не могу go таким образом, я попытался создать каталог post-receive.d в глобальном каталоге перехватчиков / opt / gitlab / embedded / service / gitlab-shell / hooks, а затем добавив мой файл пост-получения, как показано ниже

#!/bin/bash


# Get branch name from ref head

if ! [ -t 0 ]; then
  read -a ref
fi
IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"

if [ "$branch" == "master" ]; then
crumb=$(curl -u "jenkins:1234" -s 'http://jenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -u "jenkins:1234" -H "$crumb" -X POST http://jenkins:8080/job/maven/build?delay=0sec

  if [ $? -eq 0 ] ; then
    echo "*** Ok"
  else
    echo "*** Error"
  fi

jenkins - это имя контейнера, который находится в той же сети, что и сервер gitlab.

gitlab docs говорит, что мне придется измените разрешение файла на git, а затем сделайте его исполняемым. Я так и сделал. Но это тоже не сработало. Кроме того, я обнаружил, что все каталоги git принадлежат root в моем контейнере.

После нажатия кода я решил, что хук, который я вставил в каталог /opt/gitlab/embedded/service/gitlab-shell/hooks/post-receive.d, не работает, и в журналах я вижу ниже ошибка сразу после того, как я * pu sh изменил код моего репозитория maven

==> /var/log/gitlab/nginx/gitlab_error.log <==
2020/04/18 04:57:31 [crit] 832#0: *256 connect() to unix:/var/opt/gitlab/gitlab-workhorse/socket failed (13: Permission denied) while connecting to upstream, client: <my_public_ip>, server: gitlab.example.com, request: "GET /jenkins/maven.git/info/refs?service=git-receive-pack HTTP/1.1", upstream: "http://unix:/var/opt/gitlab/gitlab-workhorse/socket:/jenkins/maven.git/info/refs?service=git-receive-pack", host: "gitlab.example.com:8090"

Здесь gitlab.example.com сопоставлен с моим publi c ip в файле / etc / hosts моего хоста на который я бегу docker.

1 Ответ

0 голосов
/ 18 апреля 2020

внутри / var / opt / gitlab / git -data / repositories, я не вижу каталог группы или каталог проекта вообще

документация " Установите GitLab, используя docker -compose", включая следующие тома:

  volumes:
    - '$GITLAB_HOME/gitlab/config:/etc/gitlab'
    - '$GITLAB_HOME/gitlab/logs:/var/log/gitlab'
    - '$GITLAB_HOME/gitlab/data:/var/opt/gitlab'

Это означает, что если вы видите локально некоторые репозитории в $GITLAB_HOME/gitlab/data/git-data/repositories, вы должны увидеть то же самое в /var/opt/gitlab/git-data/repositories/.

Предполагая, конечно, что вы создали по крайней мере один проект / репо в своем экземпляре GitLab.

...