通常我们使用git时本地开发,上传到远程仓库中,服务器在拉取远程仓库的代码,这样就需要开发人员要经常登录到服务器中手动拉取代码,是比较繁琐的。

今天分享一个git自动拉取线上代码的shell脚本。

脚本里面涉及了邮件的发送,日志的记录,正则表达式等知识点,git的操作

首先了解一下git基本流程:

本地开发:git add .  // 添加      git commit -a -m'注释'  //提交    git push origin develop // 推送到远程仓库中

        服务器:此时在服务器上拉取代码

                      1、进入到项目目录git diff 查看是否有修改的文件,如果有则进行提交,如果没有进行第二步

                       2、如果第一步没有输出的结果,则可以直接 git pull origin develop 拉取远程仓库代码

上述过程需要每一次提交代码都需要进行的过程,相对来说是比较繁琐的

下面的这个shell可以很方便的将服务器的流程自己去执行

#!/bin/sh
    export LANG=en_us.UTF-8
    export LC_ALL=zh_CN.UTF-8
    cd 项目路径   #进入到项目的根目录中
    gitDiffInfo=`git diff`   # 使用git diff 查看是否有修改  如果服务器上的代码没有修改的输出的内容为空,如果有修改将会把修改的路径和修改的文件以及内容输出
    egreps="Already up-to-date.$"   # 正则表达式   匹配拉取远程代码是否有跟新,如果结尾为这一串字符则表示远程仓库没有更新
    gitDate=`date "+%Y-%m-%d %H-%M-%S"` # 获取当前的时间
    # 判断git diff 是否为空  如果不为空格则将检查后台服务器代码的修改发送到你指定的邮箱中
    if [ -n "$gitDiffInfo" ];then
        # 邮件的发送和配置稍后讲解
        mail -s '检查后台服务器代码的修改' 需要发送的邮件地址 <<< "$gitDiffInfo"
    else
        # 如果输出为空,则执行git pull origin develop 命令
        gitPullInfo=`git pull origin develop`
        # 判断代码是否有更新,通过正则匹配进行判断
        if [[ "$gitPullInfo" =~ $egreps ]];then
            # 以下三行代码是进行日志的写入
            echo "$gitDate" >> 你自己的日志地址
            echo "无代码更新" >> 你自己的日志地址 
            echo -e "\n" >> 你自己的日志地址
        else
            # 以下三行代码时进行日志的写入  将pull的结果写入到日志中
            echo "$gitDate" >> 你自己的日志地址
            echo "$gitPullInfo" >> 你自己的日志地址
            echo -e "\n" >> 你自己的日志地址   # echo -e "\n" 输出三行回车
        fi
    fi

上述的shell脚本写好 添加可执行的权限  chmod -R 755 脚本名称

可以通过  ./脚本名称  进行执行测试 查看是否有问题

没有问题则可以直接添加到定时任务中了

添加定时任务    crontab -e 编辑定时任务

*/1 * * * * 脚本的路径   # 每一分钟执行一次

可以使用 crontab -l 查看是否将定时任务添加到了定时任务的列表中

上述代码涉及到了邮件发送,这里简单的叙述一下:

需要配置  /etc/mail.rc 文件

# 设置配置文件的路径
set nss-config-dir=/etc/pki/nssdb
# 忽略证书的验证
set ssl-verify=ignore
// 配置smtp服务器
set smtp=smtps://smtp.163.com:465
# 配置登录方式
set smtp-auth=login
# 配置登录的用户名  你自己的邮箱地址
set smtp-auth-user=aaaa@163.com
# 相对应的邮箱的授权码
set smtp-auth-password=aaaa
# 发送人的邮箱
set from=aaa@163.com

配置好后保存退出

没有附件的邮件发送

mail -s '测试标题' 收件人地址 <<< "邮件内容"

带有附件的邮件发送

echo "邮件内容" |mail -s '邮件标题' -a 附件的绝对路径 收件人地址

以上邮件发送命令可以直接在shell脚本中使用,也可以直接在命令中使用