使用 Jenkins 自動化發布 PHP 項目

什么是 Jenkins

Jenkins是一個開源軟件項目,是基于Java開發的一種持續集成工具,用于監控持續重復的工作,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。

方式一:使用 Docker 安裝 Jenkins

避免裝環境的折騰, 直接使用 docker-compose 安裝,具體如何安裝在 Docker 快速搭建 LNMP 環境 已經描述了
docker-compose.yml

jenkins:
  image: jenkins:latest
  ports:
    - "8080:8080"
  volumes:
      - ./jenkins:/var/jenkins_home:rw

注意:volumes 配置 jenkins 目錄映射到本地

docker-compose up -d 
# 等待下載鏡像,創建容器
Creating dnmp_jenkins_1    ... done
# 安裝就這么簡單

方式二:手動安裝

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

在各項目官網,下載 Java、Tomcat、Jenkins

Java: [http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
Tomcat: [http://tomcat.apache.org/download-90.cgi](http://tomcat.apache.org/download-90.cgi)
Jenkins: [https://jenkins.io/](https://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的日志文件

訪問 8080 端口,進入初始化頁面

訪問: http://localhost:8080/
首次打開,需要輸入秘鑰,根據提示,可以在對應的目錄 /jenkins/secrets 找到該文件
設置登錄用戶名密碼后,進入幾分鐘的初始化過程…

img

配置自動化構建發布

配置遠程服務器 SSH

菜單 -> 系統管理 -> 系統設置 -> SSH Servers


img

如圖,是我配置的內容

img

Remote Directory 這個配置很關鍵,表示構建時的相對目錄。這里我配置 “/“
配置完成后,最好 Test Configuration , 返回 Success 就表示成功!

新建發布項目

填寫項目名稱如, test
并選擇項目類型,這里我選擇”自由風格項目”


img

General

選擇對應項目路徑,我使用 GitHub project

img

源碼管理

使用 git 源碼倉庫管理

img

構建

這里是最關鍵的,你可以打包源碼發布到對應的服務器之上

img
- [Source](https://www.centos.bz/tag/source/) files 表示打包好的源文件
- Remote directory 表示你需要將源文件上傳的遠程路徑(這個路徑相對于 SSH 配置目錄)
- Exec [command](https://www.centos.bz/tag/command/) 上傳完成后,執行的命令( hexo g 這個是我發布博客時的構建命令)

立即構建

選擇對應的項目,點擊立即構建

img

在構建執行狀態中,可以點擊 console output 看到構建的過程信息

img

Jenkins 部署 PHP 步驟:代碼拉取>>執行檢查(非必須)>> 打包 >> 遠程或本地部署

本文我們主要來說一下遠程部署
遠程部署首先拉取代碼,我們使用 git 管理代碼。
用 ssh-keygen 生成公鑰和私鑰,git 和 登錄遠程服務器都會用到。
git 倉庫上每個項目都有一個部署公鑰,將生成的公鑰添加到 git 倉庫。
然后創建一個自由風格的 jenkins 部署項目,進入配置。
拉取代碼

選擇 git ,默認會拉取倉庫的 master 分支,點擊 add 添加一個拉取代碼的憑證。

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

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

構建

默認有這些構建選項,本地構建簡單使用 Execute shell 執行 shell 指令。
遠程構建需要新安裝一個插件,在 系統管理-管理插件-可選插件 中搜索 Publish Over SSH 插件并安裝,重啟 Jenkins 以啟用插件。
將本機的公鑰復制到遠程服務器root用戶的 /root/.ssh/authorized_keys 文件中。
然后在 系統管理-系統設置-Publish over SSH

填入私鑰文件地址

增加一個 ssh 服務器配置

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

簡單點可以直接執行 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 這個工具,有興趣可以去了解一下這個工具。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。