Alfred - 简化工作流之一键更新代码

简介

        记录如何通过使用Alfred来简化自己的工作流。


需求

        在公司需要负责维护几个网站的后台,测试服和正式服都是在阿里云,然后还有个SVN服务器。每次修改完代码都需要进行以下操作(在不考虑新增文件或出现冲突的前提下):

1.使用CornerStone更新某个项目代码;

2.使用CornerStone提交修改了的代码;

3.打开iTerm,SSH到服务器;

4.输入服务器密码;

5.cd 项目路径;

6.对服务器进行代码更新(第一次可能需要再次输入密码);

        以上操作速度快的话差不多需要30秒,每天至少进行15次以上这样的操作,特别是开发新功能时更是繁琐。浪费时间不说,还及其影响工作心情。可能前一秒思路还在,做完这些操作都不知道怎么继续敲下去了。于是针对这一过程,进行了一点优化。


目标       

         在Alfred中输入 up 项目名 p(可选,区分测试服和正式服)即可一次性完成所有操作。


目标

Workflow最终效果


初步优化(未使用Alfred)

使用CornerStone快捷键

        针对需求中的1、2两条,CornerStone中可以使用Command+U(更新),Command+T(提交)进行操作。但是当从别的程序切换到CornerStone中时会出现失去焦点无法自动选中需要更新的项目,需要手动点击项目后才能使用快捷键;

设置.ssh配置文件

        正常情况下ssh到服务器的命令为: $ ssh name@ip,但是通过配置~/.ssh/config文件可以达到使用 $ ssh xxx来连接服务器,配置如下:


使用expect脚本+iTerm实现SSH免密登录

        但是这样做还是需要密码,于是继续查找了一下找到了可以让iTerm自动SSH的expect脚本。将该脚本(后面会提到此脚本)放入/usr/local/bin下,配置iTerm即可通过快捷键一键登录对应服务器(此脚本需要四个参数,依次为端口号、用户名、ip、密码)。配置如下:



进一步优化(使用Alfred)

分析

整个更新操作可以分为以下三部分:

1.根据所给项目名以及环境获取对应服务器的ip、账号以及密码 - 使用Alfred进行参数筛选转化;

2.更新、提交本地代码到SVN - 使用bash脚本进行更新、提交;

3.SSH到服务器更新代码 - 修改之前用到的expect脚本进行SSH连接及更新操作;

Step1 - 使用Alfred进行参数筛选转化

a.Alfred配置

首先打开Alfred新建一个空白的Workflow,根据最开始我们的目的(通过关键字来调用对应的Workflow),所以在工作区新建一个Triggers-Hotkey并双击打开新建的Hotkey,设置关键字等信息。

新建空白Workflow
新建Hotkey

b.编写脚本

我们需要完成的是当在Alfred中输入up name(测试服)或up name p(正式服)时自动SSH到指定项目对应的服务器进行代码更新。这一步我们需要根据所给的参数,也就是name和[p]来生成对应服务器的地址、账号以及密码作为参数传入下一步进行登录及更新的脚本中。流程如下图所示:

数据流动

Alfred中可以指定PHP,JS,Python,Ruby,AppleScript等脚本语言,我使用的是PHP读取本地JSON文件(将服务器地址,账号,密码事先写成JSON即可)。

以下为脚本代码及JSON文件:

脚本代码
JSON格式

到这里就可以获得SSH登录及更新脚本的路径以及所需参数,例如输入up yg p,此时的输出为:/Users/yanhao/Documents/Coding/Script/Server/update_server.sh root password 192.168.1.1 /var/xxx/xxx/yg。

现在只需要在终端中执行此脚本即可。在PHP脚本后新建Action-Terminal Command,并直接执行刚刚输出的参数。如图:

执行脚本命令

至此针对第一条的优化已完成。


Step2 - 使用bash脚本进行更新、提交

在这一步中遇到了点麻烦,在不考虑代码冲突或提交新文件的情况下的bash脚本比较简单。但是如果要考虑冲突和提交新文件等情况情况就变得比较复杂了,等有时间再进一步优化此过程,目前暂时还是使用CornerStone快捷键进行操作。

Step3 - 使用expect脚本进行SSH连接及更新操作

Expect is a tool for automating interactive applications such as telnet, ftp, passwd, fsck, rlogin, tip, etc. Expect really makes this stuff trivial. Expect is also useful for testing these same applications. And by adding Tk, you can also wrap interactive applications in X11 GUIs.

引用自:Expect官网

由于之前没有学过bash,zsh等脚本语言,对Expect更是不懂,所以这里也就不敢乱说了,免得误导大众。下面是修改后的Expect的脚本:


Expect脚本

这个脚本需要四个参数,依次为username,password,ipaddress以及project path,在Step1中已经拼接好了脚本所在路径以及对应的参数,调用此脚本即可直接ssh到服务器,并且进入对应路径进行更新操作。

总结

1.终端中如何知道某个命令已完成,并且根据完成的状态进行不同的操作。

使用Expect。

2.服务器密码中含有特殊字符$如何处理?

直接使用\$即可,网上查了用\\$或者\\\$测试都是错的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,849评论 6 13
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,169评论 11 349
  • 请不要转载 背景介绍 Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账...
    羽风之歌阅读 53,416评论 12 46
  • 你是不是像我这样茫然失措,学英语10几年依然哑巴英语?你是不是像我这样忙着追求,追求更多的单词语法遣词造句?那么,...
    蒙蒙奇2018阅读 606评论 0 0