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

Thursday, February 19, 2015 12:43 PM 1 Comments , , , ,

ต่อจากบทความ วิธีการอัพโหลด 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 ครับ

1 comments:

วิธีการอัพโหลด PHP Package ขึ้น Packagist

Wednesday, February 18, 2015 12:15 AM 0 Comments , ,

วันนี้มีโอกาสอัพโหลด PHP Library ที่เขียนขึ้นมาใช้งานเองเข้า Packagist เนื่องจากต้องการโหลด Library ที่เขียนขึ้นผ่าน composer จึงมาเขียน Blog แบ่งปันประสบการณ์ครับ

Composer กับ Packagist คืออะไรผมจะไม่กล่าวถึงแล้วนะครับ

สิ่งที่จำเป็นสำหรับการอัพโหลด PHP Library เข้า Packagist ก็คือ

1. composer.json
2. Code ของเราต้องอยู่ในรูปแบบของ PSR-4
3. Github

ผมจะใช้โปรเจค https://github.com/kittinan/php-http เป็นตัวอย่างนะครับ ซึ่ง commit ก่อนที่เปลี่ยนรูปแบบให้เป็น PSR-4 นั้น จะอยู่ใน commit นี้ https://github.com/kittinan/php-http/tree/9a91de95c53538d081081c56ee4d77b6d9fa2171 ซึ่งจะสังเกตุเห็นว่ามีอยู่แค่ 2 ไฟล์เท่านั้นคือ

- http.php
- README.md


โดยผมจะจัดการไฟล์ใหม่ให้มันอยู่ในรูปแบบของ PSR-4 นะครับ โดยที่ผมจะจัดวางไฟล์ใหม่ดังนี้

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

ซึ่งเมื่อจัดแล้วจะอยู่ในรูปแบบ

\KS\HTTP\HTTP.php

เมื่อจัดการวางไฟล์และโฟล์เดอร์ให้อยู่ในรูปแบบ PSR-4 เรียบร้อยผมก็จัดการแก้ชื่อ class จากเดิมที่เป็น http  เป็น HTTP และใส่ namespace ที่ถูกต้องเข้าไปก็คือ namespace KS\HTTP; ดูได้จากไฟล์นี้นะครับ https://github.com/kittinan/php-http/blob/master/src/KS/HTTP/HTTP.php

เมื่อจัดการไฟล์และโฟล์เดอร์เรียบร้อยแล้ว ก็มาถึงคิวของ composer.json ซึ่งจะต้องสร้างไฟล์นี้ไว้ที่ root path ของ project นะครับ

สร้าง composer.json ที่ root path ของ project โดยใส่รายละเอียดตามไฟล์นี้ครับ https://github.com/kittinan/php-http/blob/master/composer.json

สิ่งสำคัญคือตรง autoload เราต้องกำหนดให้ถูกต้องครับ ซึ่งเราจะใช้ PSR-4  โดยที่ key ของ json ตรงนั้นจะเปน namespace ของเรา แล้ว  value ก็จะเป็น folder ครับซึ่งจะออกมาเป็นดังนี้

"KS\\HTTP\\": "src/KS/HTTP"
เมื่อสร้างไฟล์ composer.json เรียบร้อย ให้ commit และ push ขึ้น github ครับ หลังจากนั้นเราก็เข้าไปที่เวป https://packagist.org/ ให้ login  ด้วย user Github ให้เรียบร้อยก่อนนะครับ เสร็จแล้วกด submit package เราก็นำ url github project ของเรามาใส่ รอสักครู่มันก็จะไปดึงข้อมูลจาก github มาให้ กด submit เป็นเสร้จสิ้น

หากเราต้องการเวลาที่ push code ใหม่ๆเข้าไปยัง Github และไป update เจ้า Packagist  เราต้องสร้าง GitHub Service Hook ไปยัง  Packagist ครับ โดยกดเข้าไปที่ GitHub Service Hook ดังภาพ


เมื่อกดเข้าไปแล้วสิ่งที่เราต้องการคือ  Your API Token กดเพื่อแสดง token ครับดังภาพ




ให้เรานำ API token ไปใส่ที่ Github ครับ ซึ่งเข้าไปที่ Project ของเราแล้วกด Setting ดังภาพ



เมื่อกดเข้าไปที่ Setting  แล้วให้ไปที่ Webhooks & Services >  กด Add Services เลือก Pakagist ครับ

