jenkins-docker
หลังจากที่แนะนำ Jenkins 2 ไปแล้วใน blog::สวัสดี Jenkins 2
ซึ่งมี feature ใหม่ที่น่าสนใจเช่น

  • Pipeline-as-code
  • ปรับปรุงเรื่อง User Interface
  • ปรับปรุงเรื่องความปลอดภัย
  • ปรับปรุงเรื่องของระบบ plugin
  • ปรับปรุง website หลักให้ดูดี และ มีข้อมูลต่าง ๆ ครบเครื่อง

ดังนั้นแทนที่จะติดตั้งแบบเดิม ๆ
เราลองทำการติดตั้งด้วย Docker กันดีกว่า
ซึ่งมันทำให้การติดตั้ง configuration และการ update ง่ายขึ้นมาก ๆ
แต่ก็ต้องแลกมาด้วยการเรียนรู้ ศึกษา และลงมือทำจริง ๆ
มาเริ่มกันเลย

ปล. ตอนนี้ Jenkins 2.5 แล้วนะ
ทีมพัฒนาทำการ update เป็นรายสัปดาห์กันเลย ขยันกันมาก ๆ

ขั้นตอนที่ 1 ใช้งาน Docker image ชื่อว่า jenkinsci/jenkins ใช้ tag latest

ดังนั้นทำการ pull หรือ download image ลงมาที่เครื่องของเราก่อน

$docker pull jenkinsci/jenkins:latest

ขั้นตอนที่ 2 ทำการสร้าง image และ container ที่ต้องการ

โดยต้องการให้มี 2 ตัวคือ

  • ตัวที่ 1 คือ Jenkins server หลัก หรือ Jenkins master
  • ตัวที่ 2 คือ เก็บข้อมูลต่าง ๆ ของ Jenkins เช่น job และ plugin เพื่อไม่ให้ไปผูกติดกับ Jenkins master เรียกว่า Jenkins Data

ดังนั้นเมื่อเราทำการลบ และ สร้าง container ของ Jenkins master ขึ้นมาใหม่
ก็ยังสามารถใช้งานค่า configuration จาก Jenkins data ได้
ถือว่าเป็นอีกหนึ่งแนวทางในการจัดการ

เริ่มด้วยการสร้าง image กันก่อน

docker build -t jenkins-data -f data/Dockerfile .
docker build -t jenkins2 -f master/Dockerfile .

โดยที่ Dockerfile ของ Jenkins master และ Jenkins data อยู่ที่ Github

จากนั้นทำการสร้าง container จาก image ที่สร้างไว้ก่อนหน้า
โดย Jenkins master จะต้องทำการกำหนด volume ไปยัง Jenkins data ด้วย

$docker run --name=jenkins-data jenkins-data
$docker run -p 8080:8080 -p 50000:50000 --name=jenkins-master --volumes-from=jenkins-data -d jenkins2

เมื่อสร้าง container เสร็จแล้ว ตรวจสอบด้วยคำสั่ง

$docker ps -a

แสดงผลการทำงานดังนี้

โดยสามารถตรวจสอบการทำงานผ่าน browser ด้วย URL = http://localhost:8080 (ผมใช้ Docker for Mac นะ)
จะแสดงดังรูป

jenkins2-01

ขั้นตอนที่ 3 ทำการ configuration ค่าต่าง ๆ ของ Jenkins 2

เริ่มการดึงค่าของ Administrator password ก่อนเลย
ด้วยคำสั่ง

$docker exec jenkins-master cat /var/jenkins_home/secrets/initialAdminPassword

ทำการติดตั้ง Plugin และ สร้าง Job ที่ต้องการกันได้เลย
ซึ่งผมเลือกการติดตั้ง plugin ตามที่ Jenkins 2 แนะนำเลย
จากนั้นให้สร้าง user สำหรับจัดการ Jenkins
จากนั้นก็มาเริ่มใช้งานกันเลย
แสดงดังรูป

jenkins2-03

จากนั้นสร้าง Item ซึ่งผมเลือกสร้าง Pipeline-as-code ขึ้นมา (เป็น plugin ใหม่ของ Jenkins 2)
ชื่อว่า My-pipeline
แสดงดังรูป

jenkins2-04

เมื่อสร้างเสร็จแล้วก็ทดสอบ run สิ รออะไร
แสดงดังรูป

jenkins2-05

เมื่อทุกอย่างเรียบร้อย ให้ลอง stop, ลบ และสร้าง container ของ Jenkins-master
จะพบว่าข้อมูลต่าง ๆ ทั้ง plugin และ job ยังคงอยู่
และสามารถใช้งานได้เหมือนเดิม ไม่ต้องมาสร้างใหม่
ซึ่งถ้าเข้ามาที่ Jenkins server จะต้องใส่ username และ password ด้วยนะ

แต่อย่าไปลบ container ชื่อว่า jenkins-data นะ !!

สุดท้ายแล้ว เราก็สามารถเริ่มสร้างระบบ Continuous Integration ด้วย Jenkins อย่างง่ายได้

ต่อไปจะอธิบายการสร้าง Pipeline-as-code เพื่อทำงานร่วมกับ Version Control เช่น git
รวมทั้งการสร้าง Jenkins slave และการจัดการผ่าน Docker compose
ยังไม่อะไรให้เราเรียนรู้อีกเยอะ !!

Reference Websites
https://dzone.com/articles/get-started-with-jenkins-20-with-docker
http://engineering.riotgames.com/news/putting-jenkins-docker-container
https://www.future-processing.pl/blog/building-and-deployment-multi-branch-web-application/
http://www.focusedsupport.com/blog/beyond-builds-combining-jenkins-and-docker-for-continuously-running-instances/
https://www.cloudbees.com/blog/get-ripped-jenkins-docker-industrial-strength-continuous-delivery
http://making.meetup.com/post/122890386432/steps-towards-automated-testing-with-docker-and