目录
- 前言
- 效果
- 工具
- 具体配置
- bash脚本
前言
不知你是否碰到如下场景:
- 当dev开发完且master有新上线,dev没有master的最新代码QA无法打包,但电脑在公司,人在他方
- 只有你有打包权限,但电脑在公司,人在他方
- 。。。。。。
若在电脑旁这不是啥问题,但有时电脑在公司,人在路上或在家。就得麻烦同事来帮忙搞,嗯…有些小烦人。 但身为一个码农怎么能屈服于这种小事呢。
效果
- 手机给mac发送一个特定格式的邮件
- mac收到邮件执行对应脚本
- 脚本执行完将日志以邮件的方式反馈给手机
- 电脑休眠不影响脚本执行
工具
- mac自带的邮件
- mac终端自带的mail
- mac自带的名为【脚本编辑器】的软件
- 想要执行的脚本
具体配置
打开邮件,command+,
打开设置,进入选择最后的规则,配置时需要注意如下几点
- 执行的脚本只能是appleScript(苹果自家脚本语言),使用mac自带的名为【脚本编辑器】的软件编写就行
- 只能选择放在
~/Library/Application Scripts/com.apple.mail
目录下的脚本 - 不熟悉appleScript脚本的同学可以直接让其去执行制定位置的bash脚本,bash默认目录为
~/
,可以根据需要cd到指定目录
tell application "Terminal"
activate
do script "bash ./mail/merge.sh"
end tell
bash脚本
在次提供自动merge代码的脚本,仅供参考。发送邮件使用的是mac自带的mail。如果没有收到做如下检查
#!/bin/bash
sendEmail(){
echo -e $1 | mail -s "merge结果" xxxxx@163.com
}
# 指定项目目录
cd xxxxxx
# 获取当前分支
logs=$(git symbolic-ref --short -q HEAD);
logs="${logs}开始合master\n"
# 暂存未提交的代码
git add .
git stash
logs="${logs}暂存完毕\n"
git fetch
check_results=$(git merge master)
if [ "$check_results" != "Already up to date." ]
then
logs="${logs}有冲突请手动合并\n"
git merge --abort
sendEmail
exit
fi
logs="${logs}没有冲突"
git push
logs="${logs}合并master完成"
sendEmail $logs
- 就通过
mail
命令查看发送的邮件是否被打回,被打回按照如下方式操作,如果因为SMTPUTF8
被拒绝,执行如下两条命令
# 必须得叫sudo,我也不知道为啥,不加就报错
sudo postconf smtputf8_enable=no
sudo postfix reload # postfix是mac自带的邮件服务器,mail命令就是通过其收发邮件