Showing posts with label continuous integration. Show all posts

ทำ Continuous Integration ด้วย Gitlab

หลังจาก Blog ที่แล้วได้เล่าถึง วิธีการติดตั้ง Gitlab ไปแบบคร่าวๆ คราวนี้เราจะใช้เจ้า Gitlab ทำ Continuous Integration กันดู โดยในที่นี้จะใช้โปรเจคนี้เป็นตัวอย่างในการทำ (https://github.com/kittinan/thailandpost-track) ซึ่งเราจะทำกับภาษา PHP นั้นเอง

สมมุติว่าเจ้าโปรเจค https://github.com/kittinan/thailandpost-track อยู่บน Gitlab ของเราเรียบร้อยแล้วนะครับ



สิ่งที่เราต้องทำอันดับแรกก็คือ เราต้องติดตั้งเจ้า Gitlab Runner (https://gitlab.com/gitlab-org/gitlab-ci-multi-runner) ซึ่งเจ้าตัวนี้มีหน้าที่ทำการ Build และรันทดสอบ  Code ของเราตามที่เราต้องการ

ติดตั้ง Gitlab Runner


มาติดตั้งเจ้า  Gitlab Runner กันเลย
https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md

วิธีการติดตั้งก็ง่ายๆเหมือนติดตั้งเจ้า Gitlab นั้นแหละ

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash

sudo apt-get install gitlab-ci-multi-runner

เปิดการใช้งาน Continuous Integration


เราจะต้องทำการเปิดการใช้งาน Continuous Integration ในแต่ละโปรเจคก่อน โดยให้เราไปที่ Gitlab Dashboard > Continuous Integration ดังภาพ



คลิก Add Project to CI



ให้เราเข้าไปที่เมนู Runner



เมื่อเข้ามาในหน้า Runner แล้ว เจ้า  Gitlab ก็จะมีให้เลือกว่าเราจะใช้ Sepecific runners หรือ Shared runners

Sepecific runners - private server ของเราเอง
Shared runners - server ฟรีของ gitlab

ให้กลับไปที่ Server ที่เราเพิ่งลง Gitlab Runner ไว้ รันคำสั่ง

sudo gitlab-ci-multi-runner register

ให้เรานำ url ที่อยู่ในหน้าเวปมาใส่ ในที่นี้ก็คือ http://gitlab.kittinan.domain/ci
หลังจากใส่  url แล้วก็ใส่ token ต่อ หลังจากนั้นจะมีให้ใส่ Description กับ tag จะใส่ไม่ใส่ก็แล้วแต่
แล้ว Gitlab Runner จะถามว่าจะใช้ executor ตัวไหน ซึ่ง Gitlab Runner ก็สามารถใช้ได้หลายอย่างเช่น docker, docker-ssh, ssh, shell, parallels ในที่นี้ใช้ shell ดังภาพ



เมื่อเรา Refresh หน้าเวป Runner ก็จะมี Runner ที่ Activate แล้วขึ้นมา



เตรียม Server ให้พร้อมรัน Test (PHP)


ทำการติดตั้ง Package ต่างๆที่จะใช้ในการรัน Test ซึ่งในที่นี้เราจะทำการติดตั้ง Package PHP ต่างๆที่จำเป็นต้องใช้สำหรับโปรเจคนี้

sudo apt-get install php5-cli php5-curl

ติดตั้ง composer

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/bin/composer

เสร็จสิ้นการเตรียม environment สำหรับการรัน Test โปรเจคนี้

สร้างไฟล์ .gitlab-ci.yml


เราต้องทำการสร้างไฟล์ .gitlab-ci.yml ขึ้นมาใน Root Path โปรเจคของเรา ซึ่งไฟล์นี้จะทำหน้าที่ประมวลผลตามที่เราต้องการ เช่น ก่อนที่เราจะ Test เราต้องการให้ composer โหลด  library ต่างๆก่อน


สำหรับคำสั่งในไฟล์ .gitlab-ci.yml

before_script คือ ก่อนจะเริ่มทำงานตาม job ต่างๆ ให้ทำอะไรก่อนบ้าง ในที่นี้สั่งให้ composer โหลด library ต่างๆ
 
job1: <--- ชื่องาน ในที่นี้คือ job1 เราจะตั้งเป็นอะไรก็ได้เช่น TestModel
    script:
        - vendor/bin/phpunit tests/    <-- สั่งให้รัน test ใน directory tests

สามารถดูคำสั่งที่ใช้ใน .gitlab-ci.yml เพิ่มเติม ได้ที่ http://doc.gitlab.com/ci/yaml/README.html

เมื่อเพิ่มไฟล์ .gitlab-ci.yml ให้ทำการ commit และ push

ดูผลลัพท์ใน Gitlab


หลังจากที่เราได้ push code เข้า Gitlab เรียบร้อย เจ้า  Gitlab ก็จะไปบอก Gitlab Runner ให้ทำการทดสอบ Code ของเราตาม คำสั่งที่เราได้สั่งไว้ในไฟล์ .gitlab-ci.yml

เข้าหน้าเวป Gitlab ของเรา ดูที่  commit ก็จะเห็นสถานะของการรัน Test ดังภาพ


ภาพขณะตัว Runner กำลังรัน composer เพื่อโหลด library ต่างๆ


ภาพเมื่อรัน Test เสร็จแล้ว


พอเรากลับมาดูที่หน้า  Commit ก็จะเป็นว่า Run Test  ผ่านเรียบร้อย Success เขียวๆ ดังภาพ



เป็นอันเสร็จสิ้นการทำ Continuous Integration ด้วย Gitlab  (PHP) แบบคร่าวๆแล้วครับ


REF:
https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md
https://about.gitlab.com/gitlab-ci/
http://doc.gitlab.com/ci/yaml/README.html


วิธีการเชื่อมต่อ Github กับ Travis-CI

ต่อจากบทความ วิธีการอัพโหลด PHP Package ขึ้น Packagist บทความนี้ก็จะมาเล่าประสบการณ์ในการเชื่อมต่อ Github  กับ Travis-CI นะครับ โดยในบทความนี้จะไม่พูดถึง การเขียน Test PHP  ด้วย phpunit และ Continuous Integration คืออะไรแล้วนะครับ

มาเริ่มกันเลยครับ

1. Sign in Travis-CI ด้วย Username Github ที่ https://travis-ci.org/


2. เจ้า  Travis-CI ก็จะขอ Permission ต่างๆนาๆกับ  Github เราก็กด Authorize application  ไป


3. เมื่อ Login Travis-CI ด้วย Github User เรียบร้อยแล้ว ก็จะเข้าสู่หน้าตาที่ List Project ต่างๆของเราดังภาพ


4. กด ON ที่โปรเจคที่เราต้องการ ในที่นี่คือ kittinan/php-http ครับ

5. สร้าง Service Travis-CI ใน Github ของเราเพื่อที่เวลา Push Code เข้า Github แล้ว  Travis-CI จะได้ทำการ Build และ Test โดยวิธีการสร้าง Service  ทำดังนี้

  5.1 ไปที่ Travis-CI https://travis-ci.org/profile/info เพื่อนำ token ไปใส่ยัง Github Project ของเรา
  5.2 กลับมาที่ Github Project ของเรา ไปที่ Setting > Webhooks & Services > Add Services เลือก  Travis CI ใส่ Username และ token ที่ได้จากข้อ 5.1 เสร็จแล้วกด Add Service

6. สร้างไฟล์ .travis.yml ที่  Root Project ของเรา โดยสามารถดูรายละเอียดต่างๆได้ที่ Document ของ Travis-CI ได้ที่นี่ครับ http://docs.travis-ci.com/user/languages/php/

  6.1 Config file .travis.yml ที่ผมใช้ก็ตามลิ้งนี้เลยครับ https://gist.github.com/kittinan/30aca75a7c12776b11b2

language: php <-- เลือกภาษาที่จะใช้
php: <-- ให้ทดสอบ PHP Version อะไรบ้าง
- 5.5
- 5.4
- 5.3
- hhvm before_script: <-- ก่อนจะรัน script ทดสอบให้ทำอะไรบ้างในที่นี่คือไป Download composer มาและสั่งให้ install dependency ที่เราใช้งานครับ
- wget http://getcomposer.org/composer.phar
- php composer.phar install --dev --no-interaction script: <-- จะให้ Travis-CI รันอะไรบ้าง ในที่นี่คือรัน Test ที่อยู่ใน Folder /tests ครับ และยังสร้าง code coverrage ด้วยครับ
- phpunit ./tests
- mkdir -p build/logs
- phpunit --coverage-clover build/logs/clover.xml ./tests

7. เมื่อ Config .travis.yml เรียบร้อยก็ทำการ commit และ push ขึ้นไปยัง Github ครับ เจ้า Github ก็จะไปบอก Travis-CI ว่ามี code ใหม่ๆมาแล้วนะ Travis-CI ก็จะ Build & Test ตาม Config ที่เราสั่งครับ 

8. เข้าไปที่เวป travis-ci แล้วดู Project ที่เราเพิ่ง Push Code เข้าไปใหม่ มันจะแสดงสถานะการ Build & Test ให้เราดูดังภาพ


9. รอสักครู่จนมัน Test เสร็จหมด เย้ๆ เขียวหมดเลย



10. หากต้องการ badge เท่ๆมาติดที่หน้า README.md ให้กดตรง build passing ครับแล้วเลือก เป็น Markdown นำมาแปะที่หน้า README.md ได้เลยครับ ดังภาพ




เสร็จสิ้นการเชื่อมต่อ Github กับ Travis-CI แล้วครับ เดี๋ยวบทความต่อไปจะมาเล่าถึงวิธีการเชื่อมต่อ Github กับ scrutinizer-ci ซึ่งผมเอาไว้สร้าง badge code coverage และ code quality ครับ