如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程
我們 Pantheon 的客座開發人員工具創作者談論如何使用 GitLab CI/CD 自動化 WordPress 部署。

В 萬神殿(Pantheon) 我從事開發人員關係工作,因此我一直在尋找新方法來幫助 WordPress 和 Drupal 開發人員解決工作流程中的自動化問題。 為此,我喜歡嘗試新工具並將它們相互結合以有效地工作。

我經常看到開發人員在單一臨時伺服器上苦苦掙扎。

等待輪到您使用中間伺服器或向客戶端發送帶有註釋的 URL 是一件很愉快的事情:“看這裡,但先不要看這裡。”

多開發環境 - 很酷的 Pantheon 工具之一 - 解決了這個問題,因為使用它們您可以按需為 Git 分支創建環境。 每個多開發環境都有自己的 URL 和資料庫,因此開發人員可以安靜地工作、檢查品質並獲得批准,而無需互相打擾。

但 Pantheon 沒有用於版本控製或持續整合和部署 (CI/CD) 的工具。 但它是一個靈活的平台,您可以整合任何工具。

我還注意到,團隊使用某些工具進行開發,並使用不同的工具進行組裝和部署。

例如,他們有不同的版本控制和 CI/CD 工具。 您必須擺弄並在工具之間切換來編輯程式碼和診斷問題。

GitLab 有一套完整的開發工具:用於版本控制、票證、合併請求、一流的 CI/CD 管道、容器註冊表以及類似的一切。 我還沒有遇到過一個應用程式可以提供如此多的功能來管理您的開發工作流程。

我喜歡自動化,所以我學習如何將 Pantheon 連接到 GitLab,以便將 GitLab 主分支的提交部署到 Pantheon 的主開發環境中。 GitLab 上的合併請求可以建立程式碼並將其部署到 Pantheon 中的多開發環境。

在本教程中,我將引導您了解如何在 GitLab 和 Pantheon 之間建立連接並優化您的 WordPress 和 Drupal 工作流程。

當然有可能, 鏡像 GitLab 儲存庫,但我們會用雙手鑽研一切 亞搏體育app CI 並且將來不僅可以使用此工具進行部署。

介紹

對於這篇文章,您需要了解 Pantheon 將每個網站分為三個元素:程式碼、資料庫和檔案。

程式碼包括 CMS 文件,例如 WordPress 核心、外掛和主題。 這些文件管理在 Git 儲存庫,由 Pantheon 託管,這意味著我們可以使用 Git 將程式碼從 GitLab 部署到 Pantheon。
Pantheon 中的文件是媒體文件,即網站的圖像。 通常它們是由使用者上傳的,Git 會忽略它們。

建立一個免費帳戶,了解更多關於 萬神殿工作流程報名參加示範 在 pantheon.io。

假設

我在 Pantheon 和 GitLab 上的專案叫做 pantheon-gitlab-blog-demo。 項目名稱必須是唯一的。 在這裡,我們將使用 WordPress 網站。 您可以使用 Drupal,但您需要更改一些內容。

我會用 git 命令列你可以在 圖形介面, 如果你想。

創建一個專案

首先,我們來創建 亞搏體育appGitLab項目 (我們稍後會再討論這一點)。

現在 在 Pantheon 上建立 WordPress 網站。 然後我們為網站儀表板安裝 WordPress。

如果您渴望更改某些內容,例如刪除或添加插件,請耐心等待。 該網站尚未連接到 GitLab,我們希望所有程式碼變更都通過 GitLab。

安裝 WordPress 後,返回 Pantheon 網站儀表板並將開發模式變更為 Git。

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

GitLab 上的初始提交

現在您需要將初始 WordPress 程式碼從 Pantheon 網站傳輸到 GitLab。 為此,我們從本地 Pantheon 站點的 Git 儲存庫克隆程式碼,然後將其傳送到 GitLab 儲存庫。

為了讓一切變得更簡單、更安全, 將 SSH 金鑰新增至 Pantheon 每次複製 Pantheon Git 儲存庫時,我們都不必輸入密碼。 同時已經 將 SSH 金鑰新增至 GitLab.

為此,請從網站儀表板上的「使用 Git 複製」欄位複製命令,在本地複製 Pantheon 網站。

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程
如果您需要協助,請閱讀文檔 萬神殿的 Git 入門.

現在讓我們改變一下 git remote origin指向 GitLab 而不是 Pantheon。 可以辦到 командой git remote.

