用TeamCity實(shí)現(xiàn)npm項(xiàng)目的自動部署

TeamCity是Jetbrains的持續(xù)集成工具涩盾,免費(fèi)使用的話可以設(shè)置20個(gè)構(gòu)建腳本春霍,對于我們個(gè)人來說基本上是夠用了叶眉。當(dāng)然假如以后超過限制了,可以考慮使用另一個(gè)著名的持續(xù)集成工具Jenkins离福。當(dāng)然很早以前我就安裝了TeamCity妖爷,不過一直沒機(jī)會用理朋。這幾天正好隨便寫了一個(gè)個(gè)人小項(xiàng)目嗽上,就用它來測試一下TeamCity的持續(xù)集成功能吧兽愤。

先來說下我的條件,我的TeamCity是部署在自己的電腦上逐沙,自己的電腦上當(dāng)然還有其他一些開發(fā)軟件吩案。另外我還有一臺服務(wù)器徘郭,安裝著Nginx等軟件,并開啟了FTP‰屎螅現(xiàn)在要做的就是設(shè)置一個(gè)持續(xù)集成绩卤,每當(dāng)我提交Vue項(xiàng)目的時(shí)候濒憋,TeamCity自動打包項(xiàng)目凛驮,然后上傳到FTP目錄黔夭,讓服務(wù)器更新文件羽嫡。這個(gè)過程說起來好像挺復(fù)雜杭棵,其實(shí)倒是挺簡單的。

服務(wù)器配置

我用的FTP軟件是vsftpd先舷,這是一個(gè)比較安全的FTP服務(wù)器端蒋川,一般Linux上都是用它捺球。這個(gè)軟件的缺點(diǎn)就是當(dāng)你登錄的時(shí)候氮兵,F(xiàn)TP文件夾只能是用戶主目錄武福,不能自定義修改為其他目錄醉冤。而Nginx默認(rèn)的文件目錄一般在/var/www/html或者/usr/share/nginx/html之類的铃绒。因此nginx需要將HTML文件目錄配置修改為用戶主目錄颠悬。

當(dāng)然一般情況下不會將整個(gè)用戶主目錄暴露在Web服務(wù)器下赔癌,而是只暴露一個(gè)子文件夾灾票。所以nginx配置文件可以這么寫刊苍。

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /home/yitian/html/my-website;
....

當(dāng)然這么配置的話,訪問nginx只會得到403錯(cuò)誤婴氮。這個(gè)問題困擾了我整整一個(gè)晚上的時(shí)間。最后終于找到了解決辦法莹妒。Linux下軟件對權(quán)限非常敏感。如果nginx要訪問用戶主目錄下的文件夾的話鉴腻,該文件夾下所有文件必須對所有人可讀爽哎,該文件夾下的所有子文件夾必須對所有人開放可執(zhí)行權(quán)限器一,用戶主目錄也必須對所有人可讀课锌。所以對于我來說,需要對用戶主目錄和Web文件目錄施加701和755權(quán)限,或者直接將用戶主目錄設(shè)置為755也可以渺贤。當(dāng)然我覺得用戶主目錄的權(quán)限還是小一點(diǎn)好雏胃。

chmod 701 /home/yitian
chmod 755 -R /home/yitian/html/my-website

另外再說一句,很多人管理VPS喜歡使用root賬戶管理志鞍,這樣做的好處是不需要頻繁輸入管理員密碼瞭亮。但是一直用最高權(quán)限可能有安全隱患,而且使用root賬戶創(chuàng)建的各種文件和文件夾的權(quán)限也比較高固棚。我已開始使用的就是root賬戶創(chuàng)建的my-website文件夾统翩,然后發(fā)現(xiàn)FTP無法向其中傳文件,因?yàn)闄?quán)限不夠此洲。重新使用普通賬戶創(chuàng)建該文件夾之后,F(xiàn)TP服務(wù)才可以正常訪問文件面徽。

最后在說一點(diǎn)霎匈,如果你傳入的文件夾含有中文文件名的話,服務(wù)器需要將locale設(shè)置為中文(zh_CN.UTF-8),否則中文文件名會顯示成??。Ubuntu等操作系統(tǒng)可能還需要安裝中文支持。這個(gè)問題可以參考為什么我的Linux服務(wù)器不支持Unicode

TeamCity配置

創(chuàng)建項(xiàng)目

我的這個(gè)項(xiàng)目是使用Vue腳手架搭建的一個(gè)基于WebPack的npm項(xiàng)目,并上傳到了Git倉庫框全。在下圖中填寫項(xiàng)目所需各種信息即可筒严。確定之后娶视,TeamCity會自動拉取項(xiàng)目并嘗試進(jìn)行構(gòu)建孝赫。當(dāng)然這個(gè)嘗試90%情況下都會失敗,需要我們手動設(shè)置構(gòu)建步驟。這也是TeamCity免費(fèi)版20個(gè)構(gòu)建步驟的限制原因所在。

創(chuàng)建項(xiàng)目

創(chuàng)建構(gòu)建步驟

