[Gitlab] — Gitlab->CI->SSH->Server

RootFy22
2 min readApr 12, 2019

วันนี้ผมมานำเสนอวิธีการใช้งาน Gitlab-CI เพื่อส่ง source code ที่ได้ push เข้า repo ใน Gitlab ไป deploy ลงบนโฮสติ้ง (Web server) ผ่านทาง SSH โดยใช้ Gitlab-Runner ซึ่งเหมาะสำหรับคนที่มี Gitlab แล้วต้องการส่งโค้ดที่เขียนขึ้น Gitlab พร้อมกับ นำโค้ดไปบน server อัตโนมัติ โดยในตัวอย่างที่ผมทดสอบผมใช้ Shared runners ครับ

Continuous-Deployment Automation

ใน Gitlab มีเครื่องมือที่ชื่อว่า Gitlab CI / CD ไว้สำหรับส่งโค้ดที่เข้ามาเก็บใน Gitlab สามารถส่งต่อไปยังเครื่อง server ที่ไหนก็ได้ที่ได้ทำการปรับแต่งค่าความปลอดภัยนะครับ ตามภาพแสดงด้านบน อย่างแรกที่ต้องทำคือเปิดการใช้ CI/CD ซึ่งจะมี 2 วิธีคือ 1. Shared runners เป็นบริการฟรีของ Gitlab ใช้ได้ 2000 CI นาที/เดือน
2. Specific runners เป็นเครื่องมือที่นำมาติดตั้งบนเครื่องอื่นใดๆก็ได้ทำหน้าที่ CI/CD แทน เพื่อเชื่อมต่อกับบริการ Gitlab แทนแบบที่ (1) เหมาะสำหรับการพัฒนาที่มีการใช้งานเกิน 2000 นาที/เดือน
สามารถหาข้อมูลเพิ่มเติมได้จาก https://docs.gitlab.com/ee/ci/runners/

จากนั้นตั้งค่าข้อมูลที่ใช้ SSH ในการโอนไฟล์ไปยัง server หลังจากเอาโค้ดขึ้น Gitlab แล้วตามรูปด้านล่างนี้

เพื่อให้ข้อมูลเหล่านี้ปลอดภัยการเชื่อมต่อกับ server ผ่าน ssh ปลอดภัย ในตัวอย่างผมจึงตั้งค่าตัวแปล (Variables) 3 ค่า คือ
- HOSTNAME ชื่อเครื่องหรือไอพี เครื่องที่จะเอาไฟล์ไปรัน
- USERNAME ชื่อผู้ใช้
- PASSWORD รหัสผ่าน

จากนั้นผมสร้างไฟล์ .gitlab-ci.yml เก็บไว้ในที่เดียวกับโค้ด เพื่อเป็นการบอกว่าเมื่อ push โค้ดขึ้น gilab ไปแล้วจะให้รัน gitlab ci/cd ทันที โดยตัวอย่างผมสร้างไฟล์ดังนี้

ในตัวอย่างไฟล์นี้จะมี
before_script: คือคำสั่งที่ใช้สำหรับติดตั้ง sshpass เป็นเครื่องมือสำหรับส่งรหัสผ่านเมื่อใช้คำสั่ง ssh ซึ่งจะถูกรันก่อนที่จะรันคำสั่งใดๆในไฟล์นี้

- export SSHPASS=$PASSWORD     
- sshpass -e scp -o stricthostkeychecking=no -r www/ $USERNAME@$HOSTNAME:/home/$USERNAME/docker

คำสั่งที่ใช้ รหัสผ่าน SSHPASS ทำการอัพโหลดไฟล์ โดยไม่ต้องใส่รหัสผ่านอีก เมื่อเชื่อมผ่าน SSH แล้วทำการ upload file จาก โฟลเดอร์ www ไปใส่ไว้ใน โฟลเดอร์ docker บน HOSTNAME ที่ระบุผ่าน ผู้ใช้ USERNAME

หลังจากนั้นผมสามารถดูผลการรันหลังจาก push โค้ด ถ้าสำเร็จก็จะขึ้นดังภาพด้านล่างนี้

เป็นอย่างไรบ้างครับ หวังว่าคงเป็นประโยชน์ไม่มากก็น้อยนะครับ แล้วพบกันใหม่นะครับ
สุขสันต์วันสงกรานต์นะครับ
HAPPY CODING!!!!

--

--