一. 通信協議
為了master和agent能夠正常通信,連接的建立必須是雙向的。
- SSH: master通過標准的SSH協議連接slave。
- Java Web Start: Java 應用在agent 主機上啟動,Master和agent通過TCP建立連接。 這種方法往往是在agnet在防火牆內部,master不能發起連接的情況下使用。
- Windows service: 這種方法是注冊 agnet在遠端主機上作為一個服務。該方法設置比較繁瑣,且需要圖形接口的支持。
二. 設置 agent
關聯slaves到master的不同方式:
- 靜態和動態對比:靜態添加slave比較簡單。但缺點就是假如需要更多或者更少的slave nodes的話,我們還需要手工修改。一個最好的方式就是動態的添加。
- 指定和通用目的:就是對某個agent去做某些特定的功能或者一個agent可以構建所有的任務。
三. 常 用的四種配置方法
- Permanent agents
- Permanent Docker agents
- Jenkins Swarm agents
- Dynamically provisioned Docker agents
1. permanent agents
依次點擊【Manage Jenkins】--【Manage Nodes】—【New Node】,如下圖
持久agent的缺點就是需要針對不同項目類型維護多個slave 類型。解決方案如下圖所示:
2. Permanent Docker agents
這個解決方案的理想方法是永久的添加常規目的的slaves. 每個slave都有相同的配置。
這種方法就是在構建時在管道中指定需要的docker image.
pipeline {
agent {
docker {
image 'openjdk:8-jdk-alpine'
}
}
...
}
解決方案如下圖所示:
3. Jenkins Swarm agents
以上的添加在往往需要擴容大量的salve 主機時比較麻煩。Jenkins swarm允許去動態的添加slave(不需要在jenkins master中配置它們)
(1)在Jenkins中安裝【Self-Organizing Swarm Plug-in Modules】插件
。
(2)運行Jenkins Swarm slave應用在要扮演Jenkins slave的所有主機上。 使用swarm-client.jar應用。下載地址:https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin.
$ java -jar swarm-client.jar -master <jenkins_master_url> -username <jenkins_master_user> -password <jenkins_master_password> -name jenkins-swarm-slave-1
(3)在成功運行命令后,應該出現如下圖所示:
4. 通過Docker agent動態的提供。
其它的辦法就是在每次構建開始時,jenkins去動態的創建一個新的agent.根據構建工作的數量動態的調整slave的數量。
配置步驟: