webhook 在windows下的使用

2015-08-10 00:26:00
hainuo
原創 3067
摘要:最近一直在考慮自動部署的事情,因爲每次,本地提交完畢,都需要到服務器上用一遍`git pull`命令,[coding.net](http://coding.net)給我們提供瞭方便,當然其他像是 Git@osc,code@csdn等好像也提供瞭這箇東東,但是現在的這箇文章不是講的如何在這些平颱上使用webhook,隻是簡單的講一下怎麽用,主要還在於windows下的難點攻關。
> 由於本文多處對[coding.net](http://coding.net)使用瞭超鏈接標記,可能會被列爲推廣軟文。> 如果你看完後認爲有可取之處,請點贊,評論,併與筆者交流在非主流(因爲自動化部署大部分爲linux服務器,win的部署鮮有講解)情況下的git使用技巧。最近一直在考慮自動部署的事情,因爲每次,本地提交完畢,都需要到服務器上用一遍`git pull`命令,[coding.net](http://coding.net)給我們提供瞭方便,當然其他像是 Git@osc,code@csdn等好像也提供瞭這箇東東,但是現在的這箇文章不是講的如何在這些平颱上使用webhook,隻是簡單的講一下怎麽用,主要還在於windows下的難點攻關。# start > 首先讓我們使用[coding](coding.net)提供的部署公鑰(生成公鑰的方法請自行穀歌、百度)。服務端拉取代碼時需要使用ssh方式。![輸入圖片説明](http://blog.hainuo.info/data/upload/201508/f_5ca735784e0371bd9264c1a0a40f2ab1.png "在這裡輸入圖片標題")> 使用這箇的目的就是爲瞭保證服務端的任何修改都不會被衕步到git服務器,永遠確保所有信息都是通過服務器pull得到,避免服務器本地merge和conflict,也避免因爲服務器與本地環境不衕導緻在講config文件放入到版本控製中時,每次本地代碼在git-flow 工作流下commit前都要對config文件進行複原的操作。 # second>windows服務器端代碼地址確定>假設windows服務器上你打祘建立的文件放在根目録那麽這箇文件可以叫做hook. php, 因爲放在根目録所以訪問地址也比較好寫,http:// yourdomain /hook.php。 現在你可以在hook.php中添加內容瞭。我當時是這樣添加的```exec("git.exe pull", $array2);var_export($array2);```因爲在安裝git的時候設定瞭cmd也可以直接使用git所以我一開始這樣寫,結果我調試瞭大約幾分鐘從`git status`,`git checkout -b sddfdsf`然後又寫會迴`git pull`髮現仍然不行。於是我開始查看window的path的變量環境,髮現在Path中根本沒有git相關的地址。我開始明白是因爲環境變量沒有,PHP環境的不到git的的命令地址。於是寫成這樣```exec("D:\\Git\\bin\\git.exe pull", $array2);\var_export($array2);```可是仍然不行,由於PHP的運行時默認失常我設置爲300s,所以我果斷點擊瞭停止,然後更改`pull`爲`status`。然後我又切換迴`pull`,這時我意識到查看任務管理器,是否有進城執行(因爲`status`時是有返迴的),髮現牠調起來2箇git.exe進程,2箇sh.exe進程,1箇ssh.exe進程。這些進程的用戶都是system。我考慮是不是因爲管理員權限的問題,於是我打開cmd開始執行命令`D:\Git\bin\git.exe pull`,執行的瞬間亮瞭,終於知道爲神馬會等待300s瞭,因爲這箇等待輸入的原因。![輸入圖片説明](http://blog.hainuo.info/data/upload/201508/f_03b2b1b5898b1aef64cbe57cb0f7ec0d.png "在這裡輸入圖片標題")果斷輸入`yes`.然後繼續`D:\Git\bin\git.exe pull`這時候齣現的提示更有趣瞭。![輸入圖片説明](http://blog.hainuo.info/data/upload/201508/f_7515f4df67358b3cabcbf2a0b202ecd4.png "在這裡輸入圖片標題")竟然公鑰不對?這是嘛道理?於是我將administrator目録下的`.ssh`目録捱箇拷貝到用戶的目録下,繼續使用那箇命令,仍然是這箇結果。臥槽,怎麽迴事這是,我當時就是這麽想的。然後我不斷翻看文件夾,無意中打開`D:\Git`目録髮現這樣一箇事情:牠下麵竟然有一箇`.ssh`文件夾,打開一看裡麵有一箇`konwn_hosts`打開後髮現證實鋼材的ssh鏈接的指紋信息。那就明白瞭,趕緊拷貝公鑰私鑰過來。在執行那箇命令,返迴結果`Already up-to-date.`這箇命令搞定瞭,可行。然後我們使用瀏覽器訪問http:// yourdomain /hook.php 來測試是否能夠執行命令。![輸入圖片説明](http://blog.hainuo.info/data/upload/201508/f_075f79d0dfdc71a99a672c37db2bbd4b.png "在這裡輸入圖片標題")成功!# third> 第三就是在[coding.net](http;//coding.net)上進行設置![輸入圖片説明](http://blog.hainuo.info/data/upload/201508/f_fc094e20d18752218feba2fb93101575.png "在這裡輸入圖片標題")設置好後要點擊下測試是否腳本正確執行![輸入圖片説明](http://blog.hainuo.info/data/upload/201508/f_e4df6b8ecb63404222a6b2298a0e48bd.png "在這裡輸入圖片標題")# 總結windows下的使用總是讓人摸不着頭腦,比如在mingw中,git的命令地址爲`/bin/git`, 在這箇環境中是可以使用`git pull`但是你在命令行中模擬測試卻不能用迴提示這箇錯誤```D:\yourdomain\api>C:\WINDOWS\SysWOW64\cmd.exe /c ""D:\Git\bin\sh.exe" --login -i" git pullWelcome to Git (version 1.9.5-preview20150319)Run 'git help git' to display the help index.Run 'git help ' to display help for specific commands.sh.exe": /bin/git: No such file or directory```這箇就很讓人無語,我們且不理他,現在總祘完成瞭整箇操作,簡單,但是卻不易操作,因爲各操作繫統不太一樣,你在按照我的方法做的時候也可能會遇到更多的坑。
發錶評論
叄 乘 玖 =
評論通過審核後顯示。