讓我們轉到 GitLab 專案並從專案詳細資料頁面上的「複製」下拉清單中複製儲存庫 URL。 讓我們選擇“Clone with SSH”選項,因為我們已經配置了 SSH 金鑰。

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

默認情況下, git remote 對於程式碼儲存庫的本機副本 - origin。 這可以改變c git remote set-url origin [URL репозитория GitLab],我們輸入實際的 URL,而不是括號。

最後,我們推出 git push origin master --force將 WordPress 程式碼從 Pantheon 推送到 GitLab。

–force 選項僅需要一次。 然後分隊進行 git push 它不會出現在 GitLab 上。

設定憑證和變數

還記得我們如何在本地新增 SSH 金鑰來登入 Pantheon 和 GitLab 嗎? SSH 令牌可用於授權 GitLab 和 Pantheon。

GitLab 擁有優秀的文檔。 讓我們來看看 有關在 GitLab CI/CD 中使用 SSH 金鑰的文件中有關使用 Docker 執行器時的 SSH 金鑰的部分.

我們現在將完成前兩個步驟: 讓我們使用 ssh-keygen 在本地創建一個新的 SSH 金鑰對,並將私鑰作為變數添加到專案中.

然後我們會問 SSH_PRIVATE_KEY 作為 GitLab CI/CD 環境變數 在項目設定中。
在第三步和第四步中我們將建立一個文件 .gitlab-ci.yml 內容如下:

before_script:
  # See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
  - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
  - git config --global user.email "$GITLAB_USER_EMAIL"
  - git config --global user.name "Gitlab CI"

我們先不要提交文件 .gitlab-ci.yml,那麼您需要在其中添加其他內容。

現在我們執行第五步 將您在第一步驟中建立的公鑰新增至您需要在建置環境中存取的服務.

在我們的例子中,我們希望從 GitLab 訪問 Pantheon。 我們遵循 Pantheon 文件中的說明 向 Pantheon 新增 SSH 金鑰 並執行此步驟。

請記住:私有 SSH 在 GitLab 中,開放 SSH 在 Pantheon 中。

讓我們再設定一些環境變數。 第一個稱為 PANTHEON_SITE。 它的值是您電腦上的 Pantheon 網站的名稱。

電腦上的名稱列在使用 Git 克隆指令的末端。 您已經在本地克隆了該站點,因此這將是本地存儲庫目錄的名稱。

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

接下來我們來設定環境變數 PANTHEON_GIT_URL。 這是我們已經使用過的 Pantheon 網站的 Git 儲存庫 URL。

僅輸入 SSH 儲存庫 URL,不輸入 git clone 以及最後機器上的站台名稱。

唷。 完成了,現在我們可以完成我們的文件了 .gitlab-ci.yml.

建立部署任務

我們最初使用 GitLab CI 所做的事情與我們過去使用 Git 儲存庫所做的事情非常相似。 但這次,我們將 Pantheon 儲存庫新增為第二個遠端 Git 來源,然後將程式碼從 GitLab 推送到 Pantheon。

為此,我們需要配置 階段 deploy и 任務 deploy:dev,因為我們將部署到Pantheon上的開發環境。 產生的文件 .gitlab-ci.yml 看起來像這樣:

stages:
- deploy

before_script:
  # See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
  - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
  - git config --global user.email "$GITLAB_USER_EMAIL"
  - git config --global user.name "Gitlab CI"

deploy:dev:
  stage: deploy
  environment:
    name: dev
    url: https://dev-$PANTHEON_SITE.pantheonsite.io/
  script:
    - git remote add pantheon $PANTHEON_GIT_URL
    - git push pantheon master --force
  only:
    - master

變量 SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL 應該看起來很熟悉 - 我們之前設定了這些環境變數。 有了這些變量,我們就可以使用文件中的值 .gitlab-ci.yml 多次更新,並且只需要在一個地方更新。

最後新增、提交並發送文件 .gitlab-ci.yml 在 GitLab 上。

檢查部署情況

如果我們做的一切正確的話,任務 deploy:dev 將在 GitLab CI/CD 中成功運行並提交提交 .gitlab-ci.yml 在萬神殿。 我們來看看吧。

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

向 Pantheon 發送合併請求線程

在這裡我們將使用我最喜歡的萬神殿功能 - 多開發,您可以根據需要為 Git 分支創建額外的 Pantheon 環境。

