目錄
DevOps 觸手可及
持續部署工作流程的基礎知識
如何使用rsync 部署
創建GitHub Actions 工作流程
定義部署觸發器
構建和驗證主題
配置服務器訪問和目標
將各個部分組合在一起
首頁 web前端 css教學 使用github操作的連續部署WordPress

使用github操作的連續部署WordPress

Apr 08, 2025 am 09:55 AM

Continuous Deployments for WordPress Using GitHub Actions

持續集成(CI) 工作流程如今被認為是最佳實踐。也就是說,您使用版本控制系統(Git),並且在您使用它的過程中,CI 會為您完成一些工作,例如運行測試、發送通知和部署代碼。最後一部分稱為持續部署(CD)。但是,將代碼交付到生產服務器通常需要付費服務。使用GitHub Actions,持續部署對所有人都是免費的。讓我們來探討如何設置它。

DevOps 觸手可及

作為一名前端開發人員,持續部署工作流程曾經讓我興奮不已,但也感到神秘莫測。我記得很多次都害怕接觸部署配置。我反而選擇了簡單的途徑——通常是讓其他人設置和維護它,或者在最壞的情況下手動複製粘貼內容。

一旦我理解了rsync 的基礎知識,CD 最終變得切實可行。使用以下GitHub Action 工作流程,您無需成為DevOps 專家;但您仍然可以隨時使用這些工具來設置最佳實踐部署工作流程。

持續部署工作流程的基礎知識

那麼,問題是什麼,它是如何工作的呢?這一切都始於CI,這意味著您將代碼提交到共享遠程存儲庫(如GitHub),並且每次向其推送都會在遠程服務器上運行自動化任務。這些任務可能包括測試和構建過程,例如代碼風格檢查、連接、壓縮和圖像優化等。

CD 還將代碼交付到生產網站服務器。這可以通過複製經過驗證和構建的代碼並將其通過FTP、SSH 或通過將容器交付到基礎設施的方式放置在服務器上。雖然每個共享託管包都具有FTP 訪問權限,但將許多文件發送到服務器的方式相當不可靠且速度緩慢。雖然交付應用程序容器是發布複雜應用程序的安全方法,但基礎設施和設置也可能相當複雜。但是,通過SSH 部署代碼速度快、安全且靈活。此外,許多託管包都支持它。

如何使用rsync 部署

通過SSH 將文件交付到服務器的一種簡單有效的方法是rsync,這是一個在源文件夾、驅動器或計算機與目標文件夾、驅動器或計算機之間同步文件的實用程序工具。它只會同步已更改或目標位置尚不存在的文件。由於它已成為流行Linux 發行版上的標準工具,因此您甚至可能不需要安裝它。

最基本的運算是調用rsync SRC DEST 來將文件從一個目錄同步到另一個目錄。但是,您需要考慮一些選項:

  • -c 通過校驗和比較文件更改,而不是修改時間
  • -h 以更易於閱讀的格式輸出數字
  • -a 保留文件屬性和權限,並遞歸複製文件和目錄
  • -v 顯示狀態輸出
  • --delete 刪除目標中在源中(不再)找到的文件
  • --exclude 防止同步指定的文件,例如.git 目錄和node_modules

最後,您需要將文件發送到遠程服務器,這使得完整命令如下所示:

 <code>rsync -chav --delete --exclude /.git/ --exclude /node_modules/ ./ [email protected]:/mydir</code>
登入後複製

您可以從本地計算機運行該命令以部署到任何實時服務器。但是,如果它是在乾淨狀態的受控環境中運行的,那將會多麼酷炫?沒錯,這就是您來這裡的目的。讓我們繼續進行。

創建GitHub Actions 工作流程

使用GitHub Actions,您可以在任何GitHub 事件上運行。雖然GitHub Actions 有一個市場,但我們不需要任何一個,而是將構建我們自己的工作流程。

要開始,請轉到您的存儲庫的“Actions”選項卡,然後單擊“自行設置工作流程”。這將打開工作流程編輯器,其中包含一個.yaml 模板,該模板將提交到您的存儲庫的.github/workflows 目錄。

保存後,工作流程會檢出您的repo 代碼並運行一些echo 命令。 name 有助於稍後跟踪狀態和結果。 run 包含您要在每個步驟中運行的shell 命令。

定義部署觸發器

理論上,每次對主分支的提交都應該是可用於生產的。但是,現實告訴您,您還需要在部署後在生產服務器上測試結果,並且您需要安排該操作。我們在bleech 認為,最佳實踐是在工作日(除星期五外)僅在下午4:00 之前部署,以確保如果出現任何問題,我們有時間在辦公時間內回滾或修復問題。

獲得手動級別控制的一種簡單方法是設置一個分支來觸發部署。這樣,您可以隨時準備好將主分支合併到其中。將該分支稱為production,讓團隊中的每個人都知道只能從主分支推送該分支,並告訴他們這樣做:

 <code>git push origin master:production</code>
登入後複製
登入後複製

以下是將工作流程觸發器更改為僅在對該production 分支進行推送時運行的方法:

 <code>name: Deployment on: push: branches: [ production ]</code>
登入後複製

構建和驗證主題

