我正在開發一項計算服務,需要自動部署我們的軟體(約 30 兆)。軟體是一個WCF服務,所以我被困在windows中。我不能使用 mono,因為我們使用了很多未在其中實現的類別。
我們可以透過預設啟用的 SSH 和 SFTP 輕鬆地在 Linux 上進行部署。 Windows 實例上需要手動啟動 telnet 服務。有沒有辦法利用 RDP 來實現這一點?
我可以建立啟用了 telnet 的 AMI。但是,這似乎有點矯枉過正。
人們如何在預設 Windows 執行個體上自動化部署?或者每個人都創建一個 AMI 並且已經安裝了他們的軟體嗎?
答案1
RDP 對 Windows 自動化來說不是一個好的選擇。
Windows 的 ssh 替代方案是 WinRM - Windows 遠端管理。 Powershell 內建了對 WinRM 的支援。如果您使用 EC2(未在問題中列出,但問題標記為 EC2),則在 Amazon 預設 Windows 映像上啟用 powershell。您只需在安全群組中開啟連接埠 5985 即可。
這裡有一些關於如何使用 powershell 連線的說明:https://stackoverflow.com/questions/10237083/how-to-programmatically-remotely-execute-a-program-in-ec2-windows-instance/13284313#13284313
Windows 下 SFTP 的替代方案是 CIFS(Windows 檔案共用),但它不是一個特別好的選擇 - 該協定未加密。您也可以使用 powershell 腳本傳輸檔案 - 請參閱此處的範例腳本:http://poshcode.org/2216
如果您可以建立自己的 AMI,請安裝 cygwin 及其 sshd 伺服器。這將為您提供透過 ssh 到 Windows 執行個體的檔案傳輸和遠端執行。
答案2
RDP 可能不是實現您所需的最佳方式。PowerShell 遠端處理這可能是為您提供與 Linux 部署「故事」類似的體驗的最佳方法。您可以在遠端電腦上獲得互動式 shell 會話或遠端執行腳本。
由於習慣了 Linux 作業系統中包含 SFTP 伺服器,因此在 Windows 世界中進行檔案傳輸會感覺有點麻煩。
您可以直接透過 Internet 執行 SMB 檔案共用協議,但這通常被認為有一定的安全風險。
RDP 協定具有內建的檔案傳輸功能,但以批次/非互動式方式使用 RDP 用戶端將是一種狡猾的駭客行為(更不用說 RDP 中的檔案傳輸機製本身有點像狡猾的駭客)。
Powershell本身可以從遠端伺服器下載文件以類似於 的方式wget
。我在工作中沒有對遠端 Windows 伺服器進行任何程式碼部署,但如果需要的話,我強烈考慮使用此方法將程式碼「拉」到遠端伺服器,因為它只使用內建功能。
答案3
目前尚不清楚您是否正在嘗試自動化基礎架構以及 WCF 服務部署。
程式碼部署
在 Windows 上有幾種方法,但恐怕沒有神奇的答案,架構與 Linux 沒有什麼不同。您使用的工具以及 Windows 上開箱即用的工具是差異所在。
1) 安裝 SSH、SFTP、Telenet 等之一,然後使用與現在在 Linux 上類似的方法以及批次或 powershell。正如 Evan Anderson 所說,由於 Linux 上提供的工具,您可能會覺得很奇怪。
如果您使用過 Java,那麼通用程序是相同的,即需要在部署之前建立程式碼,並且所有操作都可以使用批次腳本或 powershell 自動化。
2) 更具可擴展性的方法是使用自動化部署伺服器,例如 Octopus(作為安裝在部署目標上的代理)以及可選的建置伺服器,例如 Jenkins 或 Bamboo。除了駐留在程式碼儲存庫(例如 Git)中的程式碼之外,您還可以根據 git 儲存庫中的特定分支進行持續整合和部署或手動自動化。
同樣,通用過程與 Linux 上的 Java 或其他語言相同。