亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

基于Jenkins實現(xiàn)php項目的自動化測試 打包和自動部

2020-03-24 18:54:26
字體:
來源:轉載
供稿:網友
  • 本篇博文宅鳥將在上篇: 基于Jenkins 搭建持續(xù)集成環(huán)境 的基礎上,繼續(xù)介紹Jenkins結合php項目實現(xiàn)自動化測試和自動部署。廢話不再多說,直接上干活。

    宅鳥所使用的server為Ubuntu

    要實現(xiàn)在jenkins中實現(xiàn)php的自動化測試,首先需要Jenkins服務器上安裝php測試框架,php的測試框架很多,在這里我們選擇 PHPUnit Framework.

    PHPUnit的安裝很簡單:

    sudo apt-get install phpunit

    如果出現(xiàn)如下錯誤:

    PHP Warning: require_once(PHP/CodeCoverage/Filter.php): failed to open stream: No such file or directory in /usr/bin/phpunit on line 39PHP Fatal error: require_once(): Failed opening required 'PHP/CodeCoverage/Filter.php' (include_path='.:/usr/share/php:/usr/share/pear') in /usr/bin/phpunit on line 39

    可以通過下面方法安裝:

    sudo pear channel-discover pear.phpunit.desudo pear channel-discover pear.symfony-project.comsudo pear channel-discover components.ez.nosudo pear channel-discover pear.symfony.comsudo pear update-channelssudo pear upgrade-allsudo pear install pear.symfony.com/Yamlsudo pear install --alldeps phpunit/PHPUnitsudo pear install --force --alldeps phpunit/PHPUnit

    安裝后執(zhí)行phpunit --version 返回版本信息。表示安裝成功。

    root@dop-kvm-2:# phpunit --versionPHPUnit 3.7.28 by Sebastian Bergmann.

    下面我們開始給Jenkins一些插件:

    Subversion/Git:用于集成項目版本控制軟件,根據需要選擇(在上篇博文已安裝使用)

    Phing/Ant:使用Phing或Apache Ant 對PHP項目做自動化構建

    CheckStyle:使用PHP CodeSniffer進行代碼風格檢查的工具。用于檢查PHP代碼是否有違反一組預先設置好的編碼標準的一個PEAR包,內置了ZEND,PEAR的編碼風格規(guī)則

    Clover PHP:使用phpunit進行單元測試的工具,可以被xdebug擴展用來生成代碼覆蓋率報告,并且可以與phing集成來自動測試,還可以和Selenium整合來完成大型自動化集成測試

    DRY:使用PHPCPD(php copy paste detector)來發(fā)現(xiàn)項目中的重復代碼

    HTML Publisher:用來發(fā)布phpunit代碼覆蓋率報告

    JDepend:使用PHP Depend分析php中靜態(tài)代碼,用來檢查項目中的代碼規(guī)模和復雜程度

    Plot:使用phploc來統(tǒng)計php項目規(guī)模大小的工具,可以統(tǒng)計php的項目代碼行數(shù)

    PMD:使用phpmd(php mess dector),對基于pdepend的結果進行分析,一旦項目超過了pdepend中各具體指標的規(guī)定,將發(fā)出警告信息.

    Violations:按照代碼缺陷嚴重性集中顯示pwd靜態(tài)代碼分析的結果

    xUnit:使用JUnit的格式來輸出phpunit的日志文件

    注意這些插件是jenkins為php項目所提供的一些插件,但并不是必須的,所以宅鳥只把最值得大家關注的怎么自動化測試、打包和發(fā)布來給大家講解。

    先給出項目的目錄結構:

    root@dop-kvm-2:/home/jenkins/api# tree.├── aa.php├── build.xml├── create.php└── test    ├── DemoTest.php    └── FunctionTest.php1 directory, 5 files

    注意:

    aa.php、create.php是項目的程序文件

    test目錄下的DemoTest.php和FunxtionTest.php是項目的測試文件

    build.xml是jenkins持續(xù)集成測試打包部署的調用文件

    首先給出項目需要的build.xml文件:

    <?xml version="1.0" encoding="UTF-8"?><project name="api" default="build">        <target name="build" depends="make_runtime,phpcs-ci,phploc,pdepend,phpcb,phpunit,phpdox,phpcpd"/>        <property name="version-m"  html' target='_blank'>value="1.1" />        <property name="version"    value="1.1.0" />        <property name="stability"  value="stable" />        <property name="releasenotes" value="" />        <property name="tarfile"     value="${phing.project.name}.${buildnumber}.${buildid}.tar.gz" />        <property name="pkgfile"     value="${phing.project.name}.${version}.tgz" />        <property name="distfile"    value="dist/${tarfile}" />        <property name="tests.dir" value="test" />        <fileset id="api.tar.gz" dir=".">            <include name="test/**"/>            <include name="*.php"/>            <include name="*.xml"/>        </fileset>        <target name="make_runtime">                <mkdir dir="${project.basedir}/Runtime" />                <mkdir dir="${project.basedir}/build/logs" />                <mkdir dir="${project.basedir}/build/pdepend" />                <mkdir dir="${project.basedir}/build/code-browser" />        </target>        <target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer">                <exec executable="phpcs">                        <arg value="--standard=${project.basedir}/build/phpcs.xml" />                        <arg value="--ignore=autoload.php" />                        <arg path="${project.basedir}/" />                </exec>        </target>        <target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer">                <exec executable="phpcs" output="${project.basedir}/build/build.log">                        <arg value="--report=checkstyle" />                        <arg value="--report-file=${project.basedir}/build/logs/checkstyle.xml" />                        <arg value="--standard=${project.basedir}/build/phpcs.xml" />                        <arg value="--ignore=" />                        <arg path="${project.basedir}/" />                </exec>        </target>        <target name="phploc" description="Measure project size using PHPLOC">                <exec executable="phploc">                        <arg value="--log-csv" />                        <arg value="${project.basedir}/build/logs/phploc.csv"/>                        <arg path="${project.basedir}/"/>                </exec>        </target>        <target name="pdepend" description="Calculate software metrics using PHP_Depend">                <exec executable="pdepend">                        <arg value="--jdepend-xml=${project.basedir}/build/logs/jdepend.xml"/>                        <arg value="--jdepend-chart=${project.basedir}/build/pdepend/dependencies.svg"/>                        <arg value="--overview-pyramid=${project.basedir}/build/pdepend/overview-pyramid.svg"/>                        <arg path="${project.basedir}/"/>                </exec>        </target>                                                                                                                                                                                                              <target name="phpmd" description="Perform project mess detection using PHPMD">                <exec executable="phpmd">                        <arg path="${project.basedir}/"/>                        <arg value="text"/>                        <arg value="${project.basedir}/build/phpmd.xml"/>                </exec>        </target>                                                                <target name="phpmd-ci" description="Perform project mess detection using PHPMD">                <exec executable="phpmd">                        <arg path="${project.basedir}/"/>                        <arg value="xml"/>                        <arg value="${project.basedir}/build/phpmd.xml"/>                        <arg value="--reportfile"/>                        <arg value="${project.basedir}/build/logs/pmd.xml"/>                </exec>        </target>                                                                                  <target name="phpcpd" description="Find duplicate code using PHPCPD">                <exec executable="phpcpd">                        <arg value="--log-pmd"/>                        <arg value="${project.basedir}/build/logs/pmd-cpd.xml"/>                        <arg path="${project.basedir}/"/>                </exec>        </target>        <target name="phpdox" description="Generate API documentation using phpDox">                <exec executable="phpdox"/>        </target>        <target name="phpunit" description="Run unit tests with PHPUnit">                <exec executable="phpunit" />        </target>        <target name="test" description="Run PHPUnit tests">            <phpunit haltonerror="true" haltonfailure="true" printsummary="true">            <batchtest>            <fileset dir="${tests.dir}">                <include name="**/*Test.php" />            </fileset>            </batchtest>            </phpunit>        </target>        <target name="phpcb" description="Aggregate tool output with PHP_CodeBrowser">                <exec executable="phpcb">                        <arg value="--log"/>                        <arg path="${project.basedir}/build/logs"/>                        <arg value="--source"/>                        <arg path="${project.basedir}/"/>                        <arg value="--output"/>                        <arg path="${project.basedir}/build/code-browser"/>                </exec>        </target>        <target name="check" description="Check variables" >            <fail unless="version" message="Version not defined!" />            <fail unless="buildnumber" message="buildnumber not defined!" />            <fail unless="buildid" message="buildid not defined!" />            <delete dir="dist" failonerror="false" />            <mkdir dir="dist" />        </target>                                                                                         <target name="tar" depends="check" description="Create tar file for release">            <echo msg="Creating distribution tar for ${phing.project.name} ${version}"/>            <delete file="${distfile}" failonerror="false"/>            <tar destfile="${distfile}" compression="gzip">                <fileset refid="api.tar.gz"/>            </tar>        </target></project>

    閱讀build.xml后,大家可以了解一下內容:

    項目名稱、版本、打后的包名稱:

    <project name="api" default="build">        <target name="build" depends="make_runtime,phpcs-ci,phploc,pdepend,phpcb,phpunit,phpdox,phpcpd"/>        <property name="version-m"  value="1.1" />        <property name="version"    value="1.1.0" />        <property name="stability"  value="stable" />        <property name="releasenotes" value="" />        <property name="tarfile"     value="${phing.project.name}.${buildnumber}.${buildid}.tar.gz" />        <property name="pkgfile"     value="${phing.project.name}.${version}.tgz" />        <property name="distfile"    value="dist/${tarfile}" />        <property name="tests.dir" value="test" />

    打包時包括的文件和文件夾:這里還可以使用exclude排除文件和文件夾:

    <fileset id="api.tar.gz" dir=".">           <include name="test/**"/>           <include name="*.php"/>           <include name="*.xml"/>       </fileset>

    測試文件所在地址:

    <target name="phpunit" description="Run unit tests with PHPUnit">                <exec executable="phpunit" />        </target>        <target name="test" description="Run PHPUnit tests">            <phpunit haltonerror="true" haltonfailure="true" printsummary="true">            <batchtest>            <fileset dir="${tests.dir}">                <include name="**/*Test.php" />            </fileset>            </batchtest>            </phpunit>        </target>

    了解這些后,我們開始在jenkins中新建autoTestTarAndPublish項目,選擇:構建一個自由風格的軟件項目:

    并且指定好代碼庫:如圖所示

    172124575.jpg

    然后再 增加構建步驟->Invoke Phing targets:

    增加兩個 target: test,tar 分別與build.xml中的test,tar名稱相對應

    172650946.jpg

    給tar加上參數(shù):

    172622637.jpg

    然后在左邊主菜單: 系統(tǒng)管理->系統(tǒng)設置->Publish over SSH 下添加主機:(這里宅鳥設置使用ssh免密碼登陸)需要設置成從jenkins到要發(fā)布的web服務器的無密碼登陸

    如圖設置:

    175130605.jpg

    這里添加設置的主機名是:134

    接下來我們就可以設置部署工作了:

    在添加構建步驟下來表中選擇:Send files or execute commands over SSh,如果該選項未出現(xiàn)需要在插件管理中安裝插件:Publish Over SSH 然后重啟jenkins即可.

    174009766.jpg

    然后在出現(xiàn)的SSH Publishers中選擇要發(fā)布的主機:

    并填寫打包文件地址,發(fā)布到遠程server地址信息,并在Exec command文本框中填寫解壓等shell腳本:

    詳情見圖:

    175817788.jpg

    此項設置完畢后,就可以發(fā)布php項目到134服務器上了:

    最后文件發(fā)布包的存檔工作:

    增加構建后操作步驟:

    180033526.jpg

    填寫dist/*.tar.gz

    180210215.jpg

    至此配置完畢后,點擊 保存 按鈕.我們就可以發(fā)布程序到指定服務器134上了.

    來看一下發(fā)布結果:

    回到項目左側點擊:立即構建:可以看到構建進度條,結束后可以在控制臺看到輸出結果:

    180656573.jpg

    我們來到134上看:

    180805428.jpg

    至此發(fā)布完畢.

    此時我們查看一下test/DemoTest.php文件內容:

    <?phpclass DemoTest extends PHPUnit_Framework_TestCase {  public function testPass() {      $this->assertTrue(true);    }  public function testFail() {      $this->assertFalse(false);    }}?>

    我們把 testFail()改成下面:

    <?phpclass DemoTest extends PHPUnit_Framework_TestCase {  public function testPass() {      $this->assertTrue(true);    }  public function testFail() {     $this->assertTrue(false);    }}?>

    $this->assertTrue(false);

    這個是錯誤的斷定:

    提交文件后再次構建:

    我們可以看到本次構建失敗,查看輸出結果如下:

    181704835.jpg

    當把測試用例修改回正確后,執(zhí)行構建,發(fā)布正確。

    <?phpclass DemoTest extends PHPUnit_Framework_TestCase {  public function testPass() {      $this->assertTrue(true);    }  public function testFail() {      $this->assertFalse(false);    }}?>

    182504533.jpg

    ok,到此介紹結束.

    總結一下:

    jenkins根據項目根目錄下的build.xml文件,并根據jenkins中targets的配置,首先自動執(zhí)行test,當測試通過后,開始執(zhí)行tar,打包完成后,開始鏈接遠程webserver把程序包上傳到遠程webserver指定目錄下,然后再根據jenkins下的command 執(zhí)行解壓操作,然后就可以根據自己的業(yè)務通過shell腳本進行自動處理自動發(fā)布的各項操作.

    如果在執(zhí)行test過程中,出現(xiàn)發(fā)現(xiàn)測試用例不通過,則就發(fā)出錯誤報告,終止本次構建。

    下一篇博文,將介紹jenkins結合ansible、shell和mysql版本遷移實現(xiàn)多服務器批量發(fā)布.敬請關注

    干貨吐槽完畢,由于時間倉儲,有不足之處歡迎拍磚.

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    国产欧美第一页| 亚洲免费av在线| 国产成人av网站| 久操视频在线观看| 欧美高清性hdvideosex| www.操操操| 中文字幕视频网| 国产精品成人3p一区二区三区| 国产精品99精品一区二区三区∴| 夜夜嗨av一区二区三区网站四季av| 亚洲欧美精品中文第三| 久久av影院| 欧美激情一区二区三区免费观看| 中文字幕在线看高清电影| shkd中文字幕久久在线观看| 日韩三级中文字幕| 国产 中文 字幕 日韩 在线| 亚洲乱码日产精品bd在线观看| 亚洲区免费影片| 亚洲欧美日韩综合国产aⅴ| 99视频网站| 久久久精品视频免费观看| 欧洲人成人精品| 中文字幕一区二区精品区| 亚洲精品高清国产一线久久| 综合一区在线| 午夜日韩在线电影| 韩国女主播成人在线观看| 亚洲日本伦理| 欧美三级资源在线| 中文字幕 欧美激情| 激情欧美国产欧美| 成人动漫免费在线观看| 精品久久久久久综合日本欧美| 亚洲免费一区| 欧美日韩和欧美的一区二区| 葵司免费一区二区三区四区五区| 99精品视频免费全部在线| 性xxxxbbbb| 欧美成人激情| 国产羞羞视频在线播放| 日本少妇做爰全过程毛片| 国产欧美日产一区| 蜜桃麻豆av在线| 成年人免费网站| 在线观看岛国av| 91精品欧美福利在线观看| 久久久久久久久久久久久国产| 宅男一区二区三区| 超碰国产精品一区二页| 中文字幕免费看| 高清一区二区三区四区五区| 欧美人与动性xxxxbbbb| 视频污在线观看| 亚洲www啪成人一区二区| 可以免费看的av毛片| а中文在线天堂| 久久久久无码精品国产sm果冻| 91精品一区二区三区久久久久久| 国产福利一区二区三区在线视频| 天天躁夜夜躁狠狠是什么心态| 性xxxx丰满孕妇xxxx另类| 日韩欧美一级特黄在线播放| 国产精品1234区| 欧美一区久久久| 精品人伦一区二区三区蜜桃网站| 99久久精品免费| 欧美激情国内偷拍| 国产欧美一区二区三区小说| 免费av毛片在线看| 男女午夜激烈无遮挡| 国内精品露脸在线视频播放| 91中文在线视频| 欧美xxxx做受欧美| 成人伊人精品色xxxx视频| 欧美天天综合网| 26uuu色噜噜精品一区| 成人av在线亚洲| 国产 日韩 欧美| 久久中文久久字幕| 99热在线成人| 免费观看成年在线视频网站| 色就色 综合激情| 青春草免费视频| 亚洲欧美一区二区三区在线播放| 伊人色综合久久久天天蜜桃| 香蕉视频在线网站| 日韩久久一级片| metart日本精品嫩模| 国产一级片免费看| 91欧美精品成人综合在线观看| 九九精品视频在线观看| 精品美女在线播放| 美女航空一级毛片在线播放| 日韩av网站在线播放| 日韩免费在线电影| 亚洲成精国产精品女| 亚洲福利国产精品| 99只有精品| 日韩国产高清影视| 五月天激情视频在线观看| 亚洲激情在线视频| 国产欧美日韩精品高清二区综合区| 国产又白又嫩又爽又黄| 色久综合一二码| 麻豆免费在线观看| av电影天堂一区二区在线观看| 久久精品视频5| 亲子乱一区二区三区电影| 欧美成人精品福利| 欧美狂野另类xxxxoooo| 亚洲成人av网址| 欧美在线性爱视频| 国产视频一区不卡| 秋霞在线观看一区二区三区| 中文字幕在线视频免费观看| a中文字幕www| 国产精品久久久久久久久免费桃花| 欧美精选一区二区| 盗摄精品av一区二区三区| 日韩欧美性视频| 日本一区二区三区免费观看| 国产在线一二| 日本成人网址| 色偷偷88欧美精品久久久| 国产精品嫩草久久久久| 久久一区二区三区四区| 亚洲五月六月| 99久久精品国产精品久久| 亚洲精品www久久久久久| 理论片大全免费理伦片| 精品亚洲国内自在自线福利| 人妻精品无码一区二区三区| 久久青青视频| 日本大片在线观看| 日本高清在线观看wwwww色| 97精品国产91久久久久久| 欧美体内she精视频| 97在线资源| 美腿丝袜亚洲一区| 精品视频在线免费看| 色视频一区二区三区| 欧美成人激情视频| 三级亚洲高清视频| 精品不卡一区| 中文字幕亚洲图片| 欧美国产日韩xxxxx| 亚洲h动漫在线| 老司机午夜免费福利| 欧美另类tv| 91在线视频观看免费| 欧美亚洲在线播放| 欧美丝袜美腿| 99热在线免费| 美女的胸无遮挡在线观看| 无码精品一区二区三区在线| 国产人妻精品一区二区三区不卡| 成人中文字幕在线| 在线播放豆国产99亚洲| 西瓜成人精品人成网站| 久久超级碰碰| 成人av免费| 免费看久久久| 国产91精品露脸国语对白| 国产美女精品在线观看| 亚洲一区二区中文字幕| 精品国产乱码久久久久久蜜臀| 久久国产精品久久精品| 国产精品大片免费观看| 日韩亚洲精品电影| 国产精品亚洲人成在99www| 天海翼在线观看视频| 亚洲妇熟xx妇色黄| 9久草视频在线视频精品| 日韩av黄色片| 日韩精品一二三四区| 国产一区二区看久久| 丝袜人妻一区二区三区| 欧美性淫爽ww久久久久无| 性欧美16一18| 欧美日韩国产高清一区| 超碰男人的天堂| 99久久精品国产一区| 九九热在线视频免费观看| 亚洲午夜久久久久中文字幕| 亚洲亚洲一区二区三区| 午夜精品www| 天天艹天天操| 国产麻豆精品一区二区| av在线一区不卡| 欧美v亚洲v综合ⅴ国产v| 国产xxxxxx| 欧美国产日韩一区二区| 伊人网中文字幕| 色婷婷视频在线| 新天天拍日日拍狠狠拍| 日本欧美黄网站| 在线免费观看的av| 国产91对白在线观看九色| 亚洲伊人色欲综合网| 一区二区三区成人精品| 91免费国产精品| caopor在线| ed2k情侣啪啪91av| 精品二区三区线观看| 欧美视频一区二区三区在线观看| 天天操天天摸天天舔| 秋霞精品一区二区三区| 国产精品探花一区二区在线观看| 国产一区在线看| 好吊色视频在线观看| 国产精品三区在线| 亚洲av无码专区在线播放中文| 激情综合网俺也去| 亚洲视频一区二区| 精品国产成人在线影院| 久久精品久久99| 亚洲无码精品一区二区三区| 国产网站无遮挡| 亚洲国产aⅴ成人精品无吗| 青青草成人免费| 久久香蕉综合色一综合色88| 国产三线在线| 高潮白浆女日韩av免费看| av中文一区| 欧美激情精品在线| 99视频精品全国免费| jizzjizzjizz美国| 国产精品1区二区.| 成人做爰视频www网站小优视频| 欧美成a人免费观看久久| 99国产精品久久久久久| 日本午夜精品一区二区三区电影| 国产在线导航| 国产日韩欧美二区| 亚洲成人日韩| 亚洲精品久久久久久久久久久久久久| 91在线播放观看| 国产高清精品在线观看| 韩国三级hd两男一女| 亚洲高清资源综合久久精品| 一本色道久久综合亚洲91| jizz在线免费观看| 日本综合视频| 久久亚洲资源| 经典三级一区二区三区视频| 日日干天天草| 欧美乱妇高清无乱码免费| 精品在线播放视频| 日韩一区二区三区免费看| 最近中文字幕av免费高清| 一卡二卡在线观看| 91在线观看免费高清完整版在线观看| 丰满少妇一区二区| 日韩欧美在线字幕| 五十路亲子中出在线观看| 最新日韩在线视频| 久久成人在线观看| 色呦呦在线资源| 国产免费黄网站| 美国精品一区二区| 亚洲另类在线观看| 欧美精品入口| 欧洲亚洲一区二区| 久久99精品久久久久久欧洲站| 91aaa在线观看| 欧美大片免费观看网址| 午夜av免费观看| 欧美日韩激情在线一区二区三区| 成年网在线观看免费观看网址| 久久伊人亚洲| 91网站视频在线观看| 国产精品初高中精品久久| 国产在线你懂得| 亚洲图片123| 顶级嫩模精品视频在线看| 欧美第一在线视频| 在线成人一区二区| 同性gay免费| 亚洲精品国产高清久久伦理二区| 中文字幕 久热精品 视频在线| 日韩成人动漫| 久久精品99国产精品日本| 日本亚洲色大成网站www久久| 黄色视屏在线免费观看| 91视频地址| 国产一二三四区| 国产亚洲欧美日韩在线观看一区二区| 成人在线一区二区三区| 国产一区二区高清| 日韩在线观看一区| 成人免费在线小视频| 亚洲色图13p| 欧美丝袜丝交足nylons| 国产精品激情电影| 国产伦久视频在线观看| 久久99精品波多结衣一区| 欧美精品久久久久久久久| 精品亚洲aⅴ在线观看| 国产日韩欧美一二三区| 欧美亚洲精品一区二区| 国产一区欧美日韩| 成人性生交大片免费看中文网站| 国产精品 欧美在线| 男人天堂午夜在线| 在线亚洲精品| a级片在线视频| 日韩久久一级片| 成人av资源网站| 欧美亚洲高清| 97久久精品人搡人人玩| 日本一区二区网站| 91中文字幕在线播放| 国产精品一级无码| 亚洲国产一区二区在线观看| 日韩影院免费视频| 婷婷综合五月| 九九热在线免费视频| 欧美jizzhd精品欧美满| 国产女人伦码一区二区三区不卡| 免费看91视频| 欧美特黄一区| 欧美人成在线观看网站高清| 日韩无码精品一区二区| 国产在线久久久| 一区二区三区四区激情| 午夜电影一区二区三区| 久久成人免费网站|