Как интегрировать Git-репозиторий Gitlab в Redmine

Настройка инфраструктуры Redmine Git

Redmine Git Project Access Token

  • Скопируйте токен доступа в буфер обмена и сохраните его в безопасном месте. Вы не сможете увидеть его снова.

Gitlab Copy Access Token

Следующее основано на конфигурации Redmine docker-compose с Traefik и Let’s Encrypt

  • Создайте новый каталог для хранения Git-репозиториев для вашего экземпляра Redmine.
create_redmine_git_dir.sh
mkdir redmine_git
  • Добавьте это в docker-compose.yml, чтобы он был смонтирован внутри контейнера
docker-compose.yml
services:
  redmine:
    # ...
    volumes:
      # ...
      - './redmine_git:/git'

Клонирование Gitlab-репозитория в Redmine

Повторите это для каждого репозитория, который вы хотите интегрировать в Redmine.

  • В Gitlab откройте проект и перейдите в Settings -> Access Tokens
  • Создайте Access Token со следующими настройками:
    • Вы можете назвать его Redmine, но имя не имеет значения, поэтому можете выбрать любое другое имя.
    • В качестве Role выберите Developer
    • В качестве Expiration Date я рекомендую удалить значение, нажав на иконку x, чтобы токен никогда не истекал. Иначе вам придётся регулярно пересоздавать токены для всех репозиториев.
    • В качестве Scopes выберите read_repository и ничего больше.
  • Теперь перейдите на страницу проекта в Gitlab и скопируйте Git URL, например https://gitlab.mydomain.com/myuser/MyProject.git
  • Отредактируйте этот URL и добавьте username:password@ после https://, где username — имя токена (например, Redmine), а password — токен, который вы скопировали ранее.
repository_clone_url.txt
https://Redmine:glpat-LbxcydI0fNXfS9m6JMkK@gitlab.mydomain.com/myuser/MyProject.git
  • Теперь клонируйте этот URL как зеркало в каталог redmine_git
mirror_clone_repository.sh
cd redmine_git
git clone --mirror https://Redmine:glpat-LbxcydI0fNXfS9m6JMkK@gitlab.mydomain.com/myuser/MyProject.git
  • В Redmine перейдите к проекту, в который вы хотите интегрировать репозиторий, зайдите в Settings -> Repositories и нажмите New Repository:

Redmine Settings Repositories

  • Введите путь к репозиторию, например /git/MyProject.git, и новый идентификатор который может содержать только строчные буквы, цифры и подчёркивания. Этот идентификатор используется для ссылки на репозиторий в базе данных Redmine.

Redmine Create New Repository

  • Нажмите Create, и готово!

Настройка автоматического получения репозиториев

В настоящее время Redmine не поддерживает автоматическое получение репозиториев. Вы можете настроить cronjob для получения репозиториев каждые 5 минут.

Я рекомендую использовать SystemD-таймеры для этого, так как они более надёжны и в целом более гибки, чем cronjobs.

В каталоге, где находится redmine_git, создайте новый файл setup-git-fetch.sh, который настраивает скрипт получения и таймер:

setup-git-fetch.sh
#!/bin/bash
export NAME=$(basename $(pwd))-gitfetch

cat >/etc/systemd/system/${NAME}.service <<EOF
[Unit]
Description=${NAME}

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'cd redmine_git && for i in *; do [ -d "\$i" ] && cd "\$i" && git fetch --all; cd ..; done'
WorkingDirectory=$(pwd)
EOF

cat >/etc/systemd/system/${NAME}.timer <<EOF
[Unit]
Description=${NAME} timer

[Timer]
OnCalendar=*:0/2
Persistent=true

[Install]
WantedBy=timers.target
EOF

# Enable and start service
systemctl enable --now ${NAME}.timer

Запустите этот скрипт из каталога, где находится redmine_git:

run_setup_git_fetch.sh
sudo bash setup-git-fetch.sh

Этот скрипт настраивает SystemD-сервис и таймер, который получает все репозитории в redmine_git каждые 2 минуты.


Check out similar posts by category: Redmine Git