gitlab配置邮件通知

配置用户提交评论、添加issue等的邮件通知:html

Gitlab邮件提醒方便跟踪项目进度,在这里介绍两种方式,一种是用系统的sendmail发送邮件,另外一种是GMAIL的stmp来发送邮件git

第一种 用系统的sendmail发送邮件web

cd /home/gitlab/gitlab/redis

vi config/environments/production.rb数据库

将这行 # config.action_mailer.delivery_method = :sendmailvim

改成    config.action_mailer.delivery_method = :sendmailbash

保存config/environments/production.rbapp

编辑config/gitlab.ymldom

vi config/gitlab.yml函数

对应修改一下配置

web:

 host: gitlab123.com

 port: 80

 https: false

email:

  from: notify@gitlab123.com

  protocol: http

  host: gitlab123.com

git_host:

  host: gitlab123.com

编辑/etc/hosts

加入你的ip对应gitlab123.com

10.0.0.71    gitlab123.com

第二种 GMAIL的stmp来发送邮件

cd /home/gitlab/gitlab/

vi config/environments/production.rb

在# config.action_mailer.delivery_method = :sendmail下加入

config.action_mailer.delivery_method = :smtp

config.action_mailer.perform_deliveries = true

config.action_mailer.raise_delivery_errors = true

config.action_mailer.smtp_settings = {

 :address              => "smtp.gmail.com",

 :port                 => 587,

 :domain               => 'gmail.com',

 :user_name            => 'account@gmail.com',

 :password             => 'password',

 :authentication       =>  :plain,

 :enable_starttls_auto => true

}

#配置好你的邮箱和密码

编辑config/gitlab.yml

vi config/gitlab.yml

对应修改一下配置

email:

  from: account@gmail.com

  protocol: http

 

配置源码push到版本库时的通知:

0、先安装msmtp,参考http://www.cnblogs.com/hanxianlong/p/3474429.html

一、进入到repositories中,如/opt/gitlab-6.3.0-0/apps/gitlab/repositories/imagesys5/test.git

     cd /opt/gitlab-6.3.0-0/apps/gitlab/repositories/imagesys5/test.git

二、到项目的hooks目录中,新建一个名为post-receive的hook软连接,指向到/usr/share/doc/git-1.7.1/contrib/hooks/post-receive-email

  ln -s /usr/share/doc/git-1.7.1/contrib/hooks/post-receive-email hooks/post-receive

三、编辑项目的config文件

     vim config

新增以下配置节:
[hooks]
mailinglist = "YOURMAIL1@MAILSERVER.COM,YOURMAIL2@MAILSERVER.COM"
emailprefix="[GIT]"

   

四、编辑项目的Description名称

   vim description

  修改内容为项目名称

 五、修改/usr/share/doc/git-1.7.1/contrib/hooks/post-receive-email文件的send_mail函数(大约640行和642行),将/usr/sbin/sendmail替换为/usr/bin/msmtp

 

send_mail()
638 {
639 if [ -n "$envelopesender" ]; then
640 #/usr/sbin/sendmail -t -f "$envelopesender"
641 /usr/bin/msmtp -t -f "$envelopesender"
642 else
643 #/usr/sbin/sendmail -t
644 /usr/bin/msmtp -t
645 fi
646 }

##############################

Introduction

为Git repository 添加hook,每次commit 时发送一封diff email

Procedure

  1. 拷贝Git-core自带的post-receive-email Shell 脚本

    mv YOUR_REPO_PATH/hooks/post-receive YOUR_REPO_PATH/hooks/post-receive.back cp PATH/TO/GIT-CORE/contrib/hooks/post-receive-email YOUR_REPO_PATH/hooks/post-receive chmod a+x YOUR_REPO_PATH/hooks/post-receive

  2. 设置 Git repository 的config

    vi YOUR_REPO_PATH/config

    [hooks] mailinglist = “Receive1@email.address,Receive2@email.address” emailprefix = “[git]” announcelist = envelopesender = “SenderSender@email.address” sendmail = /usr/sbin/sendmail showrev=

其中 mailinglist 为收件人,emailprefix 为邮件前缀,announce list 为repo建立tag时的汇总信息邮件收件人列表, evelopesender 为发件邮箱地址,sendmail 为发件程序地址,showrev 为Log打印格式。

而后推送一个提交试试。It's work!

More useful

Email Content formatted

发送的是纯文本的邮件,对于Diff信息很难辨识。咱们能够经过修改post-receive脚本自定义邮件样式。 [Making Git show post-receive emails as an HTML colour formatted diff]提供了这个脚本,我就直接拿来用。

可是标题咱们要求是"[ProjectName][CommitAuthor][Action][Branch]CommitLog",因此还须要本身定制。 首先是获取ProjectName,由于咱们是使用GitLab做为Git repository server,它集成 gitelitolite 了,本身负责建立项目,一些MetaData并无保存在Repo中,而是在数据库中。好比ProjectName,它没有提供YOUR_REPO_PATH/description这个文件,因此直接使用文章中的post-receive会出现项目名称为空的状况。

我就将ProjectName设置为Repo目录名称:

projectdesc=$(basename $(pwd))
projectdesc=${projectdesc%.git*}

而后咱们再修改邮件标题:

Subject: ${emailprefix}[$projectdesc][$(git log --pretty=format:"%cn" -1 $describe)][${change_type}d][$short_refname]$(git log --pretty=format:"%s" -1 $describe)

其中$(git log --pretty=format:"%s" -1 $describe为获取提交日志,$describe为Commit reversion。

好了自此,邮件内容格式问题解决了。

1dacac63-2012-44f6-83c3-a60542bbe180.png

Integrate with Gitlab

并非全部的Repo都须要邮件绑定,不过咱们能够将这些配置放到YOUR_REPO_PATH/config中做为开关。
此外Gitlab Dashboard的提交动态一样须要绑定post-receive hook,因此须要将这两个脚本整合在一块儿。

咱们直接将Gitlab工做的那一行逻辑复制到咱们的脚本中。
这里发生一个事故,我直接粘贴rpush那一行,致使其中变量引用错误,Gitlab 的默认版本不是$refname,致使提交了部分脏数据到Gitlab中,最后经过删除那部分的events数据解决。耗时半小时。

# --- Main loop
# Allow dual mode: run from the command line just like the update hook, or
# if no arguments are given then run as a hook script
if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
        # Output to the terminal in command line mode - if someone wanted to
        # resend an email; they could redirect the output to sendmail
        # themselves
        PAGER= generate_email $2 $3 $1
else
        while read oldrev new rev refname
        do
                repo_path=`pwd`
                env -i redis-cli rpush "resque:gitlab:queue:post_receive" "{\"class\":\"PostReceive\",\"args\":[\"$repo_path\",\"$oldrev\",\"$newrev\",\"$refname\",\"$GL_USER\"]}" > /dev/null 2>&1
                if [ -n "$recipients" ]; then # validate repo email notify information
                        generate_email $oldrev $newrev $refname | send_mail
                fi
        done
fi

而后将这个脚本替换Gitlab默认的post-receive . 之后的项目只须要添加YOUR_REPO_PATH/confighooks邮件信息就能够触发。

##############################################

http://huangx.in/3/for-git-add-a-submit-message-notification

相关文章
相关标签/搜索