用 Jenkins 部署 PHP 應用

麥索發表於2017-02-19

安裝 Jenkins

方式一:docker方式安裝

拉取jenkins官方映象,按照映象文件啟動映象就可以了

方式二:手動安裝

以下所有操作都使用 root 使用者進行操作。

在各專案官網,下載 Java、Tomcat、Jenkins

Java: www.oracle.com/technetwork…
Tomcat: tomcat.apache.org/download-90…
jen
Jenkins: jenkins.io/

所用環境: jdk1.8.0_121 tomcat-9.0.0.M17 jenkins 2.32.2

我把所用的 tar.gz 壓縮包都放在 /opt/ 目錄中,然後解壓到 /usr/local/src 中。

安裝 Java

解壓後的 Java 包預設為 jdk1.8.0_121

配置 Java 環境變數 vim /etc/profile,在其中加入:

#java
JAVA_HOME=/usr/local/src/jdk1.8.0_121 #這行根據實際情況修改
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar複製程式碼

修改完成後使用 source /etc/profile 讓新配置生效。

安裝 Tomcat

解壓後的 Tomcat 包預設為 apache-tomcat-9.0.0.M17

使用 chmod a+x apache-tomcat-9.0.0.M17/bin/*.sh 命令給予 Tomcat 啟動關閉 shell 指令碼可執行許可權。

執行 bin/catalina.sh run 可以從控制檯看到tomcat啟動,以確保 Tomcat 可以正確啟動。

要讓 Tomcat 在後臺執行使用 bin/startup.sh

安裝 Jenkins

將 jenkins 的 .war 包放到 Tomcat 的 webapps 目錄中,執行 bin/startup.sh

然後就可以通過 http://<你的ip地址>/jenkins/ 訪問安裝完畢的 jenkins

然後按照頁面指引完成最後的安裝

Jenkins 外掛

  • Subversion/Git:用於整合專案版本控制軟體,根據需要選擇(在上篇博文已安裝使用)
  • Phing/Ant:使用Phing或Apache Ant 對PHP專案做自動化構建
  • CheckStyle:使用PHP CodeSniffer進行程式碼風格檢查的工具。用於檢查PHP程式碼是否有違反一組預先設定好的編碼標準的一個PEAR包,內建了ZEND,PEAR的編碼風格規則
  • Clover PHP:使用phpunit進行單元測試的工具,可以被xdebug擴充套件用來生成程式碼覆蓋率報告,並且可以與phing整合來自動測試,還可以和Selenium整合來完成大型自動化整合測試
  • DRY:使用PHPCPD(php copy paste detector)來發現專案中的重複程式碼
  • HTML Publisher:用來發布phpunit程式碼覆蓋率報告
  • JDepend:使用PHP Depend分析php中靜態程式碼,用來檢查專案中的程式碼規模和複雜程度
  • Plot:使用phploc來統計php專案規模大小的工具,可以統計php的專案程式碼行數
  • PMD:使用phpmd(php mess dector),對基於pdepend的結果進行分析,一旦專案超過了pdepend中各具體指標的規定,將發出警告資訊.
  • Violations:按照程式碼缺陷嚴重性集中顯示pwd靜態程式碼分析的結果
  • xUnit:使用JUnit的格式來輸出phpunit的日誌檔案

Jenkins 部署 PHP 步驟

程式碼拉取 - 執行檢查(非必須)- 打包 - 遠端或本地部署

部署的方式很多種,jenkins 也提供很多外掛優化部署流程

本文件主要說一下遠端部署

遠端部署首先拉取程式碼,我們使用 git 管理程式碼。

用 ssh-keygen 生成公鑰和私鑰,git 和 登入遠端伺服器都會用到。

git 倉庫上每個專案都有一個部署公鑰,將生成的公鑰新增到 git 倉庫。

然後建立一個自由風格的 jenkins 部署專案,進入配置。

拉取程式碼

用 Jenkins 部署 PHP 應用

選擇 git ,預設會拉取倉庫的 master 分支,點選 add 新增一個拉取程式碼的憑證。

用 Jenkins 部署 PHP 應用

Kind 選 SSH Username with private key
Private key 選擇 From the Jenkins master ~/.ssh (已經使用 ssh-keygen 生成公私鑰)

建立完成後選擇憑證,輸入 git 倉庫的地址,然後就可以儲存後點選立即構建,測試程式碼能不能正確拉取,拉取正確後點選工作空間就可以看見你的程式碼庫中的程式碼了。

構建

用 Jenkins 部署 PHP 應用

預設有這些構建選項,本地構建簡單使用 Execute shell 執行 shell 指令。

遠端構建需要新安裝一個外掛,在 系統管理-管理外掛-可選外掛 中搜尋 Publish Over SSH 外掛並安裝,重啟 Jenkins 以啟用外掛。

將本機的公鑰複製到遠端伺服器root使用者的 /root/.ssh/authorized_keys 檔案中。

然後在 系統管理-系統設定-Publish over SSH

用 Jenkins 部署 PHP 應用

填入私鑰檔案地址

用 Jenkins 部署 PHP 應用

增加一個 ssh 伺服器配置

用 Jenkins 部署 PHP 應用

構建中選擇 Send files or execute commands over SSH

用 Jenkins 部署 PHP 應用

簡單點可以直接執行 shell 指令,到想要部署的專案目錄用 git 直接拉取遠端程式碼,但這樣用 Jenkins 意義真的不是特別大,可以在本機將程式碼打包,然後傳輸到遠端機器,再解壓開到專案目錄。

cd /var/www/web
tar -czf project_`date +%F-%H-%M-%S`.bak.tar.gz --exclude='project/runtime' --exclude='project/.git' /home/www/web/project
tar xzf /var/www/web/project-tar/project.${BUILD_NUMBER}.${BUILD_ID}.tar.gz -C /home/www/web/project
chmod -R 755 /home/www/web/project/
chmod 777 /home/www/web/project/web/assets/
tail -n100 /home/www/web/project/runtime/logs/error.log複製程式碼

以上是一個示例,進行了線上程式碼備份打包、解包新部署包,修改許可權、列印錯誤日誌一系列操作。

構建打包操作是使用的 Phing 這個工具,有興趣可以去了解一下這個工具。

相關文章