我可以使用如下語法啟動 Jenkins 代理:
java -jar agent.jar -jnlpUrl http://hostname:8080/jenkins/computer/<agent_name>/slave-agent.jnlp -secret 12345 -workDir "/jenkins"
這是啟動“永久代理”的模式——當我有想要用作代理的特定機器時。它依賴于我事先知道每個代理是什么,但是當我事先不知道哪些機器可用時,我可以使用一種模式嗎?
我無法在多個主機上運行上面的腳本:Jenkins 要求每個代理的名稱都是唯一的。您不能有兩個具有相同名稱的代理,即使我使用主機名作為代理名稱,我也需要在嘗試啟動代理之前提前定義它。
這是我的情況:
我想重用公司網路上的一些機器作為低規格的“云”。我希望他們能夠從共享檔案夾運行腳本,該檔案夾只是將它們添加到 Jenkins 系統中。不知道哪些機器會提前可用,也不想為每臺機器寫新的配置。而且我想讓它由擁有機器的人決定機器是否是 Jenkins 的一部分,這意味著我不能使用 SSH 風格的啟動。
我看到詹金斯有“云”的選項,但這些似乎都比我需要的復雜得多。我不想使用任何特定的云基礎設施。我不想給 Jenkins master 任何特殊的云憑證。
有沒有辦法配置一個非常簡單的代理“云”,這樣我就可以在每臺機器上運行一個腳本,然后將它添加到 Jenkins 中?
我知道有各種云基礎設施的插件,但它們似乎都依賴于特定的云基礎設施提供商(例如亞馬遜、DigitalOcean)。我不想談這個——這是一件更隨意的事情!
那么有沒有辦法做到這一點?它是 Jenkins 中的一個省力、最少配置、超通用的云,我可以在任意機器集合上運行啟動腳本并讓它們正常作業?
uj5u.com熱心網友回復:
使用 Jenkins Swarm 插件有一個非常好的選項可以解決您的問題:
Swarm 插件使節點能夠加入附近的 Jenkins 控制器,從而形成一個臨時集群。此插件通過啟動和拆除新代理來更輕松地擴展 Jenkins 集群,使團隊成員能夠為構建場貢獻計算資源或附加 Jenkins 控制器無法啟動連接的代理。
該插件由兩部分組成:
- 一個獨立的客戶端,可以加入現有的 Jenkins 控制器。
- 需要安裝在 Jenkins 控制器上以接受 Swarm 客戶端的插件。
這實際上不是云解決方案(盡管可以與云代理一起使用),而是使用反向方法的選項 - 這意味著您不從 Jenkins 控制器連接到從屬,代理將自己連接到控制器。
每個連接代理根據執行時使用的配置引數(標簽、環境變數等)在控制器中創建一個唯一節點,從而形成連接到控制器并可用于構建的代理群。
激活 swarm 只需要在要連接的代理上運行一個小型 java 應用程式,用戶可以隨時終止該應用程式 - 導致代理從 Jenkins 控制器中洗掉自身并退出 swarm。
此外,還有許多配置選項可以配置代理在連接到控制器時將使用的不同節點配置。
這應該可以滿足您的大部分重新裝備,您可以創建一個簡單的共享腳本來運行 swarm 客戶端,然后從想要加入 Swarm 的任何計算機(linux、windows、mac、任何 VM)上運行它,而您只需要安裝了 Java。
我們在類似的情況下成功地使用了這個插件,在這種情況下,我們希望根據一些監控事件在需要時添加額外的節點,并且插件的靈活性允許我們以許多有用的方式使用 Swarm 選項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516122.html
標籤:詹金斯
