Image from https://miro.medium.com/max/1268/1*85otVgjdzFKPpKYXpK1JdA.png
อยากให้มีลุง Jenkins หลายคนช่วยกัน Build Pipeline ให้
ทำการติดตั้ง Jenkins ตามบทความนี้
ทั้ง 3 เครื่อง
เมื่อติดตั้งเสร็จทั้ง 3 เครื่องแล้ว (ลอง Zoom ดู)
ทำการติดตั้ง Java JRE 11 (OpenJDK JRE 11) ทั้ง 3 เครื่อง
$ apt-get install openjdk-11-jre -y
เนื่องจาก Jenkins ถูกเขียนขึ้นด้วยภาษา Java การ Remote จาก Master -> Slave จะทำผ่านภาษา Java และเนื่องจากเราทำการติดตั้ง Jenkins เป็นแบบ Docker จึงไม่ได้มีการติดตั้ง Java ไว้บนเครื่องตรง ๆ ตั้งแต่แรก เราเลยต้องติดตั้งเพิ่มเติมเอง (ไม่แน่ใจว่าสามารถใช้ Java ใน Container Jenkins เลยได้มั้ย)
ทำการสร้าง SSH Key ตามบทความนี้
Private Key ที่ได้ (jenkins-key
)
Public Key ที่ได้ (jenkins-key.pub
)
อย่าลืม Copy Public Key ไปไว้ที่ Slave Nodes ทั้ง 2 เครื่อง
Credentials นี้สร้างเป็นแบบ SSH Key (เราจะไม่ใช้แบบ Username/Password)
4.1 ไปที่เมนู Credentials > System
4.2 คลิกที่ Global credentials (unrestricted)
4.3 Add Credentials
4.4 ระบุข้อมูลต่าง ๆ ลงไป
jenkins-server
root
จากนั้นคลิก OK
ที่ Master Node
5.1 ไปที่เมนู Manage Jenkins > Manage Nodes and Clouds
5.2 New Node
5.3 ตั้งชื่อ Node
5.4 ระบุข้อมูลต่าง ๆ ของ Node
#
of executors : จำนวน Concurrent Build สูงสุดที่ Jenkins จะ Run บน Node นี้/var/jenkins_home
Launch agents via SSH
จากนั้นคลิก Save
5.5 Check Log (เลือกที่ Node slave-01
จากนั้นไปที่เมนู Log)
การเชื่อมต่อระหว่าง master
<-> slave-01
ทำงานได้ปกติ
5.6 เพิ่ม Node slave-02
ต่อ
5.7 ข้อมูลเหมือน Node slave-01
ทั้งหมด ยกเว้น IP Address
5.8 คลิก Relaunch agent เพื่อเชื่อมต่อ master
<-> slave-02
5.9 Check Log slave-02
การเชื่อมต่อระหว่าง master
<-> slave-02
ทำงานได้ปกติ
5.10 เพิ่ม Node เสร็จเรียบร้อย
6.1 ไปที่เมนู New Item
6.2 กำหนดชื่อ Job (item) โดยเลือกเป็นแบบ Pipeline
จากนั้นคลิก OK
6.3 ระบุข้อมูลต่าง ๆ ของ Pipeline ลงไป
เสร็จเรียบร้อย Pipeline ที่ 1
6.4 ลอง Clone เป็น Pipeline ที่ 2,3,4 ...9,10
Clone เสร็จเรียบร้อย 10 Pipeline
6.5 ลอง Build ทั้ง 10 Pipeline ด้วยการคลิกที่รูปนาฬิกาทางขวามือของแต่ละ Pipeline
จะเห็นว่ามีการกระจาย Load ไป Run Pipeline แต่ละ Node (แต่ละ Agent)
6.6 เข้าไป Check แต่ละ Node ในโฟลเดอร์ Workspace (/var/jenkins_home/workspace
) จะเห็นว่ามีการกระจาย Load ไปยังแต่ละ Node จริง ๆ
เพราะ Status ต่าง ๆ จะแสดงเฉพาะบน Master เท่านั้น