Jenkins可以採用分散式架構,也就是包含Master與Slave的Jenkins,如下圖。在部屬的時候可以選擇Build在Slave Server上,這些Slave Jenkins我們稱作為Jenkins Agent。Master透過TCP/IP與Slave交流:
本文部分參考自使用 Docker 安裝 Jenkins Agent
如果有照這個系列讀下來的話,在Day 18中我們有講到建立Jenkins,開啟了8080 port與50000 port。其中的5000 port就是默認連接的agent port。
首先,先回到你的Master Jenkins > 管理Jenkins(Manage Jenkins) > 設定全域安全(Configuew Global Security) 確保Master的Agent不是停用狀態(固定、隨機都可):
接著進入 > 管理Jenkins(Manage Jenkins) > 管理節點(Manage Node),你應該可以看到目前只有Master而已。點擊新增節點(New Node) > 取一個節點名稱 > 點擊Permanent Agent。 我們這裡先稱作jenkins_agent1
吧,按下OK。
Number of Executors選擇1,遠端檔案系統根目錄輸入/home/jenkins/agent
,啟動模式選擇Lauch agent by connecting to the controller
,按下save。
打開剛剛建立的節點(node),他會echo一串secret,如下圖。比如說,我的是836cc18a87cd6182f4a859c4f86f7fc4ba5fe9083facc4fa5f4f910ae96c153c,把密碼記起來。
接著你需要準備另一台伺服器當作Slave Server。我們在Slave Server上執行以下指令,建立一個Jenkins Agent:
sudo chmod 777 /var/run/docker.sock
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker --name jenkins_agent --init jenkins/inbound-agent -url http://<Master_jenkins_IP>:<Master_jenkins_Port> -workDir=/home/jenkins/agent <secret> <agent name>
如上,把Master Jenkins、secret、agent name這些相關資訊填上去。輸入docker logs jenkins_agent
,如果有出現Info:Connected
代表成功綁定。重新整理Master Jenkins的時候會發現多了一個jenkins_agent1。
未來如果要交由jenkins_agent1來build,我們只需要將jenkins file內的agent改成{label "jenkins_agent1"}
。如下,參考自Day 20
pipeline{
agent {
label "jenkins_agent1"
}
stages{
stage("Delete Old Container"){
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
echo "Delete the container"
sh "docker rm -f run_mynode run_myweb"
}
}
}
stage("Building") {
steps {
echo "Building App"
sh "cd ./app && docker build -t mynode:latest ."
sh "docker run -d -p 3000:3000 --name run_mynode --link my_postgres:my_postgres mynode:latest"
echo "Building FrontEnd"
sh "cd ./html && docker build -t myweb:latest ."
sh "docker run -d -p 8085:80 --name run_myweb --link run_mynode:run_mynode myweb:latest"
}
}
stage("Test"){
steps{
echo "Testing begin testing2"
sh "pwd"
}
}
stage("Deploy"){
steps{
echo "deploy begin"
}
}
}
post {
failure {
echo "No!! it fail"
}
success {
echo "Yes!! it work"
}
}
}
成功部屬上Slave Server。