Image may be NSFW. Clik here to view.
Image may be NSFW. Clik here to view.
ตั้งแต่วันที่ 29 กันยายน ถึง 1 ตุลาคม มีโอกาศมาแบ่งปันที่เชียงใหม่
ในงาน
Give and Take :: Agile for Software Development
ซึ่งครั้งที่จัดที่
CAMT (College of Arts, Media and Technology )
โดยครั้งนี้ทำการติดตั้งและ configuration ระบบ Continuous Integration Server ด้วย Jenkins ไว้
เลยนำมาสรุปไว้นิดหน่อย
เริ่มจาก Infrastructure ที่ใช้คือ Digital Ocean
ซึ่งใช้เพียง 1 instance หรือ 1 droplet เท่านั้น
โดยสิ่งที่นำมาใช้เพิ่มเติมคือ Docker
สำหรับการสร้าง container ของส่วนต่าง ๆ ในระบบงาน
ประกอบไปด้วย
Container Jenkins Server
Container Nginx สำหรับ deploy ระบบ web application ที่พัฒนาด้วย React
Container NodeJS สำหรับ deploy ระบบ backend ที่พัฒนาด้วย NodeJS
Container MongoDB สำหรับ database ของระบบ
Container Google Chrome สำหรับการทดสอบ UI testing บน Google Chrome
มาดูการสร้าง Container Jenkins Server
จะใช้ image
Jenkins LTS
ทำการสร้างด้วยคำสั่ง
[code]
$docker container run -d -p 8080:8080 --name ci jenkins/jenkins:lts
จากนั้นทำการดึงค่า Admin Password มาใช้ในขั้นตอนติดตั้ง
$docker container exec -it ci cat /var/jenkins_home/secrets/initialAdminPassword
[/code]
เพียงเท่านี้ก็ได้ Jenkins Server มาใช้แบบง่าย ๆ แล้ว
ต่อจากนี้ยากหมดเลย !!
ทำการสร้าง Job หรือขั้นตอนการทำงานแบบอัตโนมัติง่าย ๆ ดังนี้
1. Frontend ที่พัฒนาด้วย
React
2. Backend ที่พัฒนาด้วย
NodeJS
3. ทำการสร้าง
MongoDB Database ขึ้นมาใหม่
4. ทำการทดสอบ UI Test ผ่าน Google Chrome ด้วย
Robotframework
ทั้ง 4 ข้อนี้จะทำตามลำดับดังนี้
1. ทำการสร้าง MongoDB container ขึ้นมา
โดยสร้างแบบน่าเกลียดสุด ๆ ดังนี้
[code]
$docker container run -d --name mongo mongo:3.5.13-jessie
[/code]
ปล. อย่าไปใช้บน production server นะ !!
2. ทำการสร้าง Backend container สำหรับ NodeJS
ในส่วนนี้เป็น RESTFul API พัฒนาด้วย NodeJS
ซึ่งในครั้งนี้ทีมเลือกใช้
expressjs library
มีข้อตกลงกันคือ ต้องทำการเขียนชุดการทดสอบด้วย
ดังนั้นจึงทำการสร้าง Docker Image ใหม่ขึ้นมา
เขียนใน Dockerfile ได้ดังนี้
[gist id="b1f9126d00619f7e0951e2234299788e" file="Dockerfile_backend"]
คำอธิบาย
ทำการ copy ไฟล์ package.json ซึ่งเป็นไฟล์ config สำหรับ project
ทำการ copy ไฟล์ต่าง ๆ จาก folder src
ทำการ install library ต่าง ๆ ด้วย npm install
ทำการทดสอบด้วย npm test
ทำการ start ระบบงานแบบง่าย ๆ ถ้างานจริงแนะนำให้ใช้ pm2 นะ
ทำการสร้าง image ใหม่ชื่อว่า backend และ สร้าง container ดังนี้
[code]
docker image build -t backend .
$docker container run -d --name backend --link mongo backend
[/code]
3. ทำการสร้าง Frontend container สำหรับ ReactJS
ในส่วนนี้ผมทำการแยกส่วนของการ compile และ build แยกออกมา
โดยในการสร้าง frontend container จะใช้
nginx
ซึ่งการ deploy นั้นทำง่าย ๆ คือ
ทำการ copy ไฟล์ทั้งหมดใน folder build ไปยัง folder /usr/share/nginx/html
เขียนใน Dockerfile ได้ดังนี้
[gist id="b1f9126d00619f7e0951e2234299788e" file="Dockerfile_frontend"]
ทำการสร้าง image ใหม่ชื่อว่า frontend และ สร้าง container ดังนี้
[code]
docker image build -t frontend .
$docker container run -d --name frontend -p 80:80 -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf --link backend frontend
[/code]
สิ่งที่เพิ่มเข้านิดหน่อยคือ
ทำการ config nginx ให้เป็น reverse proxy นิดหน่อย
สำหรับ REST API นั่นเอง ซึ่ง api จะขึ้นด้วย /api
ตัวอย่างการ config ง่าย ๆ เป็นดังนี้
[gist id="b1f9126d00619f7e0951e2234299788e" file="nginx.conf"]
เพียงเท่านี้เราก็ได้ระบบ Continuous Integration และ Deployment แบบง่าย ๆ แล้วนะครับ
แต่งานจริง ๆ ยังต้องปรับปรุงอีกเยอะเลย
ขอให้สนุกกับการ coding ครับ