Я использовал 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, чтобы он запускал задание Дженкинса. Согласно документации gitlab, это путь для репозиториев в установках омнибуса, где мне нужно будет создать каталог custom-hooks.
/var/opt/gitlab/git-data/repositories/<group>/<project>.git
Но внутри / var / opt / gitlab / git-data / repositories я вообще не вижу каталог группы или каталог проекта
[email protected]:~# 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 [email protected]:~#
Я пробовал искать с помощью find. Но ничего не вернуло. Я попытался выполнить поиск по имени файлов в моем репозитории проекта, но это тоже ничего не вернуло.
В gitlab webUI я могу все это увидеть. Но на сервере ни один из файлов и директорий не существует.
Почему я не могу найти какой-либо файл в своих репозиториях, когда я использую ssh на gitlab-server?
Поскольку я не могу пойти по этому пути, я попытался создать каталог 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 ‘https://jenkins:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,»:»,//crumb)’) curl -u «jenkins:1234» -H «$crumb» -X POST https://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, не работает, и в журналах я вижу ошибку ниже сразу после того, как нажимаю код изменения в моем репозитории 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: «https://unix/var/opt/gitlab/gitlab-workhorse/socket:/jenkins/maven.git/info/refs?service=git-receive-pack», host: «gitlab.example.com:8090»
Здесь gitlab.example.com сопоставлен с моим общедоступным IP-адресом в файле / etc / hosts моего хоста, на котором я запускаю докер.
Источник: