Pattern หนึ่งในการทำ Puppet Deployment

ช่วงนี้มีโอกาสได้ลองเริ่มใช้ Puppet กับงานที่บริษัทแบบจริงๆ จังๆ แล้วก็กำลังคิดถึงวิธีที่จะเอาสคริป Puppet ของเราไปวางไว้ที่ตัว Master สเต็ปที่คิดว่าจะทำคือ

  1. เขียนโค้ด รันเทสบนเครื่องให้เสร็จ
  2. Push เข้า Github
  3. ให้ CI รันเทสให้อีกที
  4. เอาสคริปสำหรับการ Deploy เข้า Puppet Master ไปวางไว้ใน CI แล้วให้ CI เป็นคนรัน

ไม่ค่อยแน่ใจว่าชาวบ้านทำกันแบบนี้หรือเปล่า เลยลองกูเกิ้ลเรื่อยๆ อยู่หลายวันก็ไม่ค่อยเจอคนบอกรายละเอียดสักเท่าไหร่ ส่วนใหญ่จะเจอแต่คำว่า Deploy แต่ไม่ค่อยเจอว่าเค้าทำกันอย่างไร วันนี้ว่างจัดเลยนั่งเคลียร์อีเมลที่ดองไว้ แล้วก็เจอเมลของ Sysadmin Casts ข้างในเนื้อหามีหัวเรื่องว่า Git to Puppet Deployment workflow ลองเข้าไปดูแล้วก็มั่นใจว่าที่เราคิดไว้ก็ถือว่าเป็น Pattern หนึ่งเหมือนกัน 🙂 ลองดูรูปข้างล่างนี้

Episode #33 - Git to Puppet Deployment Workflow
Git to Puppet Deployment Workflow (Credit: https://sysadmincasts.com/)

Pattern ที่เค้าทำ (เจ้าตัวก็บอกว่าไม่รู้ผิดหรือเปล่าเหมือนกัน) ก็คล้ายๆ กับที่คิดไว้ แต่ของเค้าจะใช้ Hook แทนเป็นตัวคอยรันเทสแล้วก็เอาโค้ดเข้า Puppet Master

แก้ปัญหา git push แล้วต้องใส่ username/password ทุกครั้ง

เนื่องจากคนที่ใช้ GitHub น่าจะใช้ SSH key passphrase กันอยู่แล้ว เพื่อความปลอดภัยมากขึ้นอีกขั้นหนึ่ง และอีกอย่างคือเวลาที่เรา push เราจะได้ไม่ต้องใส่ username กับ password ทุกครั้ง เราใส่ passphrase แทน

มีบางครั้งที่เราเผลอ clone ผิด URL ดังรูปข้างล่าง (คลิกที่รูปเพื่อดูรูปใหญ่) ทำให้เราต้องใส่ username กับ password ทุกครั้งเวลาที่เราสั่ง git push ซึ่งจริงๆ แล้วเราควรจะใส่ passphrase แทนเพื่อความปลอดภัย (ปลอดภัยมากกว่าใส่ username กับ password เฉยๆ)

ตัว URL ที่ว่านี้คือ https://github.com/zkan/miscmarks.git (ตามรูปข้างบนนะครับ) ซึ่งเวลาเรา push ทำให้เราต้องใส่ username กับ password ทุกครั้ง วิธีแก้ง่ายมากแค่จากที่เราเลือก HTTP (ตามวงกลมสีแดงในรูปข้างบน) ให้เราเลือก SSH แทน (ตามวงกลมสีแดงในรูปข้างล่าง)

จะเห็นว่า URL เปลี่ยนไปแล้ว เราจะ clone ใหม่อีกก็ได้โดยใช้ URL นี้ หรือสั่งคำสั่งที่สะดวกกว่านั้น ซึ่งเป็นคำสั่งเปลี่ยน URL ที่เรา remote ไปใหม่ตามนี้

git remote set-url origin [email protected]:zkan/miscmarks.git

เสร็จแล้วลอง push ใหม่ดู คราวนี้จะให้เราใส่ passphrase อย่างที่ควรจะเป็นแล้ว