php持續集成
A. 如何配置一個 Docker 化持續集成的 php 開發環境
首先,我們得知道什麼才是好的開發環境, 對於我而言,一個好的開發環境需要具備以下幾個特點:
可隨意使用。我必須可以隨意刪除和創建新的環境。
快速啟動。我想要用它工作時候,它立馬就能賣此仔用。
易於更新。在我們行業中,事物發展變化非常快,必須能讓我很容易將我的開發環境更新到新的軟體版本。
而Docker都支持以上這些特點,甚至更多。你幾乎可以即時銷毀和重建容器,而更新環境只需要重建你當前使用的鏡像即可。
什麼是PHP開發環境
目前Web應用錯綜復雜,PHP開發環境需要很多的東西扒殲,為了保證環境的簡單性,需要做各種各樣的限制。
我們這次使用Nginx、PHP5-FPM、Mysql來運行Synmfony項目。由於在容器中運行命令行會更復雜,所以這方面的內容我會放到下一篇博客中再說。
Pet 與 Cattle
另一個我們要討論的重點是:我們要把開發環境部署在多容器還是單容器中。 兩種方式各有優點:
單容器易於分發、維護。因為它們是獨立的,所有的東西都運行在中汪同一個容器中,這點就像是一個虛擬機。但這也意味著,當你要升級其中的某樣東西(比如PHP新版本)的時候, 需要重新構建整個容器。
多容器可以在添加組件時提供更好的模塊化。因為每個容器包含了堆棧的一部分:Web、PHP、MySQL等,這樣可以單獨擴展每個服務或者添加服務,並且不需要重建所有的東西。
因為我比較懶,加上我需要在我的筆記本上放點別的內容,所以,這里我們只介紹單個容器的方法。
初始化工程
首先要做的是初始化一個新的Symfony工程. 推薦的方法是用composer的create-project命令。本來可以在工作站上安裝composer,但是那樣太簡單了。這次我們通過Docker來使用它。
我之前發過一篇關於Docker命令的文章:make docker commands(好吧,我說謊了,我本來把它寫在這篇文章中了,然後覺得把它獨立出來會比較好)。
不管怎麼樣,你可以讀一下。接下來如果還沒有composer命令的話,你可以創建一個屬於自己的composer 別名。
$ alias composer="docker run -i -t -v \$PWD:/srv ubermuda/composer"
現在你可以初始化Symfony工程了:
$ composer create-project symfony/framwork-standard-edition SomeProject
帥呆了!下面來點實在的工作。(省略了博主自娛自樂的一堆balabla....原文:Awesome. Give yourself a high-five, get a cup of coffee or whatever is your liquid drug of choice, and get ready for the real work.)
容器
構建一個運行標准Symfony項目且自給自足的容器相當容易,只需要安裝好常用的Nginx、PHP5-FPM和MySQL-Server即可,然後把預先准備好的Nginx的虛擬主機配置文件扔進去,再復制一些配置文件進去就完事了。
B. 如何配置一個 Docker 化持續集成的 PHP 開發環境
首先,我們得知道什麼才是好的開發環境, 對於我而言,一個好的開發環境需要具備以下幾個特點:
可隨意使用。我必須可以隨意刪除和創建新的環境。
快速啟動。我想要用它工作時候,它立馬就能用。
易於更新。在我們行業中,事物發展變化非常快,必須能讓我很容易將我的開發環境更新到新的軟體版本。
而Docker都支持以上這些特點,甚至更多。你幾乎可以即時銷毀和重建容器,而更新環境只需要重建你當前使用的鏡像即可。
什麼是PHP開發環境
目前Web應用錯綜復雜,PHP開發環境需要很多的東西,為了保證環境的簡單性,需要做各種各樣的限制。
我們這次使用Nginx、PHP5-FPM、MySQL來運行Synmfony項目。由於在容器中運行命令行會更復雜,所以這方面的內容我會放到下一篇博客中再說。
Pet 與 Cattle
另一個我們要討論的重點是:我們要把開發環境部署在多容器還是單容器中。 兩種方式各有優點:
單容器易於分發、維護。因為它們是獨立的,所有的東西都運行在同一個容器中,這點就像是一個虛擬機。但這也意味著,當你要升級其中的某樣東西(比如PHP新版本)的時候, 需要重新構建整個容器。
多容器可以在添加組件時提供更好的模塊化。因為每個容器包含了堆棧的一部分:Web、PHP、MySQL等,這樣可以單獨擴展每個服務或者添加服務,並且不需要重建所有的東西。
因為我比較懶,加上我需要在我的筆記本上放點別的內容,所以,這里我們只介紹單個容器的方法。
初始化工程
首先要做的是初始化一個新的Symfony工程. 推薦的方法是用composer的create-project命令。本來可以在工作站上安裝composer,但是那樣太簡單了。這次我們通過Docker來使用它。
我之前發過一篇關於Docker命令的文章:make docker commands(好吧,我說謊了,我本來把它寫在這篇文章中了,然後覺得把它獨立出來會比較好)。
不管怎麼樣,你可以讀一下。接下來如果還沒有composer命令的話,你可以創建一個屬於自己的composer 別名。
$ alias composer="docker run -i -t -v \$PWD:/srv ubermuda/composer"
現在你可以初始化Symfony工程了:
$ composer create-project symfony/framwork-standard-edition SomeProject
帥呆了!下面來點實在的工作。(省略了博主自娛自樂的一堆balabla....原文:Awesome. Give yourself a high-five, get a cup of coffee or whatever is your liquid drug of choice, and get ready for the real work.)
容器
構建一個運行標准Symfony項目且自給自足的容器相當容易,只需要安裝好常用的Nginx、PHP5-FPM和MySQL-Server即可,然後把預先准備好的Nginx的虛擬主機配置文件扔進去,再復制一些配置文件進去就完事了。
本容器的源代碼在GitHub上的 ubermuda/docker-symfony倉庫中可以找到。 Dockerfile 是Docker構建鏡像要用到的配置文件,我們來看一下:
FROM debian:wheezy
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -y
RUN apt-get install -y nginx php5-fpm php5-mysqlnd php5-cli mysql-server supervisor
RUN sed -e 's/;daemonize = yes/daemonize = no/' -i /etc/php5/fpm/php-fpm.conf
RUN sed -e 's/;listen\.owner/listen.owner/' -i /etc/php5/fpm/pool.d/www.conf
RUN sed -e 's/;listen\.group/listen.group/' -i /etc/php5/fpm/pool.d/www.conf
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
ADD vhost.conf /etc/nginx/sites-available/default
ADD supervisor.conf /etc/supervisor/conf.d/supervisor.conf
ADD init.sh /init.sh
EXPOSE 80 3306
VOLUME ["/srv"]
WORKDIR /srv
CMD ["/usr/bin/supervisord"]
我們通過擴展 debian:wheezy 這個基礎鏡像開始,然後通過一系列的sed命令來配置Nginx和PHP5-FPM。
RUN sed -e 's/;daemonize = yes/daemonize = no/' -i /etc/php5/fpm/php-fpm.conf
RUN sed -e 's/;listen\.owner/listen.owner/' -i /etc/php5/fpm/pool.d/www.conf
RUN sed -e 's/;listen\.group/listen.group/' -i /etc/php5/fpm/pool.d/www.conf
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
這里我們要做兩件事。 首先配置PHP5-FPM和Nginx讓他們在前台運行以便supervisord可以追蹤到他們。
然後,配置PHP5-FPM以指定的用戶運行Web-Server,並處理好文件許可權。
接下來需要安裝一組配置文件,首先是Nginx的虛擬主機配置文件vhost.conf:
server {
listen 80;
server_name _;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /srv/web;
index app_dev.php;
location / {
try_files $uri $uri/ /app_dev.php?$query_string;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
}
因為我們不需要域名,所以把server_name設成了_(有點像perl的$_佔位符變數), 並配置根目錄(document root)為/svr/web, 我們會把應用程序部署在/srv下,剩下的就是標準的Mginx + PHP5-FPM配置.
因為一個容器每次只能運行一個程序, 我們需要supervisord(或者任何別的進程管理器,不過我比較中意supervisord)。幸運的是, 這個進程管理器會產生我們需要的所有進程!下面是一小段supervisord的配置:
[supervisord]
nodaemon=true
[program:nginx]
command=/usr/sbin/nginx
[program:php5-fpm]
command=/usr/sbin/php5-fpm
[program:mysql]
command=/usr/bin/mysqld_safe
[program:init]
command=/init.sh
autorestart=false
redirect_stderr=true
redirect_stdout=/srv/app/logs/init.log
這里我們需要做的是定義所有的服務, 加上一個特殊的program:init進程,它不是一個實際的服務,而是一個獨創的運行啟動腳本的方式。
這個啟動腳本的問題在於,它通常需要先啟動某些服務。比如,你可能要初始化一些資料庫表,但前提是你得先把MySQL跑起來,一個可能的解決辦法是,在啟動腳本中啟動MySQL,然後初始化表,然後為了防止影響到supervisord的進程管理,需要停掉MySQL,最後再啟動supervisord。
這樣的腳本看起來類似下面這樣:
/etc/init.d/mysql start
app/console doctrine:schema:update --force
/etc/init.d/mysql stop
exec /usr/bin/supervisord
看起來丑爆了有木有,咱換種方式,讓supervisor來運行它並且永不重啟。
實際的init.sh腳本如下:
#!/bin/bash
RET=1
while [[ RET -ne 0 ]]; do
sleep 1;
mysql -e 'exit' > /dev/null 2>&1; RET=$?
done
DB_NAME=${DB_NAME:-symfony}
mysqladmin -u root create $DB_NAME
if [ -n "$INIT" ]; then
/srv/$INIT
fi
腳本先等待MySQL啟動,然後根據環境變數DB_NAME創建DB,默認為symfony, 然後在INIT環境變數中查找要運行的腳本,並嘗試運行它。本文的結尾有說明如何使用這些環境變數。
構建並運行鏡像
萬事俱備只欠東風。我們還要構建Symfony Docker鏡像, 使用docker build命令:
$ cd docker-symfony
$ docker build -t symfony .
現在,可以使用它來運行你的Symfony工程了:
$ cd SomeProject
$ docker run -i -t -P -v $PWD:/srv symfony
我們來看看這一連串的選項分別是幹嘛的:
-i 啟動交互(interactive)模式, 也就是說,STDIO(標准輸入輸出)連接到了你當前的終端上。當你要接收日誌或者給進程發送信號時,它很有用。
-t 為容器創建一個虛擬TTY, 它跟-i是好基友,通常一起使用。
-P 告訴Docker守護進程發布所有指定的埠, 本例中為80埠。
-v $PWD:/srv 把當前目錄掛載到容器的/srv目錄。掛載一個目錄使得目錄內容對目標掛載點可用。
現在你還記得之前提到的DB_NAME和INIT環境變數了吧,幹嘛用的呢:用於自定義你的環境。 基本上你可以通過 docker run的-e選項在容器中設置環境變數,啟動腳本會拿到環境變數,因此,如果你的DB名為some_project_dev, 你就可以這么運行容器:
$ docker run -i -t -P -v $PWD:/srv -e DB_NAME=some_project_dev symfony
INIT 環境變數就更強大了,它允許你啟動時運行指定的腳本。比如, 你有一個bin/setup腳本運行composer install命令並且設置資料庫schema:
#!/bin/bash
composer install
app/console doctrine:schema:update --force
用-e來運行它:
$ docker run -i -t -P \
-v $PWD:/srv \
-e DB_NAME=some_project_dev \
-e INIT=bin/setup
注意,-e選項可以在docer run中多次使用,看起來相當酷。另外,你的啟動腳本需要可執行許可權(chmod +x)。
現在我們通過curl發送請求到容器,來檢查一下是否所有的東西都像預期一樣工作。首先,我們需要取到Docker映射到容器的80埠的公共埠,用docker port命令:
$ docker port $(docker ps -aql 1) 80
0.0.0.0:49153
docker ps -aql 1 是個好用的命令,可以方便的檢索到最後一個容器的id, 在我們的例子中,Docker 把容器的80埠映射到了49153埠。我們 curl 一下看看。
$ curl http://localhost:49153
You are not allowed to access this file. Check app_dev.php for more information.
當我們不從localhost(譯者註:容器的localhost)訪問dev controller時,得到了Symfony的默認錯誤消息,這再正常不過了, 因為我們不是從容器內部發送 curl 請求的, 所以,可以安全的從前端控制器web/app_dev.php中移除這些行。
// This check prevents access to debug front controllers that are deployed by accident to proction servers.
// Feel free to remove this, extend it, or make something more sophisticated.
if (isset($_SERVER['HTTP_CLIENT_IP'])
|| isset($_SERVER['HTTP_X_FORWARDED_FOR'])
|| !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server')
) {
header('HTTP/1.0 403 Forbidden');
exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
這些行阻止了任何從localhost以外的地方訪問dev controller。
現在再curl的時候就可以正常工作了,或者用瀏覽器訪問 http://localhost:49153/:
很容易吧! 現在我們可以快速的啟動、更新環境了,但還是有很多地方需要改進。
C. coding持續集成之自動發布
伺服器環境-centos7.2
使用技術如下:
CODING 的持續集成本質上就是每次實例化一台 CVM,再把 Jenkins 安裝進去,和我們在普通的雲伺服器上部署是一樣的。
CODING 持續集成會為每個構建任務分配一台 VM 作為構建資源,您可以通過內置的 agent label 來使用不同的環境進行構建。目前支持的構建環境有三種:
默認環境中提供的 SDK 以及對應的版本如下(更新日期:2019 年 11 月 30 日):
android-sdk: 26.1.1
build-essential
java: 1.8.0_191
python: 2.7.12
python3: 3.5.2
python3.7: 3.7.3
nodejs: 10.15.3
php: 7.3.5
ruby: 2.6.0
go: 1.12.4
dotnet-core: 2.2
erlang: Erlang/OTP 21
elixir: 1.8.1
默認環境中提供的命令行工具以及對應的版本如下(更新日期:2019 年 11 月 30 日):
cmake: 3.5.1
maven: 3.6.1
gradle: 4.10.3
nvm: 0.34.0
yarn: 1.15.2
composer: 1.8.5
bundler: 1.17.2
rvm: 1.29.7
docker: 18.09.1
docker-compose: 1.23.1
kubectl: 1.14
rancher: 2.2.0
helm: 2.13.1
coscmd: 1.8.5.36
tccli: 3.0.67.1
svn: 1.9.3
mercurial: 3.7.3
git: 2.7.4
git-lfs: 2.7.2
jq: 1.5-1-a5b5cbe
pigz: 2.3.1
sshpass: 1.05
vsftpd: 3.0.3
通過上圖可以設置根據不同的觸發規則來自動構建項目達到自動發布的目的。
D. PHP程序員要掌握的知識以及相關書籍
1、《PHP基礎教程(第4版)》
書中內容相對簡單,但可以對PHP有一個大概的認識,方便以後的學習。
這本書以通俗易懂的語言向初學者介紹了PHP 語言的基本概念、使用方法和注意事項。全書通 過豐富的示例,引領讀者逐步掌握這門流行的Web 開發語言,使讀者能夠上手編寫適用於常用場景的PHP 腳本。適合有基本HTML 經驗的讀者閱讀。
2、《PHP與MySQL程序設計(第4版)》
這本書中稍微提及了PHP連接和使用MySQL資料庫的方法,全面講述PHP與MySQL的經典之作,書中不但全面介紹了兩種技術的核心特性,還講解了如何高效地結合這兩種技術構建健壯的數據驅動的應用程序。
3、《深入PHP:面向對象、模式與實踐(第3版)》
書中主要介紹了如何使用面向對象技術和設計模式編寫穩定的、可維護的代碼,如何使用Subversion管理多個開發人員,如何使用Phing和PEAR進行構建和安裝,以及將構建和測試過程自動化的策略,包括持續集成。
這本書適合每位PHP開發人員進階參考。
可幫助掌握PHP面向對象設計和開發的精髓,並最終躋身高端PHP開發人員之列。
4、PHP高級程序設計:模式、框架與測試》
書中首先從OOP 採用的機制—— 抽象類、介面、契約式編程開始講起,然後介紹了靜態方法、單例模式、工廠模式和PHP 6 的新特性等內容, 接著介紹了測試和文檔方面的內容,還介紹了標准PHP 庫SPL 方面的知識以及PHP 開發人員最有可能用到的MVC 模式,最後介紹了Ajax 、JSON 、SOAP Web 服務以及SSL 客戶端驗證等Web 2.0 方面的內容。適合中、高級的PHP 程序員閱讀。
5、《應用Yii1.1和PHP5進行敏捷Web開發》
這是一本介紹性的圖書,描述如何去使用Yii應用的測試驅動開發(TDD)的方法開發實際的工程。如果想要快速掌握Yii,不妨看看它。
E. jenkins php持續集成 build 文件怎麼寫
安裝
jenkins和PHP安裝網上有教程。
有可能在安裝過程中,插件是走的國外的網,有些會安裝不成功,可以先不管。
插件安裝
具體要安裝的插件請參考:http://jenkins-php.org/installation.html
請到這里下載你需要jenkins的插件,插件有依賴關系,所以不可能只下載教程里的。如果有代理的,可以選擇更新操作。
php測試工具請到:這里,注意工具的版本。最好自己下載匹配的版本。因為有些工具以前安裝過,所以剩下的工具都是下載phar,然後生成cmd文件(命令echo @php 「%~dp0phpunit.phar」 %* > phpunit.cmd)。
這里寫圖片描述
PHPUnit php測試框架
PHP_CodeSniffer 代碼格式檢測
PHPLOC 統計php的項目代碼行數
PHP_Depend 它可以用來檢查你的PHP項目中的代碼規模和復雜程度
PHPMD (PHP Mess Detector)能夠探測PHP源代碼中一些潛在的問題。如:可能存在的Bug;未達最佳標準的代碼;過於復雜的語法;從未使用過的參數、方法、屬性。
PHPCPD(Copy/Paste Detector)PHPCPD是一個在代碼中尋找類似模式的工具,使用它是為了在代碼庫中識別代碼在何處被復制或粘貼。這是常規構建過程中一個非常有用的工具,它會幫助程序員分析代碼,以避免在代碼庫中重復調用函數。
phpDox一個PHP項目的文檔生成器(不限於API文檔)
集成
由於我是windows系統,有些命令會不一樣。
下載jenkins-cli.jar
這里寫圖片描述
這里寫圖片描述
例子
由於我的php是5.5,phpunit4.8,和github上的phpunit版本不同,所以下載的是tags V1.6.1。
F. 有沒有適合PHP項目的持續集成工具
base64()就足夠了。。幾乎都用這個如果你不想反編譯 就MD5吧
G. DevOps是什麼 DevOps工程師到底做些什麼
DevOps是IT服務管理的一種模式。過去的數十年間,IT運維發展經歷了數個階段。從早期的手工運維到標准化運維、自動化運維,到如今的DevOps、AIOps。
簡言之,DevOps試圖打通開發和運維的部門牆,從而打通整個IT價值交付的全生命周期,從產品需求到上線運維的全過程實現效率的提升。
DevOps最顯著的作用是提高了企業產品的交付質量、縮短開發周期、減少故障。而降本增效是每一個公司在數字化轉型之後的很大的挑戰,DevOps無疑直擊痛點。
而作為一名DevOps 工程師,除了要具備軟體工程師基本的編程能力以外,還需要特定的人際交往、工具使用等技能。換句話說,DevOps 工程師需要「軟」、「硬」技能兼備,具體如纖燃咐下:
一、溝通與協作技巧
DevOps 是一種橫跨軟體開發、測試和部署的協作方法。它將原本具有不同目標的開發、測試和運維小團隊聚集在一起,以實現更高效和高質量的代碼發布,這就要求 DevOps 流程中的不同角色之間不能有任何交流障礙。因此,良好的溝通技巧(無論是口頭還是書面)對於優秀的 DevOps 工程師來說是必不可少的。
協作能力也很重要。DevOps 是團隊合作的開發模式,每個工程師都是團隊成員,需要在整個軟體迭代過程中支持其他同事的工作。這不僅僅要求我們成為一名優秀的隊友,還要在適當的時候給新人一些建議,包括但不限於指導和建議團隊成員交付代段漏碼的最佳方式、編碼時使用哪些工具以及如何測試最新功能。這就要求我們自身也要對這些 DevOps 流程中的必要技能有所了解。
二、熟悉和理解 DevOps 工具鏈
除了協作和溝通這樣的「軟」技能之外,DevOps 工程師還必須知道如何使用各種復雜工具協同工作以支持軟體交付目標,這是成為一個優秀的 DevOps 工程師所必備的「硬」技能。
DevOps 工程師需要知道如何使用和理解以下類型工具的作用:
版本控制工具
詳細地說,集合了代碼審查、合並功能的版本控制工具是能讓多個開發人員之間完美協作的主要DevOps 工具。由於 DevOps 流程匯集了來自各個部門的專家,所以他們需要了解源代碼控制系統,以及系統跟蹤不同應用程序中的更改。此外,它還維護應用程序的多個版本。
目前 DevOps 流程中常用的版本控制系統都基於開源分布式版本控制系統 Git,例如 GitHub、Gitee、GitLab 以及各大廠商基於 Git 定製的內源協作工具。
持續集成工具
持續集成(CI)是 DevOps 的關鍵技能之一,它是構建 pipeline 的重要部分。DevOps 要求運營和開發團隊使用統一的系統。因此,持續集成所做的就是將開發人員的代碼與 master 合並在一起。有了這樣的技巧,就可以有效地合並數據。因此,DevOps 工程師一定要知道如何使用一些常用的 CI 工具,例如 GitHub Action、Jenkins、Bamboo、TeamCity、Travis CI 等。
容器與編排工具
容器作為現代微服務與雲原生架構的核心技術,提供了關於 DevOps 的三個基本功能,包括毀純持續的實驗、流動和反饋。容器技術的不可變基礎設施實現了操作系統層虛擬化,不僅方便運維程序升級和部署,還升華成了向應用代碼隱藏環境復雜性的手段,成為推廣分布式服務的必要前提。
目前,Docker 仍然是應用最廣泛的容器技術,而以容器編排引擎 Kubernetes 為核心的雲原生技術棧則是各大互聯網企業構建容器技術基礎設施的事實標准。
自動化工具
自動化是軟體開發過程中必不可少的要素之一。幾乎所有的手工任務都可以使用各種腳本語言自動完成。例如,Ruby、Bash、Python、Node、Shell 等等。可以說,使用自動化開發工具已經成為了很多 DevOps 團隊加快開發和部署過程的關鍵。想要成為 DevOps 工程師,掌握自動化工具很有必要。
監控和報警工具
DevOps 持續集成和持續部署的實現離不開持續監控的輔助作用。許多微服務都是由數百個組件組合而成,其中一個服務的故障可能導致整個系統崩潰。當然,手動找到核心故障問題是很復雜和耗時的。其中一個解決方案就是持續監控關鍵特徵,如 RAM 使用、請求數量、異常數量和存儲空間。因此,需要根據系統的關鍵特性設置一個警報系統。例如,當存儲空間使用率達到 80% 時應該觸發警報,以便 DevOps 運維開發人員可以在整個系統崩潰之前解決問題。
三、具有成熟編碼標準的特定編程技能
然編程能力是每個開發者最基本的能力,但 DevOps 工程師在這方面仍然有一些更特殊的要求。
通常來說,DevOps 工程師需要在專精 1-2 門編程語言的基礎上熟悉多種語言,例如 Java、JavaScript、Ruby、Python、PHP、Go 等,這是由微服務時代同一系統不同服務可以由不同語言、不同框架實現的特性而決定的。DevOps 工程師至少需要了解這些語言的特性並具備在操作系統環境中編寫和調試它們的能力。
四、技術支持和維護技能
優秀的 DevOps 工程師不僅需要開發方面的技能,有時還需要為客戶提供維護和技術支持。這意味著 DevOps 工程師應該樂於為內部和外部客戶提供支持,並在出現問題時進行故障排除。
H. PHP中有什麼好的代碼自動檢查工具嗎
您好,
當然有。PHP Mess Detector(http://phpmd.org/)
PHP項目體檢工具,根據你設定的標准(如單一文件兆棚代碼體積,未使用的參數個數,未使用的方法數)檢查PHP代碼,超出設定的標准時報警。PHP Copy Paste Detector(https://github.com/sebastianbergmann/...)
顧名思義,檢查冗餘代碼PHP Dead Code Detector(https://github.com/sebastianbergmann/...)看名字就知道了,檢查從未被調用過的方法PHP Code Sniffer(http://pear.php.net/package/PHP_CodeS...)
老牌代碼格式化工具,PHP寫的,Pear包,可自己hack,可集成到命族液則令行里。我一直用的PHP Code Beautifier,只有Windows GUI,Windows CMD很難用,已經打算跳槽到PHP CS了
你還可以用jenkins把上述工具以plugins形式整合起來,做持續集成:http://jenkins-php.org/
你還可以用xinc+phing跟上述工具集成起來做持續集成後的埋歲自動化打包發布:http://code.google.com/p/xinc/