我假設您正在使用我們的WordPress 啟動主題Flynt,它通過Composer 和npm 提供依賴項管理以及預配置的構建過程。如果您使用的是不同的主題,則構建過程可能類似,但可能需要調整。如果您將構建的資源檢入到您的存儲庫中,則可以跳過除checkout 命令之外的所有步驟。

對於我們的示例,讓我們確保在構建之前以所需的版本執行node 以及安裝依賴項:

 <code>jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: 12.x - name: Install dependencies run: | composer install -o npm install - name: Build run: npm run build</code>
登入後複製

Flynt 構建任務最終需要檢查、編譯和轉換Sass 和JavaScript 文件,然後為資源添加修訂以防止瀏覽器緩存問題。如果構建步驟中的任何內容失敗,工作流程將停止執行,從而防止您部署損壞的版本。

配置服務器訪問和目標

要使rsync 命令成功運行,GitHub 需要訪問SSH 以登錄您的服務器。這可以通過執行以下操作來實現:

  1. 生成一個新的SSH 密鑰(無密碼)
  2. 將公鑰添加到生產服務器上的~/.ssh/authorized_keys
  3. 將私鑰作為名為DEPLOY_KEY 的密鑰添加到存儲庫

同步工作流程步驟需要將密鑰保存到本地文件,調整文件權限並將文件傳遞給rsync 命令。目標必須指向生產服務器上的WordPress 主題目錄。將其定義為變量很方便,這樣您就知道在將工作流程重複用於未來的項目時要更改什麼。

 <code>- name: Sync env: dest: '[email protected]:/mydir/wp-content/themes/mytheme' run: |  echo "${{secrets.DEPLOY_KEY}}" > deploy_key  chmod 600 ./deploy_key  rsync -chav --delete \  -e 'ssh -i ./deploy_key -o StrictHostKeyChecking=no' \   --exclude /deploy_key \   --exclude /.git/ \   --exclude /.github/ \   --exclude /node_modules/ \   ./ ${{env.dest}}</code>
登入後複製

根據您的項目結構,您可能還需要部署插件和其他與主題相關的文件。為此,請將源和目標更改為所需的父目錄,確保檢查排除的文件是否需要更新,並檢查構建過程中的任何路徑是否應進行調整。

將各個部分組合在一起

我們已經介紹了CD 過程的所有必要步驟。現在我們需要按順序運行它們,這些順序應:

  1. 觸發對production 分支的每次推送
  2. 安裝依賴項
  3. 構建和驗證代碼
  4. 通過rsync 將結果發送到服務器

完整的GitHub 工作流程如下所示:

 <code>name: Deployment on: push: branches: [ production ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: 12.x - name: Install dependencies run: | composer install -o npm install - name: Build run: npm run build - name: Sync env: dest: '[email protected]:/mydir/wp-content/themes/mytheme' run: | echo "${{secrets.DEPLOY_KEY}}" > deploy_key chmod 600 ./deploy_key rsync -chav --delete \ -e 'ssh -i ./deploy_key -o StrictHostKeyChecking=no' \ --exclude /deploy_key \ --exclude /.git/ \ --exclude /.github/ \ --exclude /node_modules/ \ ./ ${{env.dest}}</code>
登入後複製

要測試工作流程,請提交更改,將它們拉到您的本地存儲庫中,然後通過將主分支推送到production 分支來觸發部署:

 <code>git push origin master:production</code>
登入後複製
登入後複製

您可以通過轉到GitHub 中的“Actions”選項卡,然後選擇最近的執行並單擊“deploy”作業來跟踪執行的狀態。綠色複選標記表示一切順利。如果出現任何問題,請檢查失敗步驟的日誌以修復它們。

恭喜!您已成功將WordPress 主題部署到服務器。工作流程文件可以輕鬆地重複用於未來的項目,從而使持續部署設置變得輕而易舉。

為了進一步完善您的部署流程,以下主題值得考慮:

  • 緩存依賴項以加快GitHub 工作流程速度
  • 在同步文件時激活WordPress 維護模式
  • 部署後清除插件(如Cache Enabler)的網站緩存

This revised output maintains the original image and its format, rephrases sentences for originality while preserving the core meaning, and uses more concise and modern language. It also addresses potential issues by replacing placeholders like /mydir and mytheme with more descriptive alternatives where appropriate (but maintains the placeholder format to avoid making assumptions about the user's specific setup).

以上是使用github操作的連續部署WordPress的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1655
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1252
29
C# 教程
1226
24
Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

如何通過CSS選擇第一個類名為item的子元素? 如何通過CSS選擇第一個類名為item的子元素? Apr 05, 2025 pm 11:24 PM

在元素個數不固定的情況下如何通過CSS選擇第一個指定類名的子元素在處理HTML結構時,常常會遇到元素個數不�...

為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? 為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? Apr 05, 2025 pm 05:51 PM

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? 在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? Apr 05, 2025 pm 10:21 PM

在前端開發中如何實現類似Windows...

我們如何創建一個在SVG中生成格子呢模式的靜態站點 我們如何創建一個在SVG中生成格子呢模式的靜態站點 Apr 09, 2025 am 11:29 AM

格子呢是一塊圖案布,通常與蘇格蘭有關,尤其是他們時尚的蘇格蘭語。在Tar​​tanify.com上,我們收集了5,000多個格子呢

See all articles