zoukankan      html  css  js  c++  java
  • gitlab配置邮件通知

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

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

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

    cd /home/gitlab/gitlab/

    vi config/environments/production.rb

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

    改为    config.action_mailer.delivery_method = :sendmail

    保存config/environments/production.rb

    编辑config/gitlab.yml

    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

    1、进入到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

    2、到项目的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

    3、编辑项目的config文件

         vim config

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

       

    4、编辑项目的Description名称

       vim description

      修改内容为项目名称

     5、修改/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

  • 相关阅读:
    七、AOP统一处理以及日志打印
    六、spring Boot项目表单验证(最小值为例)以及spring的常用注解
    五、spring-data-Jpa 数据库操作
    四、spring Boot项目中Controller的使用
    三、SpringBoot的常用配置(.yml通过配置文件和注解进行属性注入,以及分别配置生产、开发环境)
    机器学习中的 上采样 下采样 过采样 欠采样
    Mac 安装/卸载 brew
    Keras 训练自己的人脸特征点提取模型的坑
    Keras 使用自己编写的数据生成器
    iPhone 设备管理在哪(已解决)
  • 原文地址:https://www.cnblogs.com/hanxianlong/p/3463494.html
Copyright © 2011-2022 走看看