เสร็จแล้วใส่ username เราที่ใช้ใน Pakagist ถ้าในที่นี่ login Pakagist ด้วย Github
username ที่ใช้ก็จะเหมือน username ของ Github ครับ ในโปรเจคนี้คือ kittinan และใส่ token ที่เราได้จาก Pakagist ดังภาพ



กด Add Service เป็นอันเสร็จสิ้นครับ เมื่อเรา Push code ใหม่ๆเข้า Gihub เจ้า Gtihub ก็จะยิงไปบอก Pakagist ว่ามี code ใหม่ๆมาแล้วนะ เจ้า Pakgist ก็จะอัพเดทข้อมูลๆใหม่ครับ


เดี๋ยวบทความต่อไปจะมาเล่าถึงวิธีการเชื่อต่อกับ travis-ci เพื่อทำ Continuous Integration นะครับ

0 comments:

วิธีการติดตั้ง Nginx + HHVM บน Ubuntu 14.04

Saturday, February 7, 2015 3:34 PM 0 Comments , ,

1. ติดตั้ง Nginx

sudo apt-get install nginx


2. ติดตั้ง HHVM สำหรับ Linux distro อื่นๆ ดูได้ที่ https://github.com/facebook/hhvm/wiki/Prebuilt%20Packages%20for%20HHVM

ในบทความนี้ใช้ Ubuntu 14.04 ครับ

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
sudo add-apt-repository 'deb http://dl.hhvm.com/ubuntu trusty main'
sudo apt-get update
sudo apt-get install hhvm

3. เมื่อติดตั้งเสร็จเรียบร้อย HHVM จะขึ้นข้อความแนะนำวิธีการติดตั้ง fastcgi เพื่อให้ Apache  หรือ Nginx เรียกใช้งานได้ ดังภาพ



4. Config ให้ HHVM เปิดใช้งานผ่านช่องทาง fastcgi โดยรัน Shell Script

/usr/share/hhvm/install_fastcgi.sh



5. restart HHVM daemon

sudo /etc/init.d/hhvm restart

6. Config Nginx  ให้เรียกใช้งาน HHVM ผ่านทาง fastcgi
โดยเริ่มจากการสร้าง Virtual host ใน Nginx ให้ point ไปยัง path ที่ต้องการ โดยในตัวอย่างจะสร้าง Virtual host ที่ชื่อว่า hhvm.localdomain ให้ไปชี้ไปยัง /home/null/code/hhvm มาเริ่มกันเลย

6.1 โดยเริ่มจากการแก้ไข้ไฟล์ /etc/hosts ให้ domain hhvm.localdomain ชี้มาที่เครื่องเราเองดังภาพ

sudo nano /etc/hosts

เพิ่ม 127.0.0.1  hhvm.localdomain เข้าไป



6.2 สร้าง Config file virtual host ให้กับ Nginx โดย save file ไว้ที่ /etc/nginx/sites-available/hhvm.localdomain

config สำหรับ virutal host ตาม link นี้ครับ https://gist.github.com/kittinan/87f410004df45b6d0573

ตรง root path ก็แก้ให้ถูกต้องตามเครื่องใครเครื่องมันนะครับ

เสร็จแล้วสร้าง Sym link เพื่อเปิดการใช้งาน virtual host ที่ชื่อ hhvm.localdomain

sudo ln -s /etc/nginx/sites-available/hhvm.localdomain /etc/nginx/sites-enabled/hhvm.localdomain

7. Restart Nginx

sudo /etc/init.d/nginx restart

8. สร้างไฟล์ index.php ไว้ที่ root path ในที่นี่จะสร้างไฟล์ไว้ที่ /home/null/code/hhvm/index.php เพื่อทดสอบการ config ว่าใช้งานได้


<?php
echo "Hello HHVM";
echo "<br />";
phpinfo();

เมื่อเสร็จแล้วลองเรียกผ่าน http://hhvm.localdomain/ ก็จะได้ output ดังภาพ




หากต้องการ phpinfo() แบบละเอียด hhvm มันไม่ได้จัดมาไว้ให้ครับต้องใช้ script ตัวนี้
https://gist.github.com/ck-on/67ca91f0310a695ceb65 เมื่อนำมารันก็จะได้ดังภาพ






0 comments: