WordPress GitHub 集成可以通过多种方式为WordPress 开发和项目协作提供帮助。其中之一是自动部署的部署例程,而不是牛仔编码方法,使用 FTP,手动抓取我们的主题和/或插件文件,并使用FileZilla等软件手动上传它们,我们可以直接从 GitHub 部署到我们的实时 WordPress地点。
这就是我写这篇文章的原因,并一如既往地记录几个月后我忘记时我所做的事情。
我们将回顾如何设置 WordPress GitHub 集成来管理 WordPress 主题和 WordPress 插件的部署,这可以节省我们大量时间,如果我们使用自定义主题和插件,这尤其重要。
我们不会涵盖:
- WordPress 核心:嗯,我们永远不应该编辑 WordPress 核心文件,因此将核心文件包含在我们的存储库中是没有意义的。
- 数据库:尝试对 WordPress 数据库进行版本控制会带来一堆蠕虫,我们现在不会打开它。
- WordPress 插件和主题的开发:我假设您已完成此操作,准备部署。
让我们开始使用示例工作流程来同步 WordPress 主题和插件!
部署 WordPress 主题
以下 .yml 代码用于将您编码的主题文件与服务器中的/wp-content/themes文件夹同步。对于像 Digital Ocean 这样的公司托管的 LAMP 服务器,这是一个示例工作流程:
name: Deploy Theme
on:
push:
branches: [master]
env:
SSH_USER: ${{ secrets.SSH_USER }}
SSH_HOST: ${{ secrets.SSH_HOST }}
jobs:
deploy:
name: Deploy WordPress Theme on Digital Ocean
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set SSH Connection
run: |
mkdir -p ~/.ssh/
echo "$SSH_KEY" > ~/.ssh/deploy.key
chmod 600 ~/.ssh/deploy.key
cat >>~/.ssh/config <<END
Host digitalocean
HostName $SSH_HOST
User $SSH_USER
IdentityFile ~/.ssh/deploy.key
StrictHostKeyChecking no
END
env:
SSH_KEY: ${{ secrets.DEPLOY_KEY }}
- name: Sync theme files
run: "rsync --delete -avO
--exclude /deploy_key \
--exclude /.git/ \
--exclude /.github/ \
./ ${{ env.SSH_USER }}@${{ env.SSH_HOST }}:${{ env.DEST }}"
env:
SSH_HOST: digitalocean
# That's the most commom path in a WordPress instalation on a LAMP stack,
# but you can change the destination according to your needs.
DEST: "/var/www/your-domain/wp-content/themes/theme-folder"
工作流程名称
在第一行中,我们有工作流程名称name: Deploy Theme
。
工作流程触发器
稍后,我们有了触发器定义,在这种情况下,每当我使用 WordPress 主题将提交推送到存储库上的 master 分支时,就会触发工作流程。您可以自定义,更多详细信息可以参考 GitHub 文档。
on:
push:
branches: [master]
秘密
我为自定义秘密创建变量。更多信息请点击这里。
env:
SSH_USER: ${{ secrets.SSH_USER }}
SSH_HOST: ${{ secrets.SSH_HOST }}
工作
GitHub Actions 工作流程文件中的作业部分定义了触发工作流程时要执行的一个或多个作业。
jobs:
deploy:
name: Deploy WordPress Theme on Digital Ocean
runs-on: ubuntu-latest
在上述情况下:
- 部署是作业的名称,可以自定义它来描述作业的目的。
- 名称是一个可选字段,我们使用它来使其在查看工作流程时更容易理解。
- running-on指定将在其上执行作业的虚拟环境或运行器的类型。在本例中,它使用 ubuntu-latest 运行程序,表明该作业在最新可用版本的 Ubuntu 操作系统上运行。
脚步
GitHub Actions 工作流程文件中的步骤部分定义了作为作业的一部分执行的一系列单独任务。
steps:
- name: Checkout
uses: actions/checkout@v2
在上述情况下:
- 步骤:包含要按指定顺序执行的操作列表。
- name:是一个可选字段,我们用它来使其在查看工作流程时更容易理解。
- use:指定要执行的操作。在此示例中,actions/checkout@v2操作用于签出源代码存储库。
设置 SSH 连接
这是工作流程中负责设置 SSH 连接以安全访问我们的远程主机的部分。
name: Set SSH Connection
run: |
mkdir -p ~/.ssh/
echo "$SSH_KEY" > ~/.ssh/deploy.key
chmod 600 ~/.ssh/deploy.key
cat >>~/.ssh/config <<END
Host digitalocean
HostName $SSH_HOST
User $SSH_USER
IdentityFile ~/.ssh/deploy.key
StrictHostKeyChecking no
END
env:
SSH_KEY: ${{ secrets.DEPLOY_KEY }}
– name:与前面的部分一样,它是一个可选字段,使我们更容易理解,在这种情况下,我们将看到:Set SSH Connection。
- run定义要执行的步骤或 shell 命令。在这种情况下:
- 如果 ~/.ssh/ 目录尚不存在,则创建该目录。
- 将存储在 SSH_KEY 环境变量中的 SSH 密钥写入 ~/.ssh/deploy.key。
- 设置 ~/.ssh/deploy.key 的权限以确保它只能由用户访问。
- 将 SSH 配置附加到 ~/.ssh/config,包括主机名、用户名和 SSH 密钥的路径。
- 此外,它还禁用对“digitalocean”主机的严格主机密钥检查。
- env部分指定工作流程中使用的环境变量,在本例中,它定义 SSH_KEY 变量并从 GitHub 机密 (DEPLOY_KEY) 检索其值。
同步主题文件:
此同步部分负责使用rsync 命令将主题文件同步到远程服务器。在某些主机中,可能需要手动安装 rsync。
- name: Sync theme files
run: "rsync --delete -avO
--exclude /deploy_key \
--exclude /.git/ \
--exclude /.github/ \
./ ${{ env.SSH_USER }}@${{ env.SSH_HOST }}:${{ env.DEST }}"
rsync 命令执行以下任务:
- –delete:确保本地删除的文件也会在远程服务器上删除。
- -avO:设置存档模式、详细输出和优化的 rsync 选项。
- –exclude:指定从同步中排除哪些文件或目录。在此示例中,它排除了 /deploy_key、/.git/ 和 /.github/ 文件夹,但您可以根据您的项目进行自定义。
- ./:指定要同步的源目录,即工作流的当前目录。
${{ env.SSH_USER }}@${{ env.SSH_HOST }}:${{ env.DEST }}:
指定同步的目标。它使用 SSH 用户名、主机和目标路径的环境变量。
变量定义
在本节中,还有工作流中使用的一些其他环境变量。
env:
SSH_HOST: digitalocean
# That's the most commom path in a WordPress instalation on a LAMP stack,
# but you can change the destination according to your needs.
DEST: "/var/www/your-domain/wp-content/themes/theme-folder"
部署 WordPress 插件
要部署插件,您可以按照上面相同的思路,只需将部署路径更改为/var/www/your-domain/wp-content/plugins/plugin-folder
示例工作流程如下:
name: Deploy Plugin
on:
push:
branches: [master]
env:
SSH_USER: ${{ secrets.SSH_USER }}
SSH_HOST: ${{ secrets.SSH_HOST }}
jobs:
deploy:
name: Deploy WordPress Plugin on Digital Ocean
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set SSH Connection
run: |
mkdir -p ~/.ssh/
echo "$SSH_KEY" > ~/.ssh/deploy.key
chmod 600 ~/.ssh/deploy.key
cat >>~/.ssh/config <<END
Host digitalocean
HostName $SSH_HOST
User $SSH_USER
IdentityFile ~/.ssh/deploy.key
StrictHostKeyChecking no
END
env:
SSH_KEY: ${{ secrets.DEPLOY_KEY }}
- name: Sync plugin files
run: "rsync --delete -avO
--exclude /deploy_key \
--exclude /.git/ \
--exclude /.github/ \
./ ${{ env.SSH_USER }}@${{ env.SSH_HOST }}:${{ env.DEST }}"
env:
SSH_HOST: digitalocean
# That's the most commom path in a WordPress instalation on a LAMP stack,
# but you can change the destination according to your needs.
DEST: "/var/www/your-domain/wp-content/plugins/plugin-folder"
这是我的存储库,其中包含为不同服务器定制的一些示例工作流程。可以通过拉取请求自由地做出贡献,添加更多工作流程,甚至建议对当前工作流程进行改进。如果这对您有用,请考虑在存储库中留下一颗星。
参考文献和特别感谢:
- https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository
- https://docs.github.com/en/actions/deployment/targeting- different-environments/using-environments-for-deployment#about-environments
- https://blog.hubspot.com/website/wordpress-github-integration
- https://css-tricks.com/continuous-deployments-for-wordpress-using-github-actions/
- https://engineering.monstar-lab.com/en/post/2023/01/02/How-to-setup-CI-CD-pipeline-for-WordPress-with-GitHub-Actions-and-AWS/
- https://felipeelia.dev/ftp-no-more-deploying-wordpress-sites-with-github-actions/