Jenkins PhP

Jenkins PHP 簡單設置

Gary Ng
13 min readOct 12, 2020

所需套件, 會在以下步驟教如何安裝

php 套件

  1. phploc : 統計專案規模大小
  2. phpcpd: 檢查程式的重複
  3. phpcs: 檢查語法
  4. phpunit: 執行 php unittest
  5. xdebug
  6. phpmd 找出複雜度過高的程式碼
  7. pdepend 程式碼依賴度檢查

Jenkins 套件

  1. Plot: 繪製 csv 供 phploc 使用
  2. HTML Publisher: 顯示程式覆蓋率
  3. jenkins Dockerfile 要先安裝基本的指令
  4. DRY 套件 供 phpcpd 使用
  5. Checkstyle 套件 供 phpcs 使用
  6. JDepend 供 phpdepend 使用
  7. Warnings Next Generation Plugin 供大部分的 php使用
  8. xUnit 測試時使用
  9. Publish over ssh
  10. Static Analysis Collector Plug-in
  11. 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 統計專案規模大小

  1. 安裝 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) 套件, 檢查程式是否有重複

  1. 安裝 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 安裝

  1. 安裝 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 語法檢查

  1. 設定如下 (注意一定要 cat 出來, 否則假如不符合規則的話, 因為回傳值非0, 所以會報錯)

pdepend 程式碼依賴度檢查

  1. 安裝套件
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 套件

  1. phploc : 統計專案規模大小
  2. phpcpd: 檢查程式的重複
  3. phpcs: 檢查語法
  4. phpunit: 執行 php unittest
  5. xdebug
  6. phpmd 找出複雜度過高的程式碼
  7. pdepend 程式碼依賴度檢查

Jenkins 套件

  1. Plot: 繪製 csv 供 phploc 使用
  2. HTML Publisher: 顯示程式覆蓋率
  3. jenkins Dockerfile 要先安裝基本的指令
  4. DRY 套件 供 phpcpd 使用
  5. Checkstyle 套件 供 phpcs 使用
  6. JDepend 供 phpdepend 使用
  7. Warnings Next Generation Plugin 供大部分的 php使用
  8. xUnit 測試時使用

參考資料:

--

--

Gary Ng
Gary Ng

Written by Gary Ng

軟體工程師、後端工程師

No responses yet