對多重開發的存取受到限制,所以本節可以跳過。 但如果您有存取權限,您可以透過 GitLab 合併請求在 Pantheon 上自動建立多開發環境,從而顯著提高工作效率。

首先讓我們在本地創建一個新的 Git 分支 git checkout -b multidev-support。 現在讓我們再次更改一些內容 .gitlab-ci.yml.

我喜歡在 Pantheon 環境名稱中包含合併請求編號。 例如,第一個合併請求是 mr-1, 第二 - mr-2 等等。

合併請求發生變化,因此我們需要動態確定 Pantheon 分支名稱。 在 GitLab 上很簡單 - 你只需要使用 預定義環境變數.

我們可以採取 $CI_MERGE_REQUEST_IID指定合併請求編號。 讓我們將所有這些與我們之前指定的全域環境變數一起應用,並在檔案末尾新增一個新的部署:multidev 任務 .gitlab-ci.yml.

deploy:multidev:
  stage: deploy
  environment:
    name: multidev/mr-$CI_MERGE_REQUEST_IID
    url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
  script:
    # Checkout the merge request source branch
    - git checkout $CI_COMMIT_REF_NAME
    # Add the Pantheon git repository as an additional remote
    - git remote add pantheon $PANTHEON_GIT_URL
    # Push the merge request source branch to Pantheon
    - git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
  only:
    - merge_requests

這將類似於我們的任務 deploy:dev,僅將分支發送到萬神殿,而不發送到 master.

我們已經添加並提交了更新的文件 .gitlab-ci.yml,現在讓我們將一個新分支推送到 GitLab git push -u origin multidev-support.

現在讓我們從分支建立一個新的合併請求 multidev-support建立合併請求.

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

建立合併請求後,我們看看 CI/CD 任務是如何執行的 deploy:multidev.

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

看,一個新線程已發送到萬神殿。 但是,如果我們前往 Pantheon 網站儀表板上的 multidev 部分,我們將不會在那裡看到新環境

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

讓我們來看看 Git 分支部分。

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

結果,我們的線程 mr-1 到了萬神殿。 讓我們從分支創建一個環境 mr-1.

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

我們已經創建了一個多開發環境,現在讓我們回到GitLab看看該部分 營運 > 環境。 我們將看到以下條目 dev и mr-1.

這是因為我們新增了一個條目 environment 有名字 name и url 進入 CI/CD 任務。 如果點擊開啟環境圖標,我們將轉到 Pantheon 上的多開發環境的 URL。

自動建立 multidev

原則上,您可以停在這裡,只需記住為每個合併請求建立一個多開發環境,但此過程可以自動化。

Pantheon 有一個命令列工具 總站,您可以在其中自動使用該平台。 Terminus 讓您可以從命令列創建多開發環境 - 非常適合 亞搏體育app CI.

我們需要一個新的合併請求來測試這一點。 讓我們使用以下命令建立一個新分支 git checkout -b auto-multidev-creation.

要在 GitLab CI/CD 任務中使用 Terminus,您需要一個用於透過 Terminus 進行身份驗證的機器代幣以及一個帶有 Terminus 的容器映像。

創建 Pantheon 機器令牌,將其保存在安全的地方,並將其添加為 GitLab 中的全域環境變量,名稱為 PANTHEON_MACHINE_TOKEN.

如果您忘記如何新增 GitLab 環境變量,請回到我們定義的位置 PANTHEON_SITE.

使用 Terminus 建立 Dockerfile

如果你不使用 Docker 或不喜歡文件 Dockerfile,拍攝我的影像 registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest 並跳過本節。

GitLab 有容器註冊表,我們可以在其中為我們的專案建置並放置 Dockerfile。 讓我們使用 Terminus 建立一個 Dockerfile 以與 Pantheon 一起使用。

Terminus 是 PHP 命令列工具,所以讓我們從 PHP 鏡像開始。 我透過 Composer 安裝 Terminus,所以我將使用 官方 Docker Composer 映像。 我們創造 Dockerfile 在本機儲存庫目錄中包含以下內容:

# Use the official Composer image as a parent image
FROM composer:1.8

# Update/upgrade apk
RUN apk update
RUN apk upgrade

# Make the Terminus directory
RUN mkdir -p /usr/local/share/terminus

# Install Terminus 2.x with Composer
RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"

請按照 部分中的組裝和發送圖像的說明進行操作 建置並推送鏡像 в 容器註冊表文檔收集影像 Dockerfile 並將其推送到 GitLab。

