使用 Puppet 部署我們自己的軟體?

使用 Puppet 部署我們自己的軟體?

(提前為這個問題的愚蠢道歉。我通常是一名程式設計師,而不是系統管理員,但我自己承擔了一些事情的自動化,並清理了一些其他自動化的事情,但不是以最漂亮的方式: -)

我一直在研究各種用於自動化將軟體部署到一堆伺服器的工具,例如 cfengine、Puppet 和 Chef。到目前為止,Puppet 看起來最吸引人,但我當然還沒有做出任何承諾。

這些工具看起來都可以很好地保持大量伺服器的最新狀態預先包裝的軟體.

我不明白的是:如何使用工具(如 Puppet)來管理我們自己的內部軟體的部署?我想我很茫然,因為我已經看過一千個教學展示如何保留 Apache ensure => latest(其中很酷),但沒有什麼完全符合我今天的用例,這更像是:

  1. 當一個人按下按鈕時,
  2. 從版本控制儲存庫 B 中拉取分支 A
  3. 運行命令C來編譯它
  4. 將二進位檔案 D 複製到伺服器 E1 到 E10
  5. 在每台伺服器上執行命令F以使所有變更生效

Puppet 聽起來很棒,我完全看到了聲明式、冪等配置相對於某些shell 腳本的優勢,但我還沒有看到任何關於「您想要將shell 腳本更新為Puppet(或Chef、或cfengine)的教程,所以這就是您的內容應該要做」。有這樣的事嗎?對於其他人來說,如何獲取 Puppet 文件中提供的內容並複製我想要的行為是否顯而易見?我只是不明白嗎?

到目前為止,對我來說,人類(#1)會手動將軟體(#2和#3)打包到Puppet外部,手動更新Puppet配置,這將觸發Puppet更新伺服器。 (我在這裡有點困惑,我相信你能看出來。)

謝謝!

答案1

我們使用 puppet,但我們不將其用於應用程式部署。正如你所說,你可以將你的軟體打包成 debs 或 rpms,在任何地方配置你的私人儲存庫,並使用 puppet 來控製版本,但你仍然需要等待所有伺服器上接下來的 30 分鐘刷新。

我會做什麼(這與我們所做的很接近,但我們使用rails,所以沒有編譯步驟):

  • 使用 puppet 設定伺服器上除應用程式本身之外的所有內容。依賴關係、Web 伺服器、使用者、路徑等。
  • 讓您的自動建置伺服器(bamboo、hudson、cruise control 等)將編譯後的工件放入 Nexus 等儲存庫管理器中。
  • 使用 capistrano 將建置推送到您的伺服器。

Chef可能會有更多的即時推播能力;我對它不是很熟悉。

答案2

步驟 1 到 3 通常在建置過程中自動完成。通常,此過程的輸出將經過一個測試週期。我打包輸出,以便可以將其部署到整合測試環境。僅當整合測試通過時才應執行步驟 4 和 5。

您的第 5 步意味著部署中斷。對於像 apache 這樣的東西,這可以透過在日誌輪換期間關閉並重新啟動來處理。 crontab 腳本可以處理這個問題。如果您可以在一小時左右的時間內處理滾動更改,只需在部署步驟4 中包含重新啟動即可。 。

答案3

搜尋木偶食譜,您會發現大量可用於生產的腳本。是的,您必須手動打包軟體。然後編寫一個配方來告訴 puppet 安裝該軟體。該配方需要放置在主伺服器上,從那裡它將傳播到從屬伺服器。

相關內容