這個(gè)地方就是本文的核心所在耍目,當(dāng)理解了TeamCity的構(gòu)建設(shè)置過程之后,我們就可以自由的組合出比較復(fù)雜的構(gòu)建過程。

構(gòu)建過程

安裝npm包

對于一個(gè)項(xiàng)目來說山憨,第一步做的事情肯定就是拉取依賴包由境,然后嘗試編譯運(yùn)行纺阔。對于我這種npm項(xiàng)目來說婆翔,TeamCity沒有預(yù)設(shè)的選項(xiàng),所以需要選擇命令行類型。由于npm包在國內(nèi)訪問不太通暢慷嗜,所以在填寫命令行的時(shí)候缭乘,使用了淘寶的鏡像逛尚。

npm install --registry=https://registry.npm.taobao.org
安裝npm包

本來在這一步我還直接在自定義腳本那里填寫了npm run build這一行代碼脑题,但是結(jié)果發(fā)現(xiàn)TeamCity好像并沒有執(zhí)行這一行已艰,所以只能講這個(gè)添加為單獨(dú)的構(gòu)建步驟痊末。另外本來我是準(zhǔn)備使用淘寶封裝的cnpm命令凿叠,但是結(jié)果發(fā)現(xiàn)這個(gè)命令在這里并不可見炒刁,強(qiáng)行使用的話只會提示找不到該命令绽昏,所以只能采用這種折中辦法。

打包項(xiàng)目

了解了第一個(gè)步驟削饵,那么打包項(xiàng)目這個(gè)步驟就很容易理解了握爷。

打包項(xiàng)目

上傳dist文件夾

這一步就是這個(gè)持續(xù)集成最關(guān)鍵的一步了跛璧,它涉及到服務(wù)器的FTP配置。不過做起來也不算難新啼。首先前面的FTP服務(wù)端需要配置好追城,服務(wù)器端nginx也要設(shè)置好。然后在這里設(shè)置FTP的用戶名和密碼师抄。這里最關(guān)鍵的一步就是Path to sources的設(shè)置了漓柑。這是一個(gè)箭頭分隔的字符串,左面是項(xiàng)目中需要上傳的文件夾叨吮,右面是FTP服務(wù)器中要上傳的文件夾辆布。這里還可以使用***通配符。詳細(xì)配置介紹可以點(diǎn)擊下面的小問號按鈕(圖里沒截到)查看官方文檔茶鉴。

上傳項(xiàng)目

設(shè)置完成之后锋玲,點(diǎn)擊項(xiàng)目右上角的run按鈕,開始執(zhí)行構(gòu)建過程涵叮。如果所有配置都正確的話惭蹂,稍等片刻就會出現(xiàn)構(gòu)建成功的提示伞插,然后訪問服務(wù)器,就會發(fā)現(xiàn)nginx也正常的顯示了打包之后的項(xiàng)目盾碗。這樣一來就大功告成了媚污。等到下次開發(fā)好項(xiàng)目并提交的時(shí)候,TeamCity就會自動檢測到變化并執(zhí)行構(gòu)建廷雅、提交到服務(wù)器耗美。這個(gè)過程是完全自動化的,我們要做的就是等待片刻就可以看到服務(wù)器上的實(shí)時(shí)變化航缀,是不是很爽呢商架?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芥玉,隨后出現(xiàn)的幾起案子蛇摸,更是在濱河造成了極大的恐慌,老刑警劉巖灿巧,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赶袄,死亡現(xiàn)場離奇詭異,居然都是意外死亡砸烦,警方通過查閱死者的電腦和手機(jī)弃鸦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門绞吁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幢痘,“玉大人,你說我怎么就攤上這事家破⊙账担” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵汰聋,是天一觀的道長门粪。 經(jīng)常有香客問我,道長烹困,這世上最難降的妖魔是什么玄妈? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮髓梅,結(jié)果婚禮上拟蜻,老公的妹妹穿的比我還像新娘。我一直安慰自己枯饿,他們只是感情好酝锅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奢方,像睡著了一般搔扁。 火紅的嫁衣襯著肌膚如雪爸舒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天稿蹲,我揣著相機(jī)與錄音扭勉,去河邊找鬼。 笑死苛聘,一個(gè)胖子當(dāng)著我的面吹牛剖效,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焰盗,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼璧尸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了熬拒?” 一聲冷哼從身側(cè)響起爷光,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澎粟,沒想到半個(gè)月后蛀序,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡活烙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年徐裸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啸盏。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡重贺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出回懦,到底是詐尸還是另有隱情气笙,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布怯晕,位于F島的核電站潜圃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舟茶。R本人自食惡果不足惜谭期,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吧凉。 院中可真熱鬧隧出,春花似錦、人聲如沸客燕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽也搓。三九已至赏廓,卻和暖如春涵紊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幔摸。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工摸柄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人既忆。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓驱负,卻偏偏與公主長得像,于是被迫代替她去往敵國和親患雇。 傳聞我的和親對象是個(gè)殘疾皇子跃脊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

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