git邮件配置出现网页上面的操作记录与邮件通知不共存问题

fancy_ff 发布于 2015/12/28 12:54
阅读 591
收藏 0

@独孤青冥 你好,想跟你请教个问题:大神,你好,劳烦帮我看一下下面的问题。。。急

最近搭建gitlab服务器,使用的安装包是bitnami-gitlab-7.10.1-0-linux-x64-installergitlab一键安装包).run

安 装完成后,能够打开gitlab页面,并创建项目。创建项目之后,在/opt/gitlab-7.10.1-0/apps/gitlab /repositories目录下面,就会有相应的项目目录,比如test.git(在hooks目录下面有post-receivepre- receiveupdate文件,都是ruby脚本)。此时将成员加入到项目中来,由成员进行push,在页面的activity里面有成员的 commit记录。但是这个时候是不会发送邮件的。

 下面就是配置自动发送邮件,我从网上down下一个post- receive-email文件(shell脚本),并放在hooks目录下面,并在config里面进行邮件发送的相关配置。如果我将post- receive-email文件mvpost-receive时,项目程序push代码并commit,项目里面的其他成员是可以收到邮件的。但是在 activity页面里面就没有成员commit的记录。

 而当我不mv post-receive-emailpost-receive时,项目成员push文件并commit,就会在activity里面有commit记录,但就是不会自动发送邮件。

加载中
0
独孤青冥
独孤青冥
等会,我看着有点不对劲..为什么邮件发送以及动态生成全放在hook里面?应该写在gitlab中做个 after_update才对啊,我看了一下我们正在使用的版本,压根就没有这个文件,也没有这个调用....这样,你邮件发送放在hook里面,但是动态生成你放到gitlab 中去,我们目前就是这样做的...另外,你可以对比一下两个shell脚本有什么不同,然后整合成一个脚本调用试试
fancy_ff
fancy_ff
我们这边没有生成过after_update文件。如果我在前台创建一个项目,假如是test.git,那么它就会在后台自动生成test.git目录,然后在test.git目录下面有discription、config、hooks目录等等hooks目录下面就有自动生成update、pre-receive、post-receive这三个文件,并没有after_update文件。
fancy_ff
fancy_ff
你说的动态生成的文件是放到gitlab哪个目录下呢?
fancy_ff
fancy_ff
hook就是在gitlab中的项目下的,ruby文件(生成操作记录的)是系统自带的,我没有动过地址。里面调用的post-receive-email文件(shell)是网上下载的发送邮件的脚本,按网上教程也是放在这个目录下。因为hook只会执行post-receive这个文件 ,所以我就把下载的shell文件放在ruby里面调用了
0
独孤青冥
独孤青冥

额..我们用的版本大概是5点几,不知道你说的activity页面时哪个页面..另外,我不熟悉你这个版本的gitlab,不知道问题出在哪,但你可以试一试同时存在两份shell脚本并且修改ruby脚本让他分别触发两个shell脚本,这样就解决你的问题了....当然,你可以试着将两个脚本搞成一个,或者开调试模式追踪不发送邮件的问题,抱歉,我能给的建议就这么多


我看了你的截图,是有调用hooks目录下的shell脚本,你可以试着在下面再写一个调用

fancy_ff
fancy_ff
放在图中位置则是能收到邮件,但是页面记录就没有了。。。
fancy_ff
fancy_ff
如果把Post-receive-email这个放在后面调用,则会出现页面有记录,但是却收不到邮件。下图是页面上的记录:
0
fancy_ff
fancy_ff

下图是页面上的记录:

0
独孤青冥
独孤青冥
不是放在哪个目录下,是写在代码里面,也就是要修改gitlab的代码...
fancy_ff
fancy_ff
你知道git的代码是在哪里吗?就是执行这个脚本的代码
fancy_ff
fancy_ff
额,不会~~
0
独孤青冥
独孤青冥
after_update是rails的特性,他不是文件,是一段代码哈,作用就是更新后自动触发,代码具体在哪我也不知道....你找找gitlab-shell,在你gitlab的同级目录下
fancy_ff
fancy_ff
你好,因为评论输入不了那么多内容,麻烦你看一下我回复的引用内容。。谢谢 啦
0
fancy_ff
fancy_ff

引用来自“独孤青冥”的评论

after_update是rails的特性,他不是文件,是一段代码哈,作用就是更新后自动触发,代码具体在哪我也不知道....你找找gitlab-shell,在你gitlab的同级目录下

评论不能输入那么多内容,只能引用

看到你说的那个文件,我这里叫update

(里面的代码:
#!/usr/bin/env ruby

# This file was placed here by GitLab. It makes sure that your pushed commits
# will be processed properly.

ref_name = ARGV[0]
old_value = ARGV[1]
new_value = ARGV[2]
repo_path = Dir.pwd

require_relative '../lib/gitlab_custom_hook'

if GitlabCustomHook.new.update(ref_name, old_value, new_value, repo_path)
  exit 0
else
  exit 1
end
0
fancy_ff
fancy_ff

引用来自“fancy_ff”的评论

引用来自“独孤青冥”的评论

after_update是rails的特性,他不是文件,是一段代码哈,作用就是更新后自动触发,代码具体在哪我也不知道....你找找gitlab-shell,在你gitlab的同级目录下

评论不能输入那么多内容,只能引用

看到你说的那个文件,我这里叫update

(里面的代码:
#!/usr/bin/env ruby

# This file was placed here by GitLab. It makes sure that your pushed commits
# will be processed properly.

ref_name = ARGV[0]
old_value = ARGV[1]
new_value = ARGV[2]
repo_path = Dir.pwd

require_relative '../lib/gitlab_custom_hook'

if GitlabCustomHook.new.update(ref_name, old_value, new_value, repo_path)
  exit 0
else
  exit 1
end

在同一个目录下还有另一个文件 Post-recieve

里面的代码和update很像,不会ruby,也看不懂有什么区别

#!/usr/bin/env ruby

# This file was placed here by GitLab. It makes sure that your pushed commits
# will be processed properly.
refs = ARGF.read
key_id  = ENV['GL_ID']
repo_path = Dir.pwd

# reset GL_ID env since we already got its value
ENV['GL_ID'] = nil

require_relative '../lib/gitlab_custom_hook'
require_relative '../lib/gitlab_post_receive'

if GitlabPostReceive.new(repo_path, key_id, refs).exec &&
    GitlabCustomHook.new.post_receive(refs, repo_path)
  exit 0
else
  exit 1
end

那个发邮件的shell文件就是在这里面调用的

0
独孤青冥
独孤青冥

require_relative '../lib/gitlab_custom_hook'

 GitlabCustomHook.new.update

GitlabPostReceive.new(repo_path, key_id, refs).exec &&GitlabCustomHook.new.post_receive(refs, repo_path)



这就是他们的差别哈,多引入了一个文件,多执行了一条语句,具体的执行了哪些代码你的分别去看update与post_receive这两个函数,ruby很容易懂的,基本都是语义化的代码,直接翻译过来是啥意思基本上就是干啥的

独孤青冥
独孤青冥
回复 @fancy_ff : 额..不能...
fancy_ff
fancy_ff
能看出为什么shell脚本插在post-receive里面没有结果输出 的原因吗
返回顶部
顶部