![jenkins-docker]()
![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 ลงมาที่เครื่องของเราก่อน
[code]
$docker pull jenkinsci/jenkins:latest
[/code]
ขั้นตอนที่ 2 ทำการสร้าง image และ container ที่ต้องการ
โดยต้องการให้มี 2 ตัวคือ
- ตัวที่ 1 คือ Jenkins server หลัก หรือ Jenkins master
- ตัวที่ 2 คือ เก็บข้อมูลต่าง ๆ ของ Jenkins เช่น job และ plugin เพื่อไม่ให้ไปผูกติดกับ Jenkins master เรียกว่า Jenkins Data
ดังนั้นเมื่อเราทำการลบ และ สร้าง container ของ Jenkins master ขึ้นมาใหม่
ก็ยังสามารถใช้งานค่า configuration จาก Jenkins data ได้
ถือว่าเป็นอีกหนึ่งแนวทางในการจัดการ
เริ่มด้วยการสร้าง image กันก่อน
[code]
docker build -t jenkins-data -f data/Dockerfile .
docker build -t jenkins2 -f master/Dockerfile .
[/code]
โดยที่ Dockerfile ของ Jenkins master และ Jenkins data อยู่ที่
Github
จากนั้นทำการสร้าง container จาก image ที่สร้างไว้ก่อนหน้า
โดย Jenkins master จะต้องทำการกำหนด volume ไปยัง Jenkins data ด้วย
[code]
$docker run --name=jenkins-data jenkins-data
$docker run -p 8080:8080 -p 50000:50000 --name=jenkins-master --volumes-from=jenkins-data -d jenkins2
[/code]
เมื่อสร้าง container เสร็จแล้ว ตรวจสอบด้วยคำสั่ง
[code]
$docker ps -a
[/code]
แสดงผลการทำงานดังนี้
[gist id="220bdc6ca4a1c8262a7f01179cf48bf6" file="list-container.txt"]
โดยสามารถตรวจสอบการทำงานผ่าน browser ด้วย URL =
http://localhost:8080 (ผมใช้ Docker for Mac นะ)
จะแสดงดังรูป
ขั้นตอนที่ 3 ทำการ configuration ค่าต่าง ๆ ของ Jenkins 2
เริ่มการดึงค่าของ Administrator password ก่อนเลย
ด้วยคำสั่ง
[code]
$docker exec jenkins-master cat /var/jenkins_home/secrets/initialAdminPassword
[/code]
ทำการติดตั้ง Plugin และ สร้าง Job ที่ต้องการกันได้เลย
ซึ่งผมเลือกการติดตั้ง plugin ตามที่ Jenkins 2 แนะนำเลย
จากนั้นให้สร้าง user สำหรับจัดการ Jenkins
จากนั้นก็มาเริ่มใช้งานกันเลย
แสดงดังรูป
จากนั้นสร้าง Item ซึ่งผมเลือกสร้าง Pipeline-as-code ขึ้นมา (เป็น plugin ใหม่ของ Jenkins 2)
ชื่อว่า My-pipeline
แสดงดังรูป
เมื่อสร้างเสร็จแล้วก็ทดสอบ 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