2010-04-09 16 views
17

我沒有找到在每次提交後使用來自SVN的FTP將Php部署到遠程服務器的解決方案。 我怎樣才能通過FTP上傳到服務器的唯一添加或編輯的文件,並從SVN中刪除刪除的文件 我想寫後編劇腳本...每次提交後使用FTP從SVN進行FTP部署到遠程服務器

+2

提交後腳本掛鉤正確,但不應使用FTP,而應使用rsync將其轉移到新主機。 FTP無法確定編輯內容和不是什麼內容。結賬Phing,像Pekka建議和本博客文章:http://blog.fedecarg.com/2008/07/21/filesynctask-using-phing-to-synchronize-files-and-directories/ – Gordon 2010-04-09 11:53:42

+1

如果可以,請考慮使用SVN也在您的遠程服務器上。爲其提供只讀限制訪問權限,並在存儲庫上安裝通知遠程服務器首先恢復並更新其工作副本的後提交掛鉤。在這種情況下,您可能還想拒絕對任何'.svn'文件夾的Web訪問。此外,請考慮使用分支來確保服務器不檢出每個從中繼提交的提交。 – Archimedix 2011-01-18 13:41:43

+0

我不相信解決方案需要基於PHP,只是爲了傳輸一個PHP網站。 – 2012-04-19 10:17:31

回答

13

好問題!

我不確定只用PHP方法來同步文件的方式存在。

我通常會使用第三方的FTP同步工具,如rsyncScriptFTP(商業)來做同步部分。

看看phing,有很多FTP擴展(稱爲「任務」)。雖然我沒有真實世界的經驗。

本博客文章提供了一些思路和方法:Using phing to sync files with shared hosting

+0

我沒有使用Phing,但Ant,結果是我只能將SVN中的所有新源複製到遠程服務器。不只是同步新提交中的文件。遠程服務器可以是Windows操作系統,所以我不能使用rsync。 我只是想模擬Springloops.com的部署過程 他們只是完美的做到這一點。 – user312729 2010-04-10 03:37:10

6

你可以使用svn2web每COMMITED文件上載通過FTP服務器。 Svn2web是一個可以用作svn鉤子的php腳本的集合。您可以將ftp-server的地址,用戶名和密碼設置爲目錄上的svn屬性。很棒!

+0

感謝您的回答。但提交可以刪除svn上的一些文件。我需要將svn與部署服務器同步。 – user312729 2010-04-10 03:21:33

+0

如果您刪除存儲庫中的文件,svn2web也會刪除ftp上的文件。這不是一件好事嗎? – murze 2010-04-12 10:18:51

0

最好的辦法是(如果你的服務器是基於Linux的)將SVN導出到一個新的目錄,然後移動新的目錄來替換舊的目錄(最好的方法是用符號鏈接到不同版本的網站)。這樣,該網站將不可用一兩秒鐘,而如果你rsync並有一個大的網站,如果你大幅改變單個文件,該網站將被打破,直到所有文件同步。

至於發射這個程序,最好的方法是使用svn鉤子。另外考慮在發佈之前做一些自動化測試(對於基本功能),因爲你可能會在一段時間內壞掉你的後備箱,並且站點肯定會下降:)

我們目前正在將上述方法合併到生產中環境和設置如下:

  • 一個提交雲在樹幹
    • 之前,它實際上是COMMITED,測試運行的代碼,看看是否一切正常
  • 經過多次犯了部署來(通常是開發商的監督)
      如果他們成功
    • 測試被再次運行
    • - 一切ok
    • 如果他們失敗了,舊的出口返回,該網站是完全可操作一次再次

這都是用PHP編寫的,使用非標準控制檯命令。

+0

我不想將svn上新版本的所有文件導出到遠程部署文件夾。 我只想通過上傳新文件進行同步,覆蓋編輯文件並根據提交刪除文件。請給我看一個例子 – user312729 2010-04-10 03:25:20

+3

那麼,爲什麼不讓你的製作網站成爲svn checkout,只是在你提交時更新它?此外,你應該禁止訪問.svn文件夾,它會按照你想要的方式工作。如果SVN倉庫與網站位於同一臺服務器上,則很簡單,就像make/path/to_svn/repos/someproject/hooks/post-commit一樣:#!/ bin/bash svn update/path/to /網站並使其可執行。 – bisko 2010-04-10 06:35:51

3

我使用的是http://svn2ftp.com這是一個SVN主機,允許在每次提交時遠程部署到S/FTP!

3

如果您不想自己管理腳本,但只想使用某些功能,則可以嘗試使用託管服務。我使用Deploy,它完美適用於你描述的場景。如果你只有一個項目要部署,它甚至是免費的。

1

你看過Beanstalk嗎?它使您可以通過一次單擊將Subversion和Git項目部署到FTP服務器。它不是免費的。另一個免費的替代方案是設置一個連續集成服務器,它將運行rake腳本來完成您的部署。

2

對於我們的php項目,我們使用Jenkins一個持續集成工具。我們的存儲庫服務器是顛覆。無論我們何時執行代碼更改,我們都會使用jenkins作業來與Beta環境中的現場環境合併,然後部署該應用程序。

你可以找到關於如何使用PHP詹金斯應用程序部署在http://www.michaelpeacock.co.uk/blog/entry/jenkins-ci-an-introduction-for-php-developers

+1

我喜歡你的回答,因此你有我的賞金。 – 2012-04-26 14:18:49

+0

謝謝馬克.... :) – 2012-04-26 14:37:13

1

你說什麼,你從svn checkout來找你的服務器,(創建一個從SVN工作拷貝到生產服務器)的詳細信息,並當你想要部署一個新版本時,只需通過SSH連接到服務器並鍵入svn update,然後去那裏,只有最近編輯過的文件將被部署,並且在不到一秒的時間內生產中更新的最新版本。