由于本文多處對coding.net使用了超鏈接標記,可能會被列為推廣軟文。
如果你看完后認為有可取之處,請點贊,評論,并與筆者交流在非主流(因為自動化部署大部分為linux服務(wù)器,win的部署鮮有講解)情況下的git使用技巧。
最近一直在考慮自動部署的事情,因為每次,本地提交完畢,都需要到服務(wù)器上用一遍`git pull`命令,coding.net給我們提供了方便,當然其他像是 Git@osc,code@csdn等好像也提供了這個東東,但是現(xiàn)在的這個文章不是講的如何在這些平臺上使用webhook,只是簡單的講一下怎么用,主要還在于windows下的難點攻關(guān)。
適用coding的部署公鑰進行部署
首先讓我們使用coding提供的部署公鑰(生成公鑰的方法請自行谷歌、百度)。服務(wù)端拉取代碼時需要使用ssh方式。
QQ20150810-3.png
使用這個的目的就是為了保證服務(wù)端的任何修改都不會被同步到git服務(wù)器,永遠確保所有信息都是通過服務(wù)器pull得到,避免服務(wù)器本地merge和conflict,也避免因為服務(wù)器與本地環(huán)境不同導致在講config文件放入到版本控制中時,每次本地代碼在git-flow 工作流下commit前都要對config文件進行復原的操作。
windows服務(wù)器代碼位置確定和編寫,瀏覽器訪問調(diào)試
windows服務(wù)器端代碼地址確定
假設(shè)windows服務(wù)器上你打算建立的文件放在根目錄那么這個文件可以叫做hook.php, 因為放在根目錄所以訪問地址也比較好寫,http:// yourdomain /hook.php。 現(xiàn)在你可以在hook.php中添加內(nèi)容了。
我當時是這樣添加的
exec("git.exe pull", $array2);
var_export($array2);
因為在安裝git的時候設(shè)定了cmd也可以直接使用git所以我一開始這樣寫,結(jié)果我調(diào)試了大約幾分鐘從git status,git checkout -b sddfdsf然后又寫會回`git pull`發(fā)現(xiàn)仍然不行。
于是我開始查看window的path的變量環(huán)境,發(fā)現(xiàn)在Path中根本沒有g(shù)it相關(guān)的地址。我開始明白是因為環(huán)境變量沒有,PHP環(huán)境的不到git的的命令地址。于是寫成這樣
exec("D:\\Git\\bin\\git.exe pull", $array2);
\var_export($array2);
可是仍然不行,由于PHP的運行時默認失常我設(shè)置為300s,所以我果斷點擊了停止,然后更改pull為status。然后我又切換回pull,這時我意識到查看任務(wù)管理器,是否有進城執(zhí)行(因為status時是有返回的),發(fā)現(xiàn)它調(diào)起來2個git.exe進程,2個sh.exe進程,1個ssh.exe進程。這些進程的用戶都是system。我考慮是不是因為管理員權(quán)限的問題,于是我打開cmd開始執(zhí)行命令D:\Git\bin\git.exe pull,執(zhí)行的瞬間亮了,終于知道為神馬會等待300s了,因為這個等待輸入的原因。

果斷輸入
yes.然后繼續(xù)D:\Git\bin\git.exe pull這時候出現(xiàn)的提示更有趣了。
竟然公鑰不對?這是嘛道理?于是我將administrator目錄下的
.ssh目錄挨個拷貝到用戶的目錄下,繼續(xù)使用那個命令,仍然是這個結(jié)果。臥槽,怎么回事這是,我當時就是這么想的。然后我不斷翻看文件夾,無意中打開D:\Git目錄發(fā)現(xiàn)這樣一個事情:它下面竟然有一個.ssh文件夾,打開一看里面有一個konwn_hosts打開后發(fā)現(xiàn)證實鋼材的ssh鏈接的指紋信息。那就明白了,趕緊拷貝公鑰私鑰過來。在執(zhí)行那個命令,返回結(jié)果Already up-to-date.這個命令搞定了,可行。然后我們使用瀏覽器訪問http:// yourdomain /hook.php 來測試是否能夠執(zhí)行命令。

成功!
返回coding網(wǎng)站,添加webhook
第三就是在coding.net上進行設(shè)置
QQ20150810-4.png
設(shè)置好后要點擊下測試是否腳本正確執(zhí)行
QQ20150810-6.png
總結(jié)
windows下的使用總是讓人摸不著頭腦,比如在mingw中,git的命令地址為/bin/git, 在這個環(huán)境中是可以使用git pull但是你在命令行中模擬測試卻不能用回提示這個錯誤
D:\yourdomain\api>C:\WINDOWS\SysWOW64\cmd.exe /c ""D:\Git\bin\sh.exe" --login -i" git pull
Welcome to Git (version 1.9.5-preview20150319)
Run 'git help git' to display the help index.
Run 'git help <command>' to display help for specific commands.
sh.exe": /bin/git: No such file or directory
這個就很讓人無語,我們且不理他,現(xiàn)在總算完成了整個操作,簡單,但是卻不易操作,因為各操作系統(tǒng)不太一樣,你在按照我的方法做的時候也可能會遇到更多的坑。
本文同步發(fā)表在 海諾博客公告板


