มาเล่น Gogs กัน

เมื่อปีที่แล้วมี developer ท่านนึงคนชวนเล่น Gogs จำไม่ได้ว่าคุยเรื่องอะไรกัน แต่ก็น่าสนใจดี Gogs เป็น self-hosted Git Services เขียนด้วยภาษา Go ซึ่งเจ้าตัวนี้หน้าตาและฟังก์ชั่นหลายอย่างคล้ายกับ Github (เวอร์ชั่นเก่า) ใครเคยใช้ Github คงจะคุ้นเคย

สำหรับท่านที่อยากลอง Gogs สามารถติดตั้งได้หลายวิธีทั้งผ่าน binary, source และ package.io ครั้งนี้มาลองติดตั้งจาก package.io กันดูบ้าง เริ่มจากติดตั้ง repository กันก่อน และติดตั้ง Gogs อ้อ ผมใช้ Ubuntu 14.04 Server 64bits
Continue reading

Fork และ Pull Request ใน GitHub

เนื่องจากมีคนถามเรื่อง Pull Request ใน GitHub มาก็เลยมาเขียนอธิบายกันสักหน่อย การทำงานบน GitHub ก็จะคล้ายๆ กับ version control system ตัวอื่นๆ แต่ใน GitHub จะเพิ่มความสามารถในการขอ merge code จากผู้ใช้อื่นที่ต้องการ contribute feature ใหม่หรือ patch ให้ได้ เรียกว่า Pull Request หากต้องการ Pull Request ตัว contributor จะต้อง Fork โครงการออกมาจากต้นน้ำ (Upstream Project) ก่อน หากแก้ไข bug หรือเพิ่ม feature ใหม่แล้วต้องการ contribute กลับไปยังต้นน้ำ ค่อยขอ Pull Request ผมจะยกตัวอย่างโครงการ Arduino Quadruped Robot โดยผมเป็นเจ้าของโครงการ (Project Owner) และคุณ Andrew เป็น Contributor

เริ่มจากคุณ Andrew สั่ง Fork โครงการ Arduino Quadruped Robot จาก Upstream Project ก่อน กดปุ่ม Fork

Continue reading

มาเล่น GitLab CI กัน

ครั้งที่แล้วนำเสนอเรื่อง GitLab ไปมีพาดพิงเรื่อง CI (Continuous Integration) ไปนิดหน่อย ซึ่ง GitLab เองก็มีโครงการ GitLab CI เช่นกัน พูดถึง CI หลายท่านที่ใช้เครื่องมือแบบนี้อยู่แล้วก็คงต้องบอกว่า Jenkins เจ๋งสุด! แหมใช้ GitLab แล้วจะไปทำ CI ใน Jenkins ก็จะดูแปลกๆ มาใช้ GitLab CI กันดีกว่า :) GitLab CI แบ่งโครงการออกเป็น 2 ส่วน คือ

  • GitLab CI หน้าเว็บหลักของ GitLab CI
  • GitLab CI Runner เป็นส่วน Builder สามารถแยกหรืออยู่ร่วมกับ GitLab CI ได้

ครั้งนี้เราจะมาติดตั้ง GitLab + GitLab CI กัน โดยใช้วิธีที่ง่ายมากมากมาก โดยใช้ตัวติดตั้งของ Bitnami สำหรับวิธีปกติดูได้ที่เว็บโครงการ GitLab CI ครับ

ขั้นแรกดาวน์โหลด GitLab มาก่อน

wget http://downloads.bitnami.com/files/stacks/gitlab/6.9.2-1/bitnami-gitlab-6.9.2-1-linux-x64-installer.run

จากนั้น chmod ให้ execute ได้

chmod +x bitnami-gitlab-6.9.2-1-linux-x64-installer.run

ติดตั้งด้วยคำสั่ง

./bitnami-gitlab-6.9.2-1-linux-x64-installer.run

ตอบคำถามไปเรื่อยๆ คุณก็จะได้ GitLab และ GitLab CI มาใช้งานกันแล้ว วิธีการใช้งานก็เข้าไปที่ URL ของเว็บเราครับ ตัวอย่างเช่น

  • GitLab – http://redgitlabci.cloudapp.net
  • GitLab CI – http://redgitlabci.cloudapp.net/gitlabci

ตัวอย่างเป็น โครงการ OpenStack Cheat Sheet เขียนเป็นไฟล์ Markdown แล้วใช้ GitLab CI Build ออกมาเป็นไฟล์ EPUB ประมาณนี้

สร้าง Project ใน GitLab ขึ้นมาก่อนครับ

จากนั้นเข้าไปที่ GitLab CI สั่ง Sync Project เข้ามาและ Add เข้า Build

เข้าไปที่ Project > Settings เขียน Build Script เพิ่มลงไป เพราะเราจะใช้ make ช่วยในการ build ครับ

จากนั้น Commit ไฟล์เข้าไปที่ Git Repository

เข้าไปที่หน้าโครงการใน GitLab คุณจะพบ Badge แสดงสถานะ Build อยู่ตรงมุมขวา พอเรา Commit ไฟล์ CI ก็จะเริ่มทำงานตาม Build Script ที่เราเขียนเพิ่มลงไป

ดูสถานะและรายละเอียดการ Build เพิ่มได้ใน GitLab CI

GitLab CI จะ Build ให้เราทุกครั้งที่เรา Commit File เข้าไปที่ Repository คุณสามารถตั้งค่าการ Build เพิ่มเติมได้ในหน้า CI Settings ครับ

 

แนะนำแหล่งเรียน Git

มีคำถามกลับมาเกี่ยวกับ Git อีกเรื่องคือจะหาเรียน Git ได้ที่ไหน จะทำงานกับ Git ได้ยังไง ทำงานแบบ Collaboration ได้อย่างไร ใช้ Workflow แบบไหนดี หากคุณมีคำถามเหล่านี้ แนะนำให้ไปเรียนเลยครับ น่าเสียดายที่หลายสถาบันการศึกษาไม่ได้สอน Git แต่ใช่ว่าจะไม่มีแหล่งเรียน Git นะครับ แหล่งเรียน Git ที่ผมแนะนำมีดังนี้

ได้แหล่งเรียนเยอะเลย อย่ารอช้าลองเข้าไปศึกษาดูนะครับ

 

แนะนำ Git GUI

แนะนำ GitLab ไปเมื่อครั้งที่แล้ว ก็มีคำถามกลับมาเกี่ยวกับ Git หลายคำถามเลย ก็เลยขอทะยอยตอบผ่าน Blog ละกันครับ เรื่องแรกที่มักจะถามเข้ามากันบ่อยมากคือ ใช้ Git Command ไม่คล่อง มีโปรแกรมคลิ๊กง่ายๆ มั๊ย เอ่อ… ปกติผมก็ใช้ Git Command นะครับ ไม่เคยใช้ GUI สักที ในเว็บ Git SCM ในหน้าดาวน์โหลดแนะนำ Git GUI อยู่หลายตัว ลองเข้าเลือกดูได้ครับ สำหรับผมแนะนำ 2 ตัวนี้ครับ

  • GitHub GUI มีเวอร์ชั่นบน Windows, Mac
  • SourceTree มีเวอร์ชั่นบน Windows, Mac เช่นกัน

เครื่องมือ 2 ตัวนี้ฟรีครับ ยกเว้น SourceTree จะมีให้ลงทะเบียนนิดหน่อย แต่ไม่ยุ่งยาก ข้อดีของการใช้ GUI คงเป็นในเรื่องของการจัดการไฟล์ การ merge ไฟล์ และดู branch ครับ ถ้าชอบใช้ GUI ก็ลองติดตั้งใช้กันดูได้ :)

GitHub

SourceTree

มาเล่น GitLab กัน

ผมมักโดนถามคำถามเกี่ยวกับเครื่องมือที่ผมใช้งานอยู่บ่อยครั้ง ผมมักก็ตอบว่า Git, GitHub และตามด้วยประโยคที่ว่า “Private Project ต้องเสียเงิน ถ้าเป็น OpenSource Project ใช้ฟรี” ก็เลยมีหลายท่านถามว่า ​”เอาแบบ Private Project ไม่ต้องเสียเงินได้ไหม” งั้นแนะนำให้ใช้ GitLab เลยครับ เจ้า GitLab เหมาะสำหรับคนที่ใช้ GitHub มาก เพราะการใช้งานบนเว็บเหมือนกัน ไม่นับบน command line นะครับ :P นอกจากจะติดตั้งในหน่วยงานได้แล้วยังสามารถสร้าง Private Project ได้แบบไม่ต้องเสียเงินด้วย ตอบโจทย์เลยใช่มั๊ยครับ GitLab มีด้วยกัน 2 รุ่น คือ

  • GitLab Comminuty
  • GitLab Enterprise

ดูความแตกต่างของแต่ละรุ่นได้ที่หน้าเว็บ GitLab กันได้ นอกจากนี้ยังมี Jitlab CI ด้วย ซึ่งเราสามารถผูก GitLab กับ GitLab CI ได้ด้วย เอาไว้วันหลังจากมาเล่าให้ฟังว่าเล่นยังไง สำหรับวิธีการติดตั้ง GitLab นั้นมีหลายวิธี แต่ผมขอเลือกวิธีง่ายระดับมาก โดยใช้ GitLab Omnibus (มีวิธีแบบง่ายมากๆ อยู่ขอไม่กล่าวถึงละกันนะครับ) ลองมาติดตั้ง GitLab Community เล่นกันครับ

เริ่มจากดาวน์โหลด GitLab Omnibus กันก่อน

wget https://downloads-packages.s3.amazonaws.com/ubuntu-12.04/gitlab_6.9.2-omnibus.1-1_amd64.deb

ติดตั้ง package ที่ต้องใช้งาน

sudo apt-get install openssh-server postfix

ติดตั้ง gitlab

sudo dpkg -i gitlab_6.9.2-omnibus.1-1_amd64.deb

สร้าง file config

sudo mkdir -p /etc/gitlab

sudo touch /etc/gitlab/gitlab.rb

sudo chmod 600 /etc/gitlab/gitlab.rb

แก้ไข /etc/gitlab/gitlab.rb เพิ่มส่วน external_url ระบุ url ของ server เราครับ

external_url "http://redgitlab.cloudapp.net"

สั่ง reconfig ตั้งค่า gitlab ตาม config ใหม่

sudo gitlab-ctl reconfigure

ดูการตั้งค่าเพิ่มเติมได้ที่หน้า configuration เปิดเบราเซอร์ไปที่ gitlab server ของคุณตัวอย่าง http://redgitlab.cloudapp.net ล็อกอินด้วย root รหัสผ่าน 5iveL!fe

หน้าล็อกอิน

หน้า Dashboard

ลองสร้าง project ตัว gitlab สร้าง git repository ให้เราเรียบร้อยพร้อม commit code

ลอง clone gitlab-omnibus มาจาก gitlab repo จากนั้น push ไปที่ gitlab server ของเรา

ข้อมูลครบถ้วน

แสดงผล markdown ได้สวยงาม

รายการ commit

Network Branch ของ Project

สถิติการ commit, add, delete ของ project มีข้อมูลรายบุคคลด้วย