【发布时间】:2020-07-21 06:49:25
【问题描述】:
我已经阅读了很多关于如何将 Git 集成到 Redmine 的文章。我已经尝试过 git-hook 插件,但它仍然没有显示与提交相关的修订或问题。这是我现在拥有的:
这两个 cron 作业每 5 分钟运行一次:
*/5 * * * * deploy cd /home/deploy/github_repo/ && ./git_checker.sh
*/5 * * * * deploy cd /home/deploy/apps-available/redmine/ && ./bin/rails runner "Repository.fetch_changesets" -e production
第一个 cron 作业中的 git_checker.sh 文件如下所示:
#! /bin/bash
now="$(date +'%d/%m/%Y %T')"
echo "-------------------------------"
for d in */ ; do
now="$(date +'%d/%m/%Y %T')"
cd $d && git fetch origin +refs/heads/*:refs/heads/* && git reset --soft
cd ..
echo "Excuted in $d at $now"
echo "-------------------------------"
done >> output_file
输出文件只是检查它是否运行,它确实运行:
Excuted in project1.git/ at 21/07/2020 06:05:01
-------------------------------
Excuted in project2/ at 21/07/2020 06:05:02
-------------------------------
Excuted in project3-backend/ at 21/07/2020 06:05:03
-------------------------------
Excuted in project3-frontend.git/ at 21/07/2020 06:05:03
-------------------------------
Excuted in project4/ at 21/07/2020 06:05:04
-------------------------------
以下是存储库的设置:[![Settings for Repositories][1]][1]
这是我的项目存储库设置的示例:[![Settings for Project][2]][2]
这是我所做的 git 提交的示例。请注意,我在提交消息中包含了 IssueID:
commit ad3cb36ad5478a55a455dfb0d17c127asdf34 (HEAD -> master, origin/master, origin/HEAD)
Author: Jason Shultz <user@gmail.com>
Date: Mon Jul 20 22:58:30 2020 -0600
IssueID 1996 testing repository linking
在这里您可以看到项目的存储库。你会看到没有修订。 [![项目存储库][3]][3]
在这里您会看到我更改的文件。它显示修订号,但如果我点击它们,我会得到一个 404。[![已更改的文件][4]][4]
当我单击更改的文件时,“历史记录”选项卡为空。
--- ENVIRONMENT ---
sh: 1: svn: not found
sh: 1: hg: not found
sh: 1: cvs: not found
sh: 1: bzr: not found
Environment:
Redmine version 4.1.0.devel
Ruby version 2.6.5-p114 (2019-10-01) [x86_64-linux]
Rails version 5.2.4.2
Environment production
Database adapter Mysql2
Mailer queue ActiveJob::QueueAdapters::AsyncAdapter
Mailer delivery smtp
SCM:
Git 2.17.1
Filesystem
Redmine plugins:
additionals 2.0.23
redmine_agile 1.5.3
redmine_checklists 3.1.16
redmine_contacts 4.3.0
redmine_edit_custom_fields 0.0.5
redmine_github_hook 3.0.1
redmine_pretend 2.0.1
redmine_user_import 0.1.0
编辑 2020 年 7 月 21 日晚上 7:49
根据@jkraemer 的问题。我做了一个简单的更改,并在我的提交消息中输入:
git commit -m 'IssueID #1996: test test'
我跟踪了我运行的日志文件./bin/rails runner "Repository.fetch_changesets" -e production。
日志文件输出:
Creating scope :system. Overwriting existing method Enumeration.system.
Creating scope :sorted. Overwriting existing method Group.sorted.
Creating scope :sorted. Overwriting existing method User.sorted.
Starting Pretend plugin for RedMine
Creating scope :visible. Overwriting existing method Principal.visible.
Creating scope :visible. Overwriting existing method AgileQuery.visible.
Creating scope :visible. Overwriting existing method PeopleQuery.visible.
另外,我注意到 Redmine 中的存储库没有显示任何更新。它仍然显示以前的文件版本。 (我还加倍检查以确保我确实推送了代码。)
编辑 2020 年 7 月 23 日
我更改了调试级别,再次尝试同步,并获得了更令人印象深刻的注销:
Completed 200 OK in 2234ms (Views: 1673.8ms | ActiveRecord: 448.1ms)
(0.6ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
Creating scope :system. Overwriting existing method Enumeration.system.
Creating scope :sorted. Overwriting existing method Group.sorted.
Creating scope :sorted. Overwriting existing method User.sorted.
AnonymousUser Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('AnonymousUser') AND `users`.`lastname` = 'Anonymous' LIMIT 1
Starting Pretend plugin for RedMine
Setting Load (0.7ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'plugin_additionals' ORDER BY `settings`.`id` DESC LIMIT 1
Creating scope :visible. Overwriting existing method Principal.visible.
Creating scope :visible. Overwriting existing method AgileQuery.visible.
Creating scope :visible. Overwriting existing method PeopleQuery.visible.
Started GET "/github_hook?project_id=intertracker-frontend" for 140.82.115.147 at 2020-07-23 21:54:39 +0000
Processing by GithubHookController#welcome as */*
Parameters: {"project_id"=>"intertracker-frontend"}
(0.7ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
(0.6ms) SELECT MAX(`settings`.`updated_on`) FROM `settings`
Setting Load (0.6ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'rest_api_enabled' ORDER BY `settings`.`id` DESC LIMIT 1
AnonymousUser Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('AnonymousUser') AND `users`.`lastname` = 'Anonymous' LIMIT 1
Current user: anonymous
Setting Load (0.5ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'force_default_language_for_anonymous' ORDER BY `settings`.`id` DESC LIMIT 1
Setting Load (0.5ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'default_language' ORDER BY `settings`.`id` DESC LIMIT 1
Rendering plugins/redmine_github_hook/app/views/github_hook/welcome.html.erb within layouts/base
Rendered plugins/redmine_github_hook/app/views/github_hook/welcome.html.erb within layouts/base (0.7ms)
Setting Load (0.8ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'app_title' ORDER BY `settings`.`id` DESC LIMIT 1
Setting Load (0.6ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'ui_theme' ORDER BY `settings`.`id` DESC LIMIT 1
Setting Load (0.8ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'default_users_hide_mail' ORDER BY `settings`.`id` DESC LIMIT 1
Setting Load (0.6ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'default_users_time_zone' ORDER BY `settings`.`id` DESC LIMIT 1
Rendered plugins/redmine_pretend/app/views/user/_unpretend.html.erb (0.5ms)
Rendered plugins/additionals/app/views/additionals/_html_head.html.slim (10.2ms)
Setting Load (0.7ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'gravatar_enabled' ORDER BY `settings`.`id` DESC LIMIT 1
Rendered plugins/additionals/app/views/additionals/_body_top.slim (2.2ms)
Setting Load (0.7ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'login_required' ORDER BY `settings`.`id` DESC LIMIT 1
Setting Load (0.6ms) SELECT `settings`.* FROM `settings` WHERE `settings`.`name` = 'self_registration' ORDER BY `settings`.`id` DESC LIMIT 1
Role Load (0.8ms) SELECT DISTINCT `roles`.* FROM `roles` INNER JOIN `member_roles` ON `member_roles`.`role_id` = `roles`.`id` INNER JOIN `members` ON `members`.`id` = `member_roles`.`member_id` INNER JOIN `projects` ON `projects`.`id` = `members`.`project_id` WHERE (projects.status <> 9) AND `members`.`user_id` = 4
Role Load (0.5ms) SELECT `roles`.* FROM `roles` WHERE `roles`.`builtin` = 2 LIMIT 1
GroupAnonymous Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
(0.8ms) SELECT `users`.`id` FROM `users` WHERE `users`.`type` IN ('GroupAnonymous')
(0.7ms) SELECT `members`.`user_id`, `role_id`, `members`.`project_id` FROM `members` INNER JOIN `projects` ON `projects`.`id` = `members`.`project_id` INNER JOIN `member_roles` ON `member_roles`.`member_id` = `members`.`id` WHERE (projects.status <> 9) AND (members.user_id = 4 OR (projects.is_public = TRUE AND members.user_id = 2))
EnabledModule Exists (0.6ms) SELECT 1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'issue_tracking' LIMIT 1
GroupAnonymous Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
EnabledModule Exists (0.6ms) SELECT 1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'gantt' LIMIT 1
GroupAnonymous Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
EnabledModule Exists (0.6ms) SELECT 1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'calendar' LIMIT 1
GroupAnonymous Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
EnabledModule Exists (0.6ms) SELECT 1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'news' LIMIT 1
Rendered plugins/additionals/app/views/additionals/_content.html.slim (2.5ms)
Rendered plugins/additionals/app/views/additionals/_body_bottom.html.slim (2.7ms)
Rendered plugins/redmine_people/app/views/common/_people_select2_data.html.erb (0.7ms)
Rendered plugins/redmine_people/app/views/common/_layout_bottom.html.erb (6.8ms)
Completed 200 OK in 1048ms (Views: 170.6ms | ActiveRecord: 23.8ms)
编辑 2020 年 7 月 24 日
这是 irb 输出:
irb(main):031:0> Repository.find(45).fetch_changesets
Repository Load (0.7ms) SELECT `repositories`.* FROM `repositories` WHERE `repositories`.`id` = 45 LIMIT 1
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'branch' '--no-color' '--verbose' '--no-abbrev'
Changeset Exists (0.6ms) SELECT 1 AS one FROM `changesets` WHERE `changesets`.`repository_id` = 45 LIMIT 1
(0.4ms) BEGIN
Repository Exists (0.5ms) SELECT 1 AS one FROM `repositories` WHERE `repositories`.`identifier` = BINARY 'intertracker-frontend' AND `repositories`.`id` != 45 AND `repositories`.`project_id` = 117 LIMIT 1
(0.4ms) COMMIT
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'log' '--no-color' '--encoding=UTF-8' '--raw' '--date=iso' '--pretty=fuller' '--parents' '--stdin' '--no-renames' '--reverse'
=> nil
这是相应的尾日志:
Repository Load (0.7ms) SELECT `repositories`.* FROM `repositories` WHERE `repositories`.`id` = 45 LIMIT 1
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'branch' '--no-color' '--verbose' '--no-abbrev'
Changeset Exists (0.6ms) SELECT 1 AS one FROM `changesets` WHERE `changesets`.`repository_id` = 45 LIMIT 1
(0.4ms) BEGIN
Repository Exists (0.5ms) SELECT 1 AS one FROM `repositories` WHERE `repositories`.`identifier` = BINARY 'intertracker-frontend' AND `repositories`.`id` != 45 AND `repositories`.`project_id` = 117 LIMIT 1
(0.4ms) COMMIT
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'log' '--no-color' '--encoding=UTF-8' '--raw' '--date=iso' '--pretty=fuller' '--parents' '--stdin' '--no-renames' '--reverse'
它实际上并没有从 github 存储库中获取更改。如果我手动运行:
git fetch origin +refs/heads/*:refs/heads/* && git reset --soft
然后它会拉取代码,然后再次运行上述命令以获取变更集:
Repository Load (0.8ms) SELECT `repositories`.* FROM `repositories` WHERE `repositories`.`id` = 45 LIMIT 1
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'branch' '--no-color' '--verbose' '--no-abbrev'
Changeset Exists (0.6ms) SELECT 1 AS one FROM `changesets` WHERE `changesets`.`repository_id` = 45 LIMIT 1
(0.4ms) BEGIN
Repository Exists (0.5ms) SELECT 1 AS one FROM `repositories` WHERE `repositories`.`identifier` = BINARY 'intertracker-frontend' AND `repositories`.`id` != 45 AND `repositories`.`project_id` = 117 LIMIT 1
(0.4ms) COMMIT
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'log' '--no-color' '--encoding=UTF-8' '--raw' '--date=iso' '--pretty=fuller' '--parents' '--stdin' '--no-renames' '--reverse'
=> nil
irb(main):085:0> Repository.find(45).fetch_changesets
Repository Load (0.9ms) SELECT `repositories`.* FROM `repositories` WHERE `repositories`.`id` = 45 LIMIT 1
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'branch' '--no-color' '--verbose' '--no-abbrev'
Changeset Exists (0.6ms) SELECT 1 AS one FROM `changesets` WHERE `changesets`.`repository_id` = 45 LIMIT 1
(0.5ms) BEGIN
Repository Exists (0.5ms) SELECT 1 AS one FROM `repositories` WHERE `repositories`.`identifier` = BINARY 'intertracker-frontend' AND `repositories`.`id` != 45 AND `repositories`.`project_id` = 117 LIMIT 1
(0.4ms) COMMIT
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'log' '--no-color' '--encoding=UTF-8' '--raw' '--date=iso' '--pretty=fuller' '--parents' '--stdin' '--no-renames' '--reverse'
=> nil
我已经安装了 github-hook 插件。它是使用 post commit hook 来拉取代码等的。如果我将代码推送到 repo,我确实看到了 hook 触发器,并且会发生以下输出:
Started GET "/github_hook?project_id=intertracker-frontend" for 140.82.115.155 at 2020-07-24 21:35:12 +0000
Processing by GithubHookController#welcome as */*
Parameters: {"project_id"=>"intertracker-frontend"}
(0.6ms) SELECT MAX(`settings`.`updated_on`) FROM `settings`
AnonymousUser Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('AnonymousUser') AND `users`.`lastname` = 'Anonymous' LIMIT 1
Current user: anonymous
Rendering plugins/redmine_github_hook/app/views/github_hook/welcome.html.erb within layouts/base
Rendered plugins/redmine_github_hook/app/views/github_hook/welcome.html.erb within layouts/base (0.2ms)
Rendered plugins/redmine_pretend/app/views/user/_unpretend.html.erb (0.1ms)
Rendered plugins/additionals/app/views/additionals/_html_head.html.slim (0.6ms)
Rendered plugins/additionals/app/views/additionals/_body_top.slim (0.1ms)
Role Load (1.0ms) SELECT DISTINCT `roles`.* FROM `roles` INNER JOIN `member_roles` ON `member_roles`.`role_id` = `roles`.`id` INNER JOIN `members` ON `members`.`id` = `member_roles`.`member_id` INNER JOIN `projects` ON `projects`.`id` = `members`.`project_id` WHERE (projects.status <> 9) AND `members`.`user_id` = 4
Role Load (0.5ms) SELECT `roles`.* FROM `roles` WHERE `roles`.`builtin` = 2 LIMIT 1
GroupAnonymous Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
(0.9ms) SELECT `users`.`id` FROM `users` WHERE `users`.`type` IN ('GroupAnonymous')
(0.5ms) SELECT `members`.`user_id`, `role_id`, `members`.`project_id` FROM `members` INNER JOIN `projects` ON `projects`.`id` = `members`.`project_id` INNER JOIN `member_roles` ON `member_roles`.`member_id` = `members`.`id` WHERE (projects.status <> 9) AND (members.user_id = 4 OR (projects.is_public = TRUE AND members.user_id = 2))
EnabledModule Exists (0.6ms) SELECT 1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'issue_tracking' LIMIT 1
CACHE GroupAnonymous Load (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
EnabledModule Exists (0.5ms) SELECT 1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'gantt' LIMIT 1
CACHE GroupAnonymous Load (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
EnabledModule Exists (0.5ms) SELECT 1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'calendar' LIMIT 1
CACHE GroupAnonymous Load (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
EnabledModule Exists (0.6ms) SELECT 1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'news' LIMIT 1
Rendered plugins/additionals/app/views/additionals/_content.html.slim (0.2ms)
Rendered plugins/additionals/app/views/additionals/_body_bottom.html.slim (0.1ms)
Rendered plugins/redmine_people/app/views/common/_people_select2_data.html.erb (0.3ms)
Rendered plugins/redmine_people/app/views/common/_layout_bottom.html.erb (0.5ms)
Completed 200 OK in 23ms (Views: 13.3ms | ActiveRecord: 7.0ms)
但如果我去项目中的 repo,它不会更新。 :( [1]:https://i.stack.imgur.com/y87jo.png [2]:https://i.stack.imgur.com/CWaIv.png [3]:https://i.stack.imgur.com/1uqnM.png [4]:https://i.stack.imgur.com/SO2m7.png
编辑 08/02/2020
寻找 NGINX:
~$ ps aux | grep nginx
root 1115 0.0 0.4 230692 19236 ? Ss Jul01 0:04 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 17569 0.0 0.4 232988 18636 ? S Aug02 0:00 nginx: worker process
www-data 17570 0.0 0.4 232988 18360 ? S Aug02 0:00 nginx: worker process
deploy 31000 0.0 0.0 14852 1116 pts/1 S+ 04:03 0:00 grep --color=auto nginx
寻找红宝石:
~$ ps aux | grep ruby
deploy 30982 0.0 0.0 14852 1096 pts/1 S+ 04:03 0:00 grep --color=auto ruby
as root: # ps aux|grep ruby
root 31890 0.0 0.0 14852 1012 pts/1 S+ 04:24 0:00 grep --color=auto ruby
【问题讨论】:
-
一个愚蠢的提示:网址缩短器可能很有用,但它隐藏了原始网址,并将其变成您必须信任缩短器的链接(我以前从未听说过
nimb.ws)跨度> -
尽可能地,帖子应该是自包含的。请使用与您的问题相关的内容更新您的问题(如果可能:不是完整转储)。
-
您必须在问题 ID 前加上
#前缀,以便 Redmine 识别它。但由于它还没有显示任何修订,这似乎不是你唯一的问题。为了更容易调试,请关闭您的 cron 作业,调用fetch_changesets以获取单个存储库,然后查看 Redmine 日志文件。 -
@jkraemer 谢谢你的建议,我按照你的要求做了。我用结果更新了帖子。谢谢! :)
-
嗯,就日志输出而言,这并不多:)请在
config/environments/production.rb中添加config.log_level = :debug,然后再试一次。