Jenkins PhP
所需套件, 會在以下步驟教如何安裝
php 套件
- phploc : 統計專案規模大小
- phpcpd: 檢查程式的重複
- phpcs: 檢查語法
- phpunit: 執行 php unittest
- xdebug
- phpmd 找出複雜度過高的程式碼
- pdepend 程式碼依賴度檢查
Jenkins 套件
- Plot: 繪製 csv 供 phploc 使用
- HTML Publisher: 顯示程式覆蓋率
- jenkins Dockerfile 要先安裝基本的指令
- DRY 套件 供 phpcpd 使用
- Checkstyle 套件 供 phpcs 使用
- JDepend 供 phpdepend 使用
- Warnings Next Generation Plugin 供大部分的 php使用
- xUnit 測試時使用
- Publish over ssh
- Static Analysis Collector Plug-in
- Warnings Plug-in
FROM jenkinsci/blueocean
# 使用 root
USER root
# 安裝 git 等基本指令
RUN apk add bash
RUN apk add --no-cache git
RUN apk add vim
# 安裝跟 php 相關的指令, 否則無法使用 composer
RUN apk add curl php7 php7-json php7-openssl php7-iconv php7-phar php7-mbstring php7-xml php-dom php7-pdo_sqlite php7-pdo_mysql php7-session php-curl php-pdo php-gd php-ctype php-xmlreader php-zip php-exif
# 安裝 composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 安裝 phpunit
RUN wget -O phpunit https://phar.phpunit.de/phpunit-7.phar
RUN chmod +x phpunit
RUN cp ./phpunit /usr/bin
# 安裝 xdebug
RUN apk add gcc g++ make libffi-dev openssl-dev
RUN apk add php7-dev
RUN apk add php7-pear php7-dev
#php-pecl php-pear
RUN apk add build-base php7-tokenizer
RUN apk add clang
RUN pecl install xdebug
RUN echo "zend_extension=/usr/lib/php7/modules/xdebug.so" >> /etc/php7/php.ini
# php code sniffer
RUN apk add --update composer php-simplexml php-xmlwriter
RUN pear install PHP_CodeSniffer
# phpcs --report=checkstyle --report-file=checkstyle.xml --standard=Zend *.php
# 安裝 phploc 統計專案規模大小
# https://github.com/sebastianbergmann/phploc
RUN wget https://phar.phpunit.de/phploc.phar
RUN cp ./phploc.phar /usr/bin/phploc
RUN chmod +x /usr/bin/phploc
# 安裝 phpcpd Copy/Paste Detector (CPD) for php code
RUN wget https://phar.phpunit.de/phpcpd.phar
RUN cp ./phpcpd.phar /usr/bin/phpcpd
RUN chmod +x /usr/bin/phpcpd# 安裝 phpmd 找出專案複雜度過高的程式碼
RUN wget https://github.com/phpmd/phpmd/releases/download/2.9.1/phpmd.phar
RUN cp ./phpmd.phar /usr/bin/phpmd
RUN chmod +x /usr/bin/phpmd# 安裝 ssh
RUN apk add --no-cache openssh
# 創建 jenkins 資料夾以及產生 ssh key
RUN ssh-keygen -t rsa -C "jenkins" -m PEM -P "" -f /root/.ssh/id_rsa
2. 點選 New Item 新建任務
3. 在 item name 輸入 test, 並且點選 freestyle project 以進行測試
4. 輸入對於任務的描述
5. 本範例的版控是使用 git, 因此這邊選取 git, 並選取 repository url
6. 撰寫建制時的指令
7. 都設定好後即可以在首頁上看到
8. 點進 test 的 job 即可點選 build now 進行建置
9. 在 console output 即可看到輸出的訊息
10. 安裝 HTML Publisher Plugin
先去 http://updates.jenkins-ci.org/download/plugins/htmlpublisher/ 下載套件, 然後將下載下來的套件上傳至 jenkins
11. 在 Jenkins 的 Post-build Action 新增以下配置
新增 junit test report 設定 (設定 xml)
12. 結果如下
13. 倘若要設置代碼測試覆蓋率
ps: 倘若遇到無法加載 css, javascript 的情況下請操考 (Content Security Policy) https://stackoverflow.com/questions/35783964/jenkins-html-publisher-plugin-no-css-is-displayed-when-report-is-viewed-in-j
範例所使用的 github repository url: https://github.com/xgaryng/test_php.git
phplot 統計專案規模大小
- 安裝 phploc
wget https://phar.phpunit.de/phploc.phar
2. 將 phploc 複製到 /usr/bin
cp ./phploc.phar /usr/bin
3. 透過 phploc 產生 csv 檔且包含 test 的資訊
phploc src/ --count-tests test/ --log-csv build/phploc.csv
4. Jenkins build 新增 execute shell
5. Jenkins 安裝 plot plugin
6. Jenkins 設置 post-build 的 plot
7. 結果如下
php cpd (copy paste detection) 套件, 檢查程式是否有重複
- 安裝 cpd
wget https://phar.phpunit.de/phpcpd.phar
2. 複製 cpd 到 /usr/bin
cp phpcpd.phar /usr/bin/phpcpd
3. 更改 phpcpd.phar 權限
chmod +x /usr/bin/phpcpd
4. 設定如下
php md 安裝
- 安裝 php md
wget https://phpmd.org/static/latest/phpmd.phar
2. 副召 php md 到 /usr/bin
cp ./phpmd.phar /usr/bin/phpmd
3. 權限更改
chmod +x /usr/bin/phpmd
php cs 語法檢查
- 設定如下 (注意一定要 cat 出來, 否則假如不符合規則的話, 因為回傳值非0, 所以會報錯)
pdepend 程式碼依賴度檢查
- 安裝套件
composer require pdepend/pdepend
2. 執行
./vendor/pdepend/pdepend/src/bin/pdepend '--overview-pyramid=pyramid.svg' '--jdepend-chart=chart.svg' {資料夾路徑}
3. 可以將產生的 svg 報表顯示在 jenkins 上, 不過先在此地方是定成 html 顯示
markup format 改為 html
進入 job 已更改 description
設定 img , 圖片路徑設定為第二部
<img type=”image/svg+xml” height=”300" src=”ws/pyramid.svg” width=”500"></img>
<img type=”image/svg+xml” height=”300" src=”ws/chart.svg” width=”500"></img>
總結套件列表:
php 套件
- phploc : 統計專案規模大小
- phpcpd: 檢查程式的重複
- phpcs: 檢查語法
- phpunit: 執行 php unittest
- xdebug
- phpmd 找出複雜度過高的程式碼
- pdepend 程式碼依賴度檢查
Jenkins 套件
- Plot: 繪製 csv 供 phploc 使用
- HTML Publisher: 顯示程式覆蓋率
- jenkins Dockerfile 要先安裝基本的指令
- DRY 套件 供 phpcpd 使用
- Checkstyle 套件 供 phpcs 使用
- JDepend 供 phpdepend 使用
- Warnings Next Generation Plugin 供大部分的 php使用
- xUnit 測試時使用
參考資料: