Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

บันทึกการติดตั้ง Continuous Integration Server ด้วย Jenkins ใน Give&Take ที่เชียงใหม่

$
0
0

ตั้งแต่วันที่ 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 ครับ

Viewing all articles
Browse latest Browse all 1997

Trending Articles