2016-02-10 34 views
0

假設我在位置「/ usr/bin」中安裝了一個程序二進制「customcommand」。廚師可以安裝/部署新版本的方式有哪些?

現在,當應用程序團隊發佈了新的二進制文件,我想在的位置更新二進制「的/ usr/bin中」

如何實現廚師上面的場景?

+0

讓我們來提醒一下,SO不是一個論壇,其目的是解決特定的編程問題。請[參觀]並請閱讀[問]。如果你對廚師檢查http://discourse.chef.io有開放思想的問題,但不要忘記大多數人對他們的空閒時間有所幫助,所以請幫助我們清楚地瞭解你想要達到的目標。 – Tensibai

回答

1

除了通過構建適合您操作系統(apt,yum等)的軟件包的常用方式,最適合您的情況是恕我直言的remote_file資源。

一個例子是以下幾點:

remote_file "/usr/bin/example" do 
    source "https://example.com/current/example" 
    mode "0755" 
end 

如果您的服務器(後面example.com一)支持Last-ModifiedE-Tag頭,廚師只會相比,下載和替換二進制文件,如果它被改變什麼的就磁盤。

除此之外,還有更多複雜和安全的機制,包括使用基於attribute設置的版本相關URL或從神器商店(如Nexus或Artifactory)接收文件。建議的方法至少可以讓您快速入門。

1

您使用Chef自動執行您通常必須手動執行的操作,所以問題是,您通常如何管理該過程?應用程序團隊如何發佈新的二進制文件;是否將它檢入某個版本的新版本的版本庫中,他們只是將新版本放入共享目錄中,還是隻收到一封電子郵件? (理想情況下,他們把它放到某種軟件包倉庫中(ruby-gems,對於像RPM或deb這樣的Linux,對於像Maven或Ivy等Java相關的代碼,在不同的操作系統和語言中還有很多其他軟件) 。主廚package資源將支持它,或者可能有community cookbook。您可以使用這些來指定您需要哪個版本的二進制文件。

如果它只是一個共享位置的文件,那麼你可以使用廚師file資源來「同步」你的版本和正式版本,但要記住這是非常可怕的(沒有版本檢查,沒有安全衛士針對降級,只是「同步這兩個文件」)

如果是涉及到電子郵件或類似一個手動過程,需要先自動執行過程中,我會說:-)

1

不這樣做將最好的方法使用數據包提供包信息,環境文件和remote_file資源以執行實際部署。

舉個例子,假設你想要將「customcommand」版本2.32從nexus部署到開發環境。

步驟1:創建名爲數據包「dev的」,並與包信息中的項目:

"id": "deploy", 
    "package": [ 
    { 
     "name": "customcommand", 
     "version": "2.32", 
     "type": "bin" 
    } 
    ] 

步驟2:創建期間將使用的開發環境文件收斂例如:chef-client -E dev -r "recipe[name]"

第3步:創建一個廚師配方,使用data_bag_item(data bag,'data bag item')['package'].each do |item|從數據包中提取信息,並使用remote_file資源執行部署。

這樣,您可以通過更新數據包來部署不同版本的程序。

相關問題