2012-10-23 66 views
14

我有一個PHP項目,我通過Composer加載包。我還使用Jenkins在專用的CI服務器上運行Continious Integration。 Jenkins每隔一小時查詢一次,如果有的話,如果執行測試運行,則查詢我的存儲庫。使用作曲家的持續集成

testrun的第一步是使用Phing對庫進行全新檢出,並執行應用程序的構建。一個構建的步驟正在執行

composer install 

由於詹金斯總是用新鮮的結賬工作,作曲家總是會獲取每個測試運行的所有程序包,即使沒有包已經在上次運行改變。這有幾個缺點:

  • 這需要relativally很長時間才能完成試運行(作曲需要例如Zend框架,這是相當大的
  • 它把不必要的應變packagist服務器上獲取,如果新的軟件包被取每小時
  • 如果由於某種原因,作曲家安裝失敗,所以做我的試運行。

我在想可能是存儲該作曲家在一箇中央點取包CI服務器,所以詹金斯將能夠訪問在每個測試運行的位置打包。當然,現在我必須重寫部分應用程序來處理供應商文件夾位於CI服務器上時位於不同位置的事實。其次,我必須告訴詹金斯跟蹤composer.lock文件的變化,以確定他是否需要運行作曲家。恐怕這兩件事都不是微不足道的。

有沒有人有任何其他/更好的方法來做到這一點的建議,或者是在每次測試運行中通過作曲者獲取所有軟件包的最佳選擇。粗略地說,這是確保你始終使用正確軟件包的最好方法,但這種做法有點像浪費帶寬,當然在開發的後期階段,軟件包列表幾乎不會改變。

回答

4

您可以做的一件事是將供應商存儲在jenkins中項目工作區之外的位置,以使其保持在構建之間。您不一定需要更改您的應用程序。只需更新構建腳本,以便它創建一個供應商位置的符號鏈接。

我使用capifony進行部署,並使用it uses this approach讓供應商保持發佈。

+0

吧,這樣我只需要確保,在構建過程中,composer.lock文件複製到該位置,並執行作曲家安裝以檢查新軟件包。我可能確實能夠在構建文件中僅使用環境開關 –

5

加速它的一種方法是使用composer install --prefer-dist即使對於dev軟件包也只能下載zip文件。由於它跳過項目的整個歷史,因此這是獨特構建的首選。

至於備用包裝商,不要太擔心,每次構建一個小時不會造成巨大的差異,與每次提交時構建在travis上的所有開源庫相比,都不會有太大的區別。

0

有一點需要注意的是,Composer會緩存它下載的軟件包。所以一旦他們第一次下載,他們應該工作,即使Packagist關閉(不是100%確定),並且網絡帶寬可以省去(100%肯定)。

第二件事是:你爲什麼要通過重新檢查存儲庫來運行測試?完全有可能在Jenkins的工作區保留代碼的副本,並確保在每次運行緩存,日誌和其他工件時進行測試。這不僅會加快作曲家的安裝速度,還會加速git的速度,尤其是對於大型回放!注意:對於我們自己的Jenkins平臺,工作區在測試之間沒有進行清理,我們在作曲家中發現的主要缺點是在每個工作空間中擁有完整的供應商目錄所帶來的巨大磁盤空間。我嘗試通過使用符號鏈接和共享供應商(基於composer.lock的哈希值命名)來解決此問題,但隨後composer自動加載器在查找從哪裏加載類時遇到了一些問題...

0

安裝zf2對詹金斯 的mkdir /路徑/到/你/項目 1.項目安裝作曲家

curl -sS https://getcomposer.org/installer | php 
mv composer.phar /usr/local/bin/composer 

注:如果上述失敗,因爲權限,使用sudo再次運行中壓線。 快速複製粘貼的版本包括須藤:

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer 
  • 在項目中創建的根目錄中的文件composer.json添加 所有你需要

    的pacakages

    { 「名稱」: 「amarjitsingh」, 「描述」: 「amarjitsingh」, 「許可證」: 「BSD -3-條款」, 「關鍵字」:[ 「框架」, 「ZF2」 ] , 「homepage」:「http://domain.com/」, 「require」:{ 「php」:「> = 5.5」, 「zendframework/zendframework」:「〜2.5」, 「phpoffice/phpword」:「dev-master」 , 「doctrine/doctrine-orm-module」:「0.7.0」, 「imag/Imagine」:「0.5。*」, 「zf-commons/zfc-user」:「dev-master」 } 「自動加載」:{ 「psr.0」: 「/模塊」 }

    }

  • 運行 'composer install' 安裝這些軟件包。

  • 設置git的機器 上,如果你正在使用Ubuntu,你可以使用如下因素命令

    sudo易於得到更新 命令和apt-get安裝的git

  • 設置設置GIT最多的Git

    git config --global user.name "Your Name" 
    git config --global user.email "[email protected]" 
    

    檢查的配置列表

    git config --list 
    

    一旦你已經安裝GIT則c

    cd /path/to/your/project 
    

    。一旦你安裝了打包文件,在打印文件 root中創建一個'.gitignore'文件,並在其中添加'vendor'

    git init 
    git remote add origin https://[email protected]/username/zf2ci.git 
    

    適用以下命令使用雲您可以使用AWS來添加,提交和推文件

    git add . 
    git commit -m 'Initial commit with contributors' 
    git push -u origin master 
    git pull 
    

    。我使用數字海洋

    1創建droplet 2.name它如你所願,在mycase是zf2ci 3.選擇軟件包 4.選擇OS我CAS EIS的Ubuntu 14.04 5.在應用程序選項卡選擇LAMP 6完成後,您將獲得IP地址,用戶名和密碼。 7.登錄的IP通過使用油灰 8.用戶root 9.密碼pass 10.一旦你進入它會提示決定是否改變密碼 11.轉到Web根例如/var/www/html 12.安裝GIT 13. apt-get install git 14.克隆回購 15. git clone https://[email protected]/username/zf2ci.git 16.在該機器上安裝作曲家

    curl -sS https://getcomposer.org/installer | php 
    mv composer.phar /usr/local/bin/composer 
    

    注意:如果上述失敗由於權限,與須藤再次運行中壓線。 快速複製粘貼的版本包括須藤:

    curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer 
    
  • 轉到應用程序路徑/var/ww/html/zf2ci
  • 運行「composer install --no-dev」我們沒有開發選項becuasae我們只安裝以及安裝它應用程序服務器上測試代碼
  • 第三步

    創建詹金斯服務器 1.設置另外的液滴爲詹金斯 2.圖像Ubuntu的 3.安裝燈泡 安裝Jenkns

    安裝詹金斯 之前,我們可以安裝詹金斯,我們必須重點和源列表添加到貼切。這分兩步完成,首先我們將添加密鑰。

    1.1

    wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | apt-key add - 
    

    其次,我們將創建一個詹金斯源列表。現在

    1.2

    echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list 
    

    1.3 ,我們只需要更新APT的緩存之前,我們就可以安裝詹金斯。

    apt-get update 
    

    1.4 作爲緩存已經更新,我們可以繼續安裝詹金斯。請注意,Jenkins有大量的依賴關係,因此可能需要一些時間來安裝它們。

    apt-get install jenkins 
    

    1。5打開與端口8080 如http://127.0.0.1:8080

    1.6 IP安裝git的詹金斯服務器上

    sudo apt-get update 
    sudo apt-get install git 
    

    1.7安裝作曲家

    curl -sS https://getcomposer.org/installer | php 
    mv composer.phar /usr/local/bin/composer 
    

    1.8使用戶認證

    1.9 enable bitbucket plugin詹金斯 1.9.1 Manage Jenkins->Manage Plugins->Bitbucket Plugin->download並安裝 1.9.2 創造就業 創建求職> 項目名稱(例如。 zf2ci) - > 源代碼管理(git)提供ssh url([email protected]:username/zf2ci.git) - > 分支到內置(*/master)這是每次任何用戶提交併合併代碼的主分支的分支-Jenkins被調用

    1.9.3 構建觸發 選擇的選項(建當chnage推),這將炒鍋時,我們就有點桶一個POST鉤

    1.9.4 建設 - >執行shell

    composer install 
    ./vendor/bin/phpunit ./tests 
    

    個我們的測試坐在intests DIR

    1.9.5 設置ssh key pair

    登錄詹金斯Serevr通過膩子

    su jenkins 
        cd 
        ls -la(check what is in the jenkins home directory) 
        ssh-kegen -t rsa (dsa by default but choose rsa key ,it is faster) 
        press enter(on path) 
        press enter(leave the pass phrase empty , the whole point here is to avoid passwords in the automated jobs) 
        pres enter 
    
    
    
    cd .ssh 
    

    ls -la(你會發現id_rsa.pub)文件中有

    cat id_rsa.pub 
    

    (選擇所有和複製文件的內容)

    1.9.6 轉到到位桶 開關回購zf2ci 轉到設置 點擊部署鍵 - >添加關鍵 添加標籤(詹金斯) 鍵*(粘貼id_rsa.pub的內容)的文件在這裏 保存鍵

    summary 
    `zf2ci->settings->deployment keys->add key->type` label and paste id_rsa.pub key->save 
    

    1.9.7 寄存器POST鉤回購

    Settings-> 
    Integrations-> 
    Hooks-> 
    POST(search for POST Hook)-> 
    Add the url /IP of the Jenkins Server) (`172.62.235.100:8080/bitbucket-hook/`) 
    (the body of the post contanis information about the repository, branch, list of recent commits, user) 
    

    1.9.8 登錄詹金斯服務器上詹金斯 1.9

    su jenkinks 
        cd 
        cd .ssh 
        git ls-remote -h ssh://[email protected]:username/zf2ci.git HEAD 
    

    1.9.9 save項目。10 在 添加下面的命令執行殼 - >命令 [rsync -y -vrzhe "ssh -o StrictMostKeyChecking=no" --exclude vendor/ . [email protected]:/var/www/html/zf2ci(應用服務器)

    ssh [email protected]<<EOF 
        cd /var/www/html/zf2ci 
        composer install --no-dev 
        EOF