發佈系統 javascript
因爲網站的結構是基於lnmp的,因此咱們主要的代碼都是php代碼,以前在大網站的時候,通常會有比較嚴格的流程和比較嚴格的打包發佈機制,好比Yahoo的 yinst package, 可是對於初創團隊來講有些重了,這裏咱們直接使用svn進行代碼的管理和發佈。 php
雖然系統環境不復雜,可是咱們仍是分爲開發環境,測試環境(beta),和生產環境(線上),開發環境咱們在本身的機器上搭建,個人是 Ubuntu的系統,everfly是MacOS的系統,測試環境在和svn服務同一臺服務器上,咱們使用svnseve的post-commit 功能實現了一旦咱們提交了代碼,服務器會自動將代碼部署到beta環境的web服務器上, 在生產環境則是直接使用svn export進行部署,整個流程仍是很是簡單的。 html
注意,有的時候咱們在生產環境和開發環境的時候須要執行不一樣的邏輯,好比針對html內部引用的javascript代碼,爲了節省流量(固然 還有一個緣由是代碼寫的太醜了,不想讓你們看到笑話),在生產環境上,咱們使用了jsmin進行壓縮,可是在本機進行開發的時候,爲了調試前端代碼方便, 不能對javascript代碼進行壓縮,因此咱們經過設置環境變量,而後在代碼中檢測環境變量的方式解決了這個問題,因爲環境變量是設置在web server或者php-fpm的配置中的,因此線上和開發環境能夠保持同一份代碼,在代碼中判斷當前的系統執行不一樣的邏輯便可。 前端
SVN自動發佈系統實現 java
實現過程,是使用了svn的一個hook的功能,調用了 post-commit 來作一些當提交完成後的操做。
一、在版本庫的hooks目錄下面,有一些基於事件觸發的執行腳本,好比post-commit, 去掉後綴.tmpl
二、編輯svn代碼庫服務器上文件: svn/test/hooks/post-commit web
#!/bin/sh REPOS="$1" REV="$2" export PATH="/usr/local/svn/bin:$PATH" #因爲代碼是apache的進程用戶www運行,因此須要設置環境變量 export LC_CTYPE=en_US.UTF-8 #防止提交的文件名存在非字母字符。 if (svnlook log -r $REV /home/http/repository/svn/test | grep "auto_deploy" ) #當用戶提交時註釋中寫上"auto_deploy"的時候,就自動部署到apache目錄,不然不部署。 then echo "`date` 'auto depoly command received" >> /tmp/test_svnautocommit.txt #這一行僅做調試使用 svn export "http://192.168.16.48/repo/svn/test/trunk/test_website" /home/http/html/test_website --force fi
三、 在客戶端測試,而且要在comment中加入 auto_deploy,不然不會觸發自動部署的操做。 shell
參考文章 apache