一千萬個為什麽

搜索

自動創建新VM並將代碼推送到服務器



自動創建新VM並將代碼推送到服務器

大家好,

我正在為客戶端 - 服務器應用程序編寫集成測試。模擬 生產服務器設置,並更新代碼,我在我的設置VM 電腦。該應用程序在Windows服務器上運行,因此我必須使用系統 與Windows兼容。

第1步:正確設置VM:

  1. Download the OVA file from MS
  2. create a new VM from the OVA file
  3. reset the mac id
  4. set a static dns ip address and a VM ip address
  5. open up the port 22
  6. install bitvise ssh server
  7. transfer public keys to the VM
  8. install python 3.5.2
  9. update pip
  10. install virtualenv systemwide

第2步:將代碼部署到VM:

  1. create a requirements file using pip using: pip freeze -r requirements
  2. zip the entire repo using powershell using: powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('atu.zip', 'atu'); }"
  3. using pscp I transfer the files to the VM using: pscp ./atu.zip [email protected]:/C:/Users/ipython_user/Desktop
  4. unzip the files again using powershell using: powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('atu.zip', 'atu'); }"
  5. delete the virtualenv folder called env in the folder using plink
  6. create a fresh env folder using using virtualenv: virtualenv env
  7. using the requirements.txt document, I install the requirements again by direcatly using the pip installed in the virtualenv above using: /path/to/env/Scripts/pip.exe install -r /path/to/requirements.txt
  8. run the file with the python distribution installed in the virtualenv using: /path/to/python file_name.py

因為我試圖執行相對復雜的命令,而後者又執行了 多個引號(雙和單),空格等,我不得不花費不少 時間只是重新討論如何通過網絡運行這些命令。我有 使用組合自動化大部分部署部分( STEP 2subprocess.callplinkpscp 。但是,我還沒有自動化 設置VM( STEP 1 )。

我猜,上面的一系列動作不僅僅是我正在做的事情,而且 也許其他人也這樣做了。

目前,我正在使用低級工具來實現這一目標。雖然這適用於 設置Windows VM,它可能不適用於基於Linux的VM或我改變 python版本使用不同的語言等。

I have also searched a bit and came across this book: https://www.safaribooksonline.com/library/view/test-driven-development-with/9781449365141/ch09.html

作者將如何部署到Linux服務器。然而,似乎 通過直接運行命令,他基本上正在做我正在做的事情 linux服務器,只需通過 fabric 包裝器。因為 ssh 不起作用 在Windows上,我猜,我將不得不回到本機上 部署 fabric

題:

  1. 是否有更好的方法來設置VM,並將代碼部署到VM 抽象出不同操作系統之間的區別,python 版本,工具等?

  2. 我也聽說過基於 git 的工作流程。這比直接將代碼推送到服務器更好嗎?為什麽會這樣?

轉載註明原文: 自動創建新VM並將代碼推送到服務器

一共有 2 個回答:

為此,我使用 The Foreman 。它利用 fog vsphere 模塊與您的vSphere服務器進行交互,並與Google,Microsoft,以及亞馬遜的雲和其他管理程序系統,如果需要,或者您需要在將來的某個時刻進行遷移。

此軟件堆棧由Red Hat支持,並重新命名為 Red Hat Satellite 6 如果您希望使用其許可和支持的版本,並且專門用於管理機器的生命周期(物理和虛擬),它還可以管理Docker容器。

部署VM後,您可以使用以下選項配置新部署的VM:

  • Kickstart腳本
  • 木偶
  • Ansible
  • 廚師
  • SaltStack

作為一個python商店,您很可能會對SaltStack或Ansible感到滿意,並希望確保安裝The Foreman並支持您選擇的配置管理軟件。

該軟件附帶 REST API ,可用於從構建管道自動觸發vm部署(例如,Jenkins,Bamboo,TravisCI,CircleCI等)或者您可以在配置完成後(或兩者)進行VM觸發測試。

我不會使用你正在使用的自定義腳本,而是考慮使用開源工具,類似於Tensibai在他的評論中所建議的。

我會進一步區分你的兩個任務,這樣第1步就是“設置虛擬機”,第2步將是“使用所需程序配置虛擬機”和配置“。

我的2美分將是使用 PackerAnsible

您可以使用(例如) VirtualBox Packer構建器,站起你的VM,它將處理你的步驟1的1-4點,然後使用 Ansible-local 配置文件,或類似的東西,運行 playbook ,它將處理步驟1的其余部分,以及步驟2的所有步驟。


上面的建議會讓你的生活變得更輕松,並且能夠抽象出不同的操作系統以及你只需編寫一個不同的Packer模板和Ansible任務。通過安裝不同的Python版本/工具,您只需要更新Ansible角色/使用特定工具具有多個不同的角色。

當然還有其他工具,如 VagrantPuppet廚師,可以處理您想要實現的目標,因此您可以找到自己喜歡的工具。


您可以使用的Ansible模塊的小型細分:

等等。可以在這裏找到Ansible Windows模塊的完整列表。