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

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

Следующее основано на конфигурации 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:

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

- Нажмите
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 минуты.
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow