Git WebHook簡(jiǎn)易自動(dòng)部署筆記

CYC有三臺(tái)服務(wù)器分別位于騰訊云倾贰、阿里云冕碟、美國(guó),最近在研究自動(dòng)化部署匆浙。主要使用git+webhook方案安寺。實(shí)現(xiàn)git push后服務(wù)器自動(dòng)拉取并運(yùn)行部署腳本。

CYC在寫(xiě)iOS的過(guò)程中首尼,經(jīng)常劃水寫(xiě)一寫(xiě)Python的Flask Web項(xiàng)目挑庶。感覺(jué)本地修改調(diào)試然后部署到服務(wù)器有時(shí)有點(diǎn)麻煩=、= 趁前陣子工作不飽和的時(shí)候瞎折騰了一番软能。

部署git服務(wù)器

為了搭建私有g(shù)it 原先是簡(jiǎn)單使用 git init --bare 的方式建立倉(cāng)庫(kù)然后編輯hook/post-recieve 添加腳本迎捺,造成擴(kuò)展復(fù)雜并且腳本執(zhí)行的權(quán)限便是ssh推送用戶(hù)的權(quán)限,略有不便查排,同時(shí)在兩臺(tái)服務(wù)器+多個(gè)項(xiàng)目的情況下凳枝,部署復(fù)雜。詳見(jiàn) https://zhuanlan.zhihu.com/airbnb/19757507

于是這次搭建了一個(gè)gogs 一個(gè)由go語(yǔ)言編寫(xiě)的git服務(wù)器(后來(lái)發(fā)現(xiàn)有個(gè)衍生版本gotea跋核,不過(guò)因?yàn)橐呀?jīng)弄好了就沒(méi)再折騰了)岖瑰。
[圖片上傳失敗...(image-714a4f-1513514362275)]

gogs中可以很方便的添加webhook記下密鑰文本,這是webhook服務(wù)端用來(lái)驗(yàn)證推送者合法性的密鑰

對(duì)了砂代,截止現(xiàn)在最新版本的左側(cè)選項(xiàng)中的git鉤子是無(wú)效的在官方issue中確認(rèn)了這個(gè)問(wèn)題蹋订,坑。
[圖片上傳失敗...(image-711395-1513514362275)]

添加完后就長(zhǎng)這樣

[圖片上傳失敗...(image-53a35-1513514362275)]

準(zhǔn)備部署腳本

誒誒誒泊藕,webhook怎么生效的呢辅辩? 便是倉(cāng)庫(kù)有動(dòng)作后遍像指定的url POST一個(gè)提交的相關(guān)信息。服務(wù)器收到這條POST校驗(yàn)合法后執(zhí)行部署腳本進(jìn)行上線(xiàn)操作娃圆。下面是我一個(gè)python-web服務(wù)器的部署腳本玫锋,其實(shí)就是很簡(jiǎn)單的git pull然后reload服務(wù)器。

#!/usr/bin/env bash
set -xe

echo "Running Post Receive Hook"

export GIT_WORK_TREE=/home/pyweb/src

cd ${GIT_WORK_TREE}
git fetch origin
git reset --hard origin/master
# reload my apps
echo "reload"
supervisorctl restart pyweb
echo "finish!"

運(yùn)行webhook服務(wù)器

webhook服務(wù)器有很多開(kāi)源的項(xiàng)目讼呢,自己寫(xiě)一個(gè)也非常的簡(jiǎn)單撩鹿。因?yàn)槲业男枨笠卜浅:?jiǎn)單,只需要收到指定項(xiàng)目post url后運(yùn)行特定項(xiàng)目的部署腳本即可悦屏。于是用flask簡(jiǎn)單實(shí)現(xiàn)了一個(gè)节沦。代碼如下

[圖片上傳失敗...(image-f40a0d-1513514362275)]

同時(shí)支持通過(guò)配置文件來(lái)進(jìn)行不同項(xiàng)目的配置

{
  "progect1": {
    "key": "xxxxxxx",
    "shell_path": "progect1.sh",
    "branch": "master"
  },
  "progect2":{
      .......
  }
}

然后就可以設(shè)置webhook url到 https://xxxxx/webhook/update/project1 進(jìn)行更新操作了。

讓supervisorctl 能在非root權(quán)限下運(yùn)行

剛剛有人肯定注意到我在腳本中執(zhí)行了 supervisorctl 并沒(méi)有添加sudo础爬,而我們的webhook服務(wù)器也肯定是已非root的低權(quán)限用戶(hù)運(yùn)行的甫贯,那要怎么做到呢?

編輯 /etc/supervisor/supervisord.conf

修改此字段
[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0770                       ; sockef file mode (default 0700)
chown=nobody:git ;這里我允許git用戶(hù)組進(jìn)行操作

然后重啟supervisor即可看蚜。

用git管理服務(wù)器公鑰叫搁、https證書(shū)?

由于CYC的免費(fèi)https wildcard將于2018年過(guò)期,同時(shí)聽(tīng)說(shuō)let's encrypt 也即將允許簽署wildcard渴逻。打算將多個(gè)服務(wù)器的https證書(shū)同一部署webhook管理疾党。部署腳本做 git pull; nginx reload。想想應(yīng)該很靠譜(大flag((誤

想想ssh公鑰也可以這樣管理吧惨奕?git pull && 替換 ~/.ssh/authorized_keys && chmod 600 && service ssh restart

嗯 多人服務(wù)器管理中 要添加密鑰還可以又用戶(hù)發(fā)起pull request雪位,admin同意merge后即可自動(dòng)授權(quán)(對(duì)了 gogs也支持網(wǎng)頁(yè)上直接編輯文件不需要clone,perfect@孀病)

但是 這會(huì)遇到一個(gè)權(quán)限問(wèn)題:

指定命令可以在特定用戶(hù)下sudo免密碼運(yùn)行

執(zhí)行 sudo visudo 編輯sudoer文件

添加

www-data ALL=(ALL:ALL) NOPASSWD:/usr/sbin/service nginx reload 
// 這里也可以替換成一個(gè)指定的shell腳本路徑

運(yùn)行后如圖

[圖片上傳失敗...(image-eeb292-1513514362275)]

可見(jiàn)只有這條命令能夠sudo提權(quán)雹洗,比起添加整個(gè)用戶(hù)到sudo group安全的多啦~

有時(shí)在這里sudo會(huì)報(bào)錯(cuò)“unable to resolve host xxxx(hostname)” 這時(shí)我們只要編輯hosts添加hostname到127.0.0.1的映射即可。

阿里云給的hostname是一堆接近隨機(jī)數(shù)字的編碼聋袋,看著很不爽 好在ubuntu下可以很方便的永久修改hostname队伟。只需

sudo vi /etc/hostname

編輯完文件保存 重啟即可。

Emmmmmmm

感覺(jué)好像差不多了誒幽勒。嗜侮。。不過(guò)感覺(jué)很粗暴emmmmm(瑟瑟發(fā)抖啥容,溜了溜了)锈颗,還是怎么簡(jiǎn)單怎么來(lái)吧。接下去有空去了解了解docker咪惠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末击吱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子遥昧,更是在濱河造成了極大的恐慌覆醇,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炭臭,死亡現(xiàn)場(chǎng)離奇詭異永脓,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鞋仍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)常摧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人威创,你說(shuō)我怎么就攤上這事落午。” “怎么了肚豺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵实辑,是天一觀(guān)的道長(zhǎng)肥惭。 經(jīng)常有香客問(wèn)我录肯,道長(zhǎng)塑顺,這世上最難降的妖魔是什么拭荤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上荞下,老公的妹妹穿的比我還像新娘。我一直安慰自己隐岛,他們只是感情好猫妙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著聚凹,像睡著了一般割坠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妒牙,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天彼哼,我揣著相機(jī)與錄音,去河邊找鬼湘今。 笑死敢朱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摩瞎。 我是一名探鬼主播拴签,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼旗们!你這毒婦竟也來(lái)了蚓哩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤上渴,失蹤者是張志新(化名)和其女友劉穎岸梨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體稠氮,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡曹阔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了括袒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片次兆。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锹锰,靈堂內(nèi)的尸體忽然破棺而出芥炭,到底是詐尸還是另有隱情,我是刑警寧澤恃慧,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布园蝠,位于F島的核電站,受9級(jí)特大地震影響痢士,放射性物質(zhì)發(fā)生泄漏彪薛。R本人自食惡果不足惜茂装,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望善延。 院中可真熱鬧少态,春花似錦、人聲如沸易遣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)豆茫。三九已至侨歉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間揩魂,已是汗流浹背幽邓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留火脉,地道東北人牵舵。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像倦挂,于是被迫代替她去往敵國(guó)和親棋枕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容