打開部分 註冊表 在 GitLab 專案中。 如果一切按計劃進行,我們的形象就會在那裡。 寫下圖像標籤的連結 - 我們需要它作為文件 .gitlab-ci.yml.

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

章節 script 在問題中 deploy:multidev 開始增長,所以讓我們將其移動到單獨的文件中。 建立一個新文件 private/multidev-deploy.sh:

#!/bin/bash

# Store the mr- environment name
export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID

# Authenticate with Terminus
terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN

# Checkout the merge request source branch
git checkout $CI_COMMIT_REF_NAME

# Add the Pantheon Git repository as an additional remote
git remote add pantheon $PANTHEON_GIT_URL

# Push the merge request source branch to Pantheon
git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force

# Create a function for determining if a multidev exists
TERMINUS_DOES_MULTIDEV_EXIST()
{
    # Stash a list of Pantheon multidev environments
    PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)"

    while read -r multiDev; do
        if [[ "${multiDev}" == "$1" ]]
        then
            return 0;
        fi
    done <<< "$PANTHEON_MULTIDEV_LIST"

    return 1;
}

# If the mutltidev doesn't exist
if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV
then
    # Create it with Terminus
    echo "No multidev for $PANTHEON_ENV found, creating one..."
    terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV
else
    echo "The multidev $PANTHEON_ENV already exists, skipping creating it..."
fi

該腳本位於私有目錄中且 不允許透過網路訪問萬神殿。 我們有一個用於多開發邏輯的腳本。 現在讓我們更新該部分 deploy:multidev 文件 .gitlab-ci.yml結果是這樣的:

deploy:multidev:
  stage: deploy
  environment:
    name: multidev/mr-$CI_MERGE_REQUEST_IID
    url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
  script:
    # Run the multidev deploy script
    - "/bin/bash ./private/multidev-deploy.sh"
  only:
    - merge_requests

我們需要確保我們的任務在創建的自訂圖像中執行,所以讓我們添加一個定義 image 從登錄 URL 到 .gitlab-ci.yml。 結果,我們得到了這樣一個文件 .gitlab-ci.yml:

image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest

stages:
- deploy

before_script:
  # See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
  - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
  - git config --global user.email "$GITLAB_USER_EMAIL"
  - git config --global user.name "Gitlab CI"

deploy:dev:
  stage: deploy
  environment:
    name: dev
    url: https://dev-$PANTHEON_SITE.pantheonsite.io/
  script:
    - git remote add pantheon $PANTHEON_GIT_URL
    - git push pantheon master --force
  only:
    - master

deploy:multidev:
  stage: deploy
  environment:
    name: multidev/mr-$CI_MERGE_REQUEST_IID
    url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
  script:
    # Run the multidev deploy script
    - "/bin/bash ./private/multidev-deploy.sh"
  only:
    - merge_requests

新增、提交和發送 private/multidev-deploy.sh и .gitlab-ci.yml。 現在我們返回GitLab並等待CI/CD任務完成。 請耐心等待:創建 multidev 可能需要幾分鐘。

然後我們去看看 Pantheon 上的 multidev 清單。 噢,奇蹟! 多開發環境 mr-2 已經在這裡了。

如何連接 GitLab 和 Pantheon 並優化 Drupal 和 WordPress 工作流程

結論

當我們開始開啟合併請求並自動建立環境時,我的團隊獲得了更多樂趣。

借助 GitLab 和 Pantheon 的強大工具,您可以自動將 GitLab 連接到 Pantheon。

由於我們使用 GitLab CI/CD,我們的工作流程將有成長的空間。 以下是一些可以幫助您入門的想法:

讓我們知道您對 GitLab、Pantheon 和自動化的看法。

PS 你知道嗎,Pantheon 的命令列工具 Terminus 可以透過插件擴展?

我們 Pantheon 在第二版上做得很好 Terminus 建置工具插件 與 GitLab 支援。 如果您不想為每個項目的設定而煩惱,請嘗試此外掛程式並幫助我們測試 v2 beta。 對於總站團隊 build:project:create 您只需要一個 Pantheon 令牌和一個 GitLab 令牌。 她將使用 Composer 和自動化測試部署範例項目之一,在 GitLab(新的 Pantheon 站點)中建立一個新項目,並使用環境變數和 SSH 金鑰連接它們。

關於作者

安德魯泰勒 (Andrew Taylor) 為開發人員創建了工具 萬神殿(Pantheon).

來源: www.habr.com

添加評論