2017-07-27 75 views
0

我有一個構建服務器,在每次提交給定的劇本存儲庫後,都會運行合理的劇本。主機數據來自動態庫存。我現在遇到的問題是,當我推送多個提交時,構建服務器會爲相同的主機運行ansible-playbook,並在主機服務器上創建爭用條件。我如何才能讓正在運行的劇本完成,然後在主機上運行劇本時啓動或完全不運行? (我只需要在主機上運行一個實例)製作劇本只爲給定主機運行劇本

+0

你如何觸發構建服務器來運行可靠的劇本? – kfreezy

+0

@kfreezy我使用[Phabricator](https://secure.phabricator.com/book/phabricator/article/harbormaster/#triggering-builds),你可以在提交時觸發構建。問題是當你同時推送多個提交時。有沒有辦法確保只有一個實例正在運行? – Pouyan

+0

你可以爲ansible-playbook編寫包裝shell腳本,或者修改ansible-playbook python文件來檢查其他進程,但這看起來像是一個糟糕的解決方案。你最好在你的CD服務器上設置一些構建隊列。 –

回答

1

在啓動劇本運行之前,您可以檢查遠程服務器的安全pid。你使用的是什麼操作系統/發行版? 嗯..取決於你測試的是什麼,你可以啓動一個容器(docker或lxd)來測試每個提交的環境。考慮到如果您創建/修改網絡接口或創建設備文件,它不會滿足您的需求。 我使用這種方法來測試我的劇本角色只有一個服務器有幾個單元測試每個角色參數。

+0

我們正在運行SuSE。使用容器不是我們系統的選擇。有另一種方法可以找出遠程主機上正在運行的安全嗎? 我發現[this](https://stackoverflow.com/questions/35176944/),但似乎沒有一個答案是有用的。 – Pouyan

+0

如果容器不是您想要的,您可以隨時創建一個掛載名稱空間和pivot_root到該名稱空間。容器的想法只是分隔命名空間。您仍然可以使用名稱空間(7)來實現相同的功能。不過你的內核需要大於等於3.11。 反正,ps awfx | grep ansible,或者檢查pid文件? – clvx