Jenkins自動(dòng)化部署PHP項(xiàng)目的操作流程
在傳統(tǒng) PHP 項(xiàng)目開發(fā)中,每次更新代碼都需要手動(dòng)上傳文件、重啟服務(wù)、配置環(huán)境,不僅效率低,還容易出現(xiàn)人為失誤。Jenkins 自動(dòng)化部署可以完美解決這個(gè)問題:代碼提交后自動(dòng)拉取、構(gòu)建、部署,全程零人工干預(yù),一鍵上線項(xiàng)目。
本篇教程從 0 到 1,帶你搭建 Jenkins + PHP 項(xiàng)目的自動(dòng)化部署流程,適用于 Laravel、ThinkPHP、原生 PHP 等所有 PHP 項(xiàng)目。
一、前置準(zhǔn)備
1. 環(huán)境要求
- 一臺(tái) Linux 服務(wù)器(CentOS 7+/Ubuntu 20+ 均可)
- 已安裝 PHP、Nginx、Git(PHP 項(xiàng)目運(yùn)行環(huán)境)
- 服務(wù)器開放 8080 端口(Jenkins 默認(rèn)端口)
- 一個(gè)代碼倉(cāng)庫(kù)(Gitee/GitHub/GitLab 都支持)
2. 核心流程
本教程最終實(shí)現(xiàn)的自動(dòng)化流程:
本地提交代碼 → 代碼倉(cāng)庫(kù) → Jenkins 自動(dòng)觸發(fā)拉取 → 自動(dòng)部署到服務(wù)器 Nginx 目錄 → 完成上線
二、安裝并初始化 Jenkins
1. 安裝 Jenkins
Jenkins 依賴 Java 環(huán)境,先安裝 JDK:
# 安裝 OpenJDK 11 yum install -y java-11-openjdk-devel # CentOS # apt install -y openjdk-11-jdk # Ubuntu
添加 Jenkins 源并安裝:
# 導(dǎo)入 Jenkins 密鑰 wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key # 安裝 Jenkins yum install -y jenkins
2. 啟動(dòng) Jenkins
# 設(shè)置開機(jī)自啟 systemctl enable jenkins # 啟動(dòng)服務(wù) systemctl start jenkins # 查看狀態(tài) systemctl status jenkins
3. 初始化 Jenkins
瀏覽器訪問:http://服務(wù)器IP:8080,首次打開需要輸入管理員密碼。
獲取密碼命令:
cat /var/lib/jenkins/secrets/initialAdminPassword
- 選擇安裝推薦的插件(等待自動(dòng)安裝完成)
- 創(chuàng)建管理員賬號(hào)(記住賬號(hào)密碼,后續(xù)登錄使用)
- 完成初始化,進(jìn)入 Jenkins 控制臺(tái)
三、Jenkins 必備插件安裝
部署 PHP 項(xiàng)目需要 2 個(gè)核心插件,在 Jenkins 后臺(tái)安裝:
- 進(jìn)入:Dashboard → 系統(tǒng)管理 → 插件管理 → 可用插件
- 搜索并安裝:
- Git Plugin(拉取代碼,默認(rèn)已裝)
- Publish Over SSH(遠(yuǎn)程發(fā)送文件到部署目錄)
安裝完成后重啟 Jenkins:
systemctl restart jenkins
四、配置 Jenkins 服務(wù)器免密登錄(關(guān)鍵)
Jenkins 需要免密權(quán)限將代碼部署到 PHP 項(xiàng)目目錄,我們配置 SSH 免密登錄。
1. 生成 Jenkins 密鑰
# 切換到 jenkins 用戶 su - jenkins -s /bin/bash # 生成密鑰(一路回車,不要設(shè)置密碼) ssh-keygen -t rsa
2. 查看公鑰
cat ~/.ssh/id_rsa.pub
3. 將公鑰添加到服務(wù)器授權(quán)
# 將公鑰寫入 authorized_keys,實(shí)現(xiàn)免密 echo "上面復(fù)制的公鑰內(nèi)容" >> ~/.ssh/authorized_keys # 設(shè)置權(quán)限(必須,否則免密失效) chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh
五、配置 Jenkins 遠(yuǎn)程 SSH 連接
- 進(jìn)入:系統(tǒng)管理 → 系統(tǒng)配置
- 找到 Publish Over SSH 配置項(xiàng):
- SSH Server 名稱:自定義(如 PHP-Server)
- Hostname:服務(wù)器內(nèi)網(wǎng) IP / 公網(wǎng) IP
- Username:服務(wù)器登錄用戶名(如 root)
- Remote Directory:PHP 項(xiàng)目部署根目錄(如
/www/wwwroot/)
- 點(diǎn)擊 Test Configuration,顯示
Success即配置成功。
六、創(chuàng)建 PHP 項(xiàng)目自動(dòng)化部署任務(wù)
1. 新建任務(wù)
- 進(jìn)入 Jenkins 控制臺(tái) → 新建任務(wù)
- 任務(wù)名稱:
PHP-Deploy - 選擇:構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目 → 確定
2. 配置代碼倉(cāng)庫(kù)
在 源碼管理 中選擇 Git:
- Repository URL:你的 PHP 項(xiàng)目 Git 地址(如
https://gitee.com/xxx/php-project.git) - Credentials:添加倉(cāng)庫(kù)賬號(hào)密碼(Gitee/GitHub 賬號(hào))
- 分支:默認(rèn)
*/main或*/master
3. 配置構(gòu)建觸發(fā)器(自動(dòng)部署)
勾選 GitHub hook trigger for GITScm polling(代碼提交自動(dòng)觸發(fā)部署)。
如果是 Gitee/GitLab,配置倉(cāng)庫(kù) WebHook:
- Jenkins 地址:
http://IP:8080/generic-webhook-trigger/invoke - 觸發(fā)條件:
Push 事件
4. 配置構(gòu)建腳本(核心部署命令)
在 構(gòu)建 → 執(zhí)行 Shell 中輸入以下腳本(根據(jù)你的項(xiàng)目修改):
# 1. 進(jìn)入 Jenkins 工作區(qū)(拉取代碼的目錄)
cd ${WORKSPACE}
# 2. 同步代碼到項(xiàng)目部署目錄(/www/wwwroot/你的項(xiàng)目目錄)
rsync -avz --delete --exclude=.git ./ /www/wwwroot/php-project/
# 3. PHP 項(xiàng)目專屬命令(根據(jù)框架選擇)
# ThinkPHP 5/6
cd /www/wwwroot/php-project && chmod -R 755 runtime && chmod -R 755 public
# Laravel
# cd /www/wwwroot/php-project && chmod -R 755 storage && chmod -R 755 bootstrap/cache
# 原生 PHP 無需額外命令
# 4. 設(shè)置目錄權(quán)限(防止 Nginx 無權(quán)限訪問)
chown -R www:www /www/wwwroot/php-project5. 保存配置
至此,自動(dòng)化部署任務(wù)配置完成!
七、測(cè)試自動(dòng)化部署
1. 手動(dòng)觸發(fā)部署
- 進(jìn)入任務(wù) → 立即構(gòu)建
- 查看控制臺(tái)輸出:
Finished: SUCCESS表示部署成功。
2. 自動(dòng)觸發(fā)部署
- 本地修改 PHP 代碼
- 提交并推送到 Git 倉(cāng)庫(kù)
- Jenkins 會(huì)自動(dòng)拉取代碼并部署,無需任何操作。
八、常見問題解決
1. Jenkins 無權(quán)限寫入項(xiàng)目目錄
chown -R jenkins:jenkins /www/wwwroot/ chmod -R 755 /www/wwwroot/
2. 構(gòu)建成功但網(wǎng)頁不更新
- 檢查 Nginx 配置的根目錄是否正確
- 清除瀏覽器緩存 / 重啟 Nginx:
systemctl restart nginx
3. Git 拉取代碼失敗
- 檢查倉(cāng)庫(kù)地址是否正確
- 確認(rèn)賬號(hào)密碼權(quán)限無誤
九、總結(jié)
通過 Jenkins 部署 PHP 項(xiàng)目,我們實(shí)現(xiàn)了:
- 代碼提交自動(dòng)部署,告別手動(dòng)上傳
- 統(tǒng)一部署環(huán)境,避免線上本地不一致
- 一鍵回滾 / 重新部署,運(yùn)維效率提升 90%
以上就是Jenkins自動(dòng)化部署PHP項(xiàng)目的操作流程的詳細(xì)內(nèi)容,更多關(guān)于Jenkins自動(dòng)化部署PHP項(xiàng)目的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
VIM中設(shè)置php自動(dòng)縮進(jìn)為4個(gè)空格的方法詳解
本篇文章是對(duì)VIM中設(shè)置php自動(dòng)縮進(jìn)為4個(gè)空格的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php創(chuàng)建、獲取cookie及基礎(chǔ)要點(diǎn)分析
這篇文章主要介紹了php創(chuàng)建、獲取cookie及基礎(chǔ)要點(diǎn),實(shí)例分析了php操作cookie的技巧,需要的朋友可以參考下2015-01-01
php實(shí)現(xiàn)將數(shù)組轉(zhuǎn)換為XML的方法
這篇文章主要介紹了php實(shí)現(xiàn)將數(shù)組轉(zhuǎn)換為XML的方法,實(shí)例分析了php操作數(shù)組及XML格式文件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
關(guān)于URL最大長(zhǎng)度限制的相關(guān)資料查證
這篇文章主要介紹了關(guān)于URL最大長(zhǎng)度限制的相關(guān)資料查證,這里記錄一下,方便以后使用。2014-12-12
PHP判斷一個(gè)數(shù)組是另一個(gè)數(shù)組子集的方法詳解
這篇文章主要介紹了PHP判斷一個(gè)數(shù)組是另一個(gè)數(shù)組子集的方法,結(jié)合實(shí)例形式分析了php循環(huán)遍歷、array_diff及array_intersect函數(shù)等方法實(shí)現(xiàn)數(shù)組子集判斷的相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
php多進(jìn)程模擬并發(fā)事務(wù)產(chǎn)生的問題小結(jié)
這篇文章主要給大家介紹了關(guān)于php多進(jìn)程模擬并發(fā)事務(wù)產(chǎn)生的問題,文中通過示例代碼介紹的非常想吃詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
php.ini save_handler 修改不生效的解決辦法
這篇文章主要介紹了php.ini save_handler 修改不生效的解決辦法,需要的朋友可以參考下2014-07-07

