Rancher Compose เป็น Orchestration Tool คล้ายกับ Docker Compose แต่การทำงานจะเป็นการเชื่อมต่อกับ Racher ไม่ได้เชื่อมต่อกับ Swarm ดังนั้นการใช้งาน Rancher Compose จะต้องใช้คู่กับ Rancher ด้วย Rancher Compose จะใช้ไฟล์ config อยู่ 2 ไฟล์คือ docker-compose.yml สำหรับกำหนด stack ที่ต้องการ deploy และ rancher-compose.yml สำหรับกำหนดค่า Load Balance หรือการ Scale หากใช้ไฟล์ docker-compose.yml อย่างเดียว Rancher จะไปสร้าง config rancher-compose ให้ พร้อมกำหนดจำนวน Scale เท่ากับ 1 ไว้ ดังนั้นในแต่ละ Service สามารถสั่ง Scale ได้โดยอัตโนมัติ

ตัวอย่าง Jenkins CI จะเห็นภาพมากที่สุด เพราะโครงสร้างของ Jenkins ออกแบบมาให้ Scale ในส่วน Jenkins Slave ได้เรื่อยๆ ดังนั้นหากมีการเพิ่ม Host ของ Jenkins Slave เมื่อ Container เริ่มทำงานจะต้อง Link กลับมาที่ Jinkins Master เพื่อ config slave เพิ่ม เราจะใช้ image ชื่อ ibuildthecloud/jenkins-swarm และ ibuildthecloud/jenkins-swarm-slave กัน Rancher Compose สามารถใช้งานได้บน UI, API และ CLI ครั้งนี้มาลองใช้ CLI กันบ้าง ให้ดาวน์โหลด Rancher Compose CLI มาจากหน้า Stack และติดตั้งให้เรียบร้อย

Continue reading

ในการทำงานร่วมกันนั้นมีโค้ดที่ทำจากหลายๆ คนสร้างขึ้นมาและนำมารวมกัน แต่ปัญหามักจะเกิดขึ้นคือ

  • รวมโค้ดเข้าด้วยกันได้ยากและใช้เวลานานขึ้นเมื่อทิ้งไว้โค้ดที่เราทำไว้นาน
  • ทำให้การทำงานของซอฟต์แวร์ผิดเพี้ยนไปหรือที่เรียกว่า “บั๊ก” อันเนื่องมาจากการรวมโค้ด
  • เมื่อเกิดบั๊กทำให้สูญเสียเวลาในการแก้ไขและ debug นาน
  • สูญเสียเวลาทั้งที่ควรเอาไปพัฒนาฟีเจอร์ของซอฟต์แวร์

เมื่อมีปัญหาเช่นนั้นจึงเกิดแนวคิดที่เรียกว่า “Continuous Integration” ขึ้นมาโดย

  • รวมโค้ดเข้าด้วยกันบ่อยๆ ยิ่งบ่อยเท่าไหร่ยิ่งดี (ทุก commit ของโค้ดที่เราสร้าง)
  • มีชุดทดสอบเพื่อสามารถทดสอบย้อนหลังได้รวดเร็ว เพื่อตรวจหาปัญหาอันเนื่องมาจากการรวมโค้ดเข้าได้กัน
  • โดยแนวคิดนี้เราสามารถนำไปใช้งานได้ง่ายๆ โดยผู้พัฒนา check-in โค้ดมาทำการทดสอบอย่างต่อเนื่อง บ่อยๆ ทุกคน และดูว่ามีปัญหามั้ยอย่างไรไงล่ะ

แต่ปัญหาที่ตามมาคือเมื่อทีม และโค้ดของเราใหญ่ขึ้นการจะมาทำแบบนั้นคงเป็นไปได้ลำบาก คำถามคือมีเครื่องมืออะไรที่มาช่วยเราได้บ้างหรือไม่? คำตอบคือ “นำเครื่องมือมาใช้งานซะสิ” ซึ่งเราจะนำเครื่องมือที่มีชื่อว่า “Jenkins” มาติดตั้งและใช้งานกัน


Continue reading

บทความที่แล้วเราได้รู้จักและติดตั้ง Jenkinsกันไปแล้ว ส่วนบทความนี้ผมขอพูดถึงการเชื่อมจาก My repository มายัง Jenkins ก็แล้วกัน โดยมา repository ที่ว่ามันจาก 3 ที่คือ

  • Local repository
  • Gitlab repository
  • Github repository

ทั้งหมดนี้ใช้ Source Code Management (SCM) ตัวเดียวคือ git เมื่อ Jenkins จะ code ทำการ build ตาม job ที่เขียนไว้ใน Jenkins คุณยังสามารถสั่งให้มันอะไรได้ต่อได้อีกมากมาย ยกตัวอย่างเช่น ต้องการ push ใช้ git server แล้วให้ Jenkins ทำการสั่ง test ( เช่น mvn test ) ทุกๆ ครั้งของการ push หรืออาจจะมองไปไกลกว่านั้นคือ เมื่อ test pass แล้ว ให้ทำการไป deploy ลงบน UAT ได้เลยเป็นต้น


Continue reading

ถ้าคุณเป็นแฟนพันธ์แท้หรือติดตาม thaiopensource.org อยู่เป็นประจำ ก็จะเห็นบทความหนึ่งได้พูดถึงเรื่องของ Gitlab CI ไปแล้ว แต่สำหรับคนที่เริ่มนำ Agile เข้ามาอยู่ในชีวิต และอยากที่จะมี build tools เจ๋งๆ และมี plugin ให้เลือกเล่นได้เยอะๆ ก็ต้อง Jenkins เลยซึ่งก็เป็นอีกทางเลือกหนึ่งที่ได้รับความนิยมมากๆ เช่นกัน

Jenkins ก็คือ open source continuous integration tools เขียนโดย java และยัง support พวก source code management อย่าง git subversion cvs อีกด้วย ซึ่งถ้าพูดไปแล้วก็เป็น tools ที่สะดวกเอามากๆ เมื่อคุณ push code ผ่านทาง git (ถ้าคุณทำให้ git hook ไปยัง Jenkins server) ตัว Jenkins ก็จะทำการ build ให้คุณด้วยอัตโนมัติตามที่คุณเขียน job เอาไว้ใน Jenkins

เรามาเริ่มติดตั้ง Jenkins กันเลยดีกว่า ในที่ผมจะทำการติดตั้งมันลงบน CentOS 6.5

เริ่มจากติดตั้ง Java 6 กันก่อน เนื่องจาก Jenkins นั้นถูกเขียนโดย java

# yum install java

หรือจะ

# yum install java-1.6.0-openjdk


Continue reading