PHP+Jenkins 持續(xù)集成

持續(xù)集成解決的問題

  • 統(tǒng)一代碼發(fā)布
  • 自動構(gòu)建工程
  • 多機(jī)自動化部署

主要使用工具

  • LINUX服務(wù)器
  • 集成工具Jenkins
  • 構(gòu)建工具Phing

環(huán)境搭建

  • jenkins+php安裝
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
yum install jenkins
yum install java
yum install java-1.6.0-openjdk
yum install php
yum install php-devel
yum install php-pear
yum install re2c
yum install php-pecl-imagick
yum install php-dom
yum install php-pear-phing
yum install php-phpunit-PHPUnit
yum install php-phpunit-phpcpd
pear channel-discover pear.phpmd.org
pear remote-list -c pdepend
pear install --alldeps pdepend/PHP_Depend
pear install --alldeps phpmd/PHP_PMD
  • 啟動jenkins瀏覽器訪問 (服務(wù)器IP:8080)
service jenkins start
  • 安裝拓展

    注:首次進(jìn)入可以選擇默認(rèn)安裝拓展
    在瀏覽器打開 系統(tǒng)管理->管理插件->可選插件 搜索以下必須安裝的拓展:

Role Strategy(基于角色的權(quán)限管理)
Publish Over SSH Plugin(通過ssh發(fā)布代碼)
Phing(php構(gòu)建工具)
PMD(代碼靜態(tài)檢查)
Plot
JDepend
DRY
  • 配置ssh面密碼登錄
    注:發(fā)布機(jī)->jenkins所在的服務(wù)器 生產(chǎn)機(jī)->運(yùn)行項(xiàng)目的服務(wù)器
    在發(fā)布機(jī)生成公私鑰
    ssh-keygen -t rsa
    在/root/.ssh/可以看到兩個(gè)文件
公私鑰
  • 將公鑰發(fā)送到發(fā)布機(jī)
    將發(fā)布機(jī)上的 /root/.ssh/id_rsa.pub 傳送到 生產(chǎn)機(jī)的 .ssh/(目錄沒有.ssh請創(chuàng)建)
    將 id_rsa.pub 改名為 authorized_keys
    測試無密碼鏈接 ssh 生產(chǎn)機(jī)IP
  • 在Jenkins配置ssh源
    系統(tǒng)管理->系統(tǒng)設(shè)置
    在頁面找到Publish over SSH欄
    配置 SSH Servers 如圖:
配置 SSH Servers -1
配置 SSH Servers -2

最后點(diǎn)擊測試 看一下是否成功飞蚓。

  • 在svn的項(xiàng)目的根目錄下創(chuàng)建build.xml
<?xml version="1.0" encoding="UTF-8"?>
    <project name="test-corn" default="build">
        <target name="build" depends="make_runtime,pdepend,phpmd,phpcpd,test,check,test-cron"/>
        <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="tests" />
        <!--####程序的目錄(根據(jù)實(shí)際情況更改)-->
        <fileset id="test-cron.tar.gz" dir="./trunk">
            <include name="Application/**"/>
            <exclude name="Application/Common/Conf/config.php"/>
            <exclude name="Application/Runtime/**"/>
            <include name="Public/**"/>
            <include name="ThinkPHP/**"/>
            <include name="*.php"/>
        </fileset>
        <!--####集成構(gòu)建相關(guān)配置-->
        <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>
        <!--####php代碼規(guī)模分析工具配置-->
        <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>
         <!--####php代碼靜態(tài)檢查工具配置-->
        <target name="phpmd" description="Perform project mess detection using PHPMD">
          <phpmd>
            <fileset dir="${project.basedir}">
              <include name="protected/*.php" />
              <include name="*.php" />
            </fileset>
          </phpmd>
        </target>
        <!--####php代碼分析工具配置-->
        <target name="phpcpd" description="Find duplicate code using PHPCPD">
            <phpcpd>
                <fileset dir="${project.basedir}">
                    <include name="*.php" />
                </fileset>
                 <formatter type="pmd" outfile="pmd-cpd.xml"/>
            </phpcpd>
        </target>
        <!--####php單例測試配置-->
        <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>
        <!--####構(gòu)建參數(shù)配置-->
        <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>
        <!--####構(gòu)建參數(shù)配置-->
        <target name="test-cron" 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="test-cron.tar.gz"/>
            </tar>
        </target>
</project>

創(chuàng)建項(xiàng)目

  • 在首頁->新建->構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目


    創(chuàng)建項(xiàng)目
  • 配置SVN


    配置SVN
  • 配置構(gòu)建觸發(fā)的條件 默認(rèn)是手動構(gòu)建


    觸發(fā)條件

Build after other projects are built:在其他項(xiàng)目觸發(fā)的時(shí)候觸發(fā),里面有分為三種情況吨拍,也就是其他項(xiàng)目構(gòu)建成功枣宫、失敗婆誓、或者不穩(wěn)定(這個(gè)不穩(wěn)定我這里還木有理解)時(shí)候觸發(fā)項(xiàng)目
Poll SCM:定時(shí)檢查源碼變更(根據(jù)SCM軟件的版本號),如果有更新就checkout最新code下來也颤,然后執(zhí)行構(gòu)建動作洋幻。我的配置如下:
*/5 * * * * (每5分鐘檢查一次源碼變化)
Build periodically:周期進(jìn)行項(xiàng)目構(gòu)建(它不care源碼是否發(fā)生變化),我的配置如下:
0 2 * * * (每天2:00 必須build一次源碼)

  • php使用Phing拖拽構(gòu)建


    php使用Phing拖拽構(gòu)建-1

    php使用Phing拖拽構(gòu)建-2
  • 設(shè)置構(gòu)建完成后的操作(文檔保存和ssh部署)
構(gòu)建完成后的操作-1
構(gòu)建完成后的操作-2
構(gòu)建完成后的操作-3

最后保存回到主頁點(diǎn)擊構(gòu)建 測試部署翅娶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末文留,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竭沫,更是在濱河造成了極大的恐慌燥翅,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜕提,死亡現(xiàn)場離奇詭異森书,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門凛膏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杨名,“玉大人,你說我怎么就攤上這事猖毫√ǖ” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵吁断,是天一觀的道長趁蕊。 經(jīng)常有香客問我,道長胯府,這世上最難降的妖魔是什么介衔? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任恨胚,我火速辦了婚禮骂因,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赃泡。我一直安慰自己寒波,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布升熊。 她就那樣靜靜地躺著俄烁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪级野。 梳的紋絲不亂的頭發(fā)上页屠,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機(jī)與錄音蓖柔,去河邊找鬼辰企。 笑死,一個(gè)胖子當(dāng)著我的面吹牛况鸣,可吹牛的內(nèi)容都是我干的牢贸。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼镐捧,長吁一口氣:“原來是場噩夢啊……” “哼潜索!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起懂酱,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤竹习,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后列牺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體由驹,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔓榄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片并炮。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖甥郑,靈堂內(nèi)的尸體忽然破棺而出逃魄,到底是詐尸還是另有隱情,我是刑警寧澤澜搅,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布伍俘,位于F島的核電站,受9級特大地震影響勉躺,放射性物質(zhì)發(fā)生泄漏癌瘾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一饵溅、第九天 我趴在偏房一處隱蔽的房頂上張望妨退。 院中可真熱鬧,春花似錦蜕企、人聲如沸咬荷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幸乒。三九已至,卻和暖如春唇牧,著一層夾襖步出監(jiān)牢的瞬間罕扎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工丐重, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腔召,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓弥臼,卻偏偏與公主長得像宴咧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子径缅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容