使用GitHub Actions部署Odoo分步指南
手动部署Odoo是很多开发人员日常需要反复执行的任务:通过SSH连接服务器、拉取最新代码、重启服务、更新模块,然后等待变更生效。这个过程并不快捷,当处理多个自定义模块时,还很容易出错。GitHub Actions可以解决这两类问题,实现部署流程自动化,并为你的Odoo项目充当CI(持续集成)工具。对于需要服务器权限的私有模块部署,它是理想方案:每次你向GitHub提交代码,Actions就可以触发,将变更自动部署至服务器。
在本文中,你将学习如何使用GitHub Actions为Odoo项目搭建这样一套CI/CD(持续集成/持续部署)工作流。整个流程包含以下步骤:
- 准备可用于GitHub Actions的项目代码仓库
- 在GitHub中将服务器凭证存储为机密变量
- 通过SSH将自定义模块部署至服务器
- 每次提交代码时自动重启Odoo服务器
读完本文,你只需向GitHub推送提交记录,就能快速、可靠地完成Odoo部署。下面开始讲解。
前置条件
开始之前,请确认已准备好以下内容:
- 托管在GitHub上的Odoo项目仓库,仓库中存放自定义插件(custom_addons/文件夹)。
- 一台部署服务器:VPS或云实例(示例使用Ubuntu系统),服务器上已安装并运行Odoo,原生部署或Docker部署均可,并且拥有服务器SSH访问权限。
- Git与YAML的基础知识。
步骤1:规划Odoo仓库目录结构
整洁的仓库结构会大幅简化自动化流程。这种部署方式最简单的目录布局,就是将仓库本身作为插件文件夹:
custom_addons/ <-- 这就是你的Git仓库
├── sales_extension/
│ ├── __manifest__.py
│ └── ...
├── inventory_reports/
│ ├── __manifest__.py
│ └── ...
├── requirements.txt
├── .github/
│ └── workflows/
│ └── deploy.yml
└── README.md
要点说明: 每个自定义模块放在仓库根目录,这样仓库可以直接克隆到服务器的 /opt/odoo/custom_addons 路径,该路径与odoo.conf里的addons_path配置保持一致。
在requirements.txt中列出所有额外Python依赖包。
工作流配置文件存放于 .github/workflows/。
GitHub会自动识别放置在此目录下的所有yml文件。
步骤2:在GitHub仓库添加机密变量
GitHub机密变量会加密保存敏感信息,避免密钥写入代码库。进入你的仓库,按路径操作: 设置 > 机密和变量 > Actions > 新建仓库机密
添加以下变量:
- SSH_PRIVATE_KEY — gh_actions_key私钥文件内容
- SSH_HOST — 服务器IP或主机名
- SSH_USER — deployer
你还需要在服务器 /opt/odoo/custom_addons 目录一次性克隆仓库,并设置远程地址,实现免账号密码拉取代码(为此生成全新的GitHub个人访问令牌):
git remote set-url origin https://<your_token>@github.com/<username>/<repository>.git
步骤3:添加部署任务
创建 .github/workflows/deploy.yml。该任务在向main分支推送代码时触发:
name: Deploy Odoo
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@v1.2.2
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
set -e
cd /opt/odoo/custom_addons
git pull origin main
sudo systemctl restart odoo
以上是GitHub工作流示例:仅用一个YAML文件,就能把以往繁琐、容易出错的流程转为自动化流水线,每次代码推送都会自动部署到服务器并重载服务。