nimbly / 小兵
框架和语言无关的远程部署自动化工具
Requires
- php: >=7.4||^8.0
- phpseclib/phpseclib: ^2.0
- symfony/console: ^5.0
- symfony/yaml: ^5.0
Requires (Dev)
- vimeo/psalm: ^4.21
README
小兵为每次部署创建一个新的仓库检查/克隆。这允许进行干净的安装和轻松回滚到以前的版本。一般思路是单个目录包含发布版本,一个符号链接指向当前发布版本。
注意:为了与您的web服务器(Apache、Nginx等)一起使用,您必须更新其配置,使其将符号链接作为其webroot。
在部署过程中,小兵将在每个定义的服务器上应用您的部署策略。部署策略只是一系列您希望小兵运行的任务。
小兵有几个内置的任务 - 然而,您需要创建并实现自己的任务以充分利用。一些示例:安装composer、运行迁移、刷新缓存、重启web服务、重启web应用程序等。
安装
composer require nimbly/minion
初始化
minion make:init
配置
如果您运行make:init
命令,小兵将创建几个目录(Tasks
和Commands
),以及生成一个默认的配置文件(minion.yml
)。
配置文件的前几个部分定义了全局配置选项。每个定义的环境可以可选地覆盖这些全局选项。
全局部分包括
- 远程
- 身份验证
- 代码
远程
远程部分定义了远程服务器环境上的选项,包括部署代码的位置。
远程部分的选项如下
-
path [字符串] 服务器上代码的绝对路径。即部署代码的路径。
-
releaseDir [字符串] 存储发布版本的路径(相对于
path
)。 -
symlink [字符串] 指向当前发布版本的符号链接名称。
-
keepReleases [整数] 在修剪旧发布版本之前保留的发布版本数量。
身份验证
身份验证部分定义了SSH如何与您的服务器进行身份验证。您可以使用用户名和密码或使用用户名、密钥和(可选)密钥密码。
注意:由于小兵使用PHPSECLIB作为其核心SSH库,因此您只能使用RSA密钥 - 目前不支持DSA密钥。
身份验证部分的选项如下
-
username [字符串] 连接时使用的SSH用户名。
-
password [字符串] 可选 使用的SSH密码(如果不使用基于密钥的身份验证)。
-
key [字符串] 可选 RSA密钥文件的路径和文件名。
-
passphrase [字符串] 可选 密钥的密码(如果使用基于密钥的身份验证)。
代码
代码部分定义了代码的存储方式和位置。
-
scm [git, svn] 您使用的源代码管理工具。
-
repo [字符串] 仓库URL/位置
-
branch [字符串] 可选 仓库分支(如果有的话)
-
username [字符串] 可选 仓库用户名
-
password [字符串] 可选 仓库密码
环境
本部分是您定义服务器组或环境的地方。每个环境都有一个独特的名称和服务器列表。您必须定义一个部署策略并提供一个服务器数组。服务器必须有一个host
属性。
- 策略 [字符串] 以逗号分隔的任务列表,按照指定顺序运行。
- 服务器 [数组] 部署到的服务器数组。
- 预部署 [字符串] 在部署发生前运行的逗号分隔的任务列表。这些任务将在本地机器上运行(即不在远程)。
- 后部署 [字符串] 在部署发生后运行的逗号分隔的任务列表。这些任务将在本地机器上运行(即不在远程)。
例如
environments: production: strategy: release, link, prune servers: - host: web-001.example.com - host: web-002.example.com - host: web-003.example.com
在每个环境中,您可以覆盖一些或全部全局选项。例如,如果您的 预发布 环境使用不同的 SSH 密钥进行认证,并使用您存储库的 预发布 分支,您可以在 预发布 环境中定义这些更改。
例如
environments: staging: strategy: release, link, prune code: branch: staging authentication: username: deploy key: staging_id_rsa.pub servers: - host: staging-001.example.com - host: staging-002.example.com
服务器也可以覆盖环境策略。如果您有多个服务器并且需要运行迁移,这非常有用,因为它只需要运行一次。
例如
environments: staging: code: branch: staging authentication: username: deploy key: staging_id_rsa.pub strategy: release, link, prune servers: - host: staging-001.example.com strategy: release, link, migrate, prune - host: staging-002.example.com
任务
任务是在远程服务器上发出的一个或多个 shell 命令。 minion 预先配置了四个任务。
release
在服务器上创建一个新的发布版本。link
将新创建的发布版本符号链接到当前发布目录(默认为current
)。prune
删除旧的发布目录。update
对当前发布版本执行代码更新(git pull
或svn up
)。
扩展
minion 可以通过创建新的自定义命令和任务来扩展。
命令
创建新命令
minion make:command <名称>
例如
minion make:command CacheFlushCommand
自定义命令可以在您运行 minion 的 Commands
目录中找到。
minion 命令由 Symfony Console 驱动。请参阅 [https://symfony.ac.cn/doc/current/components/console.html] 获取文档。
任务
创建新任务
minion make:task <名称>
例如
minion make:task Migrate
自定义任务可以在您运行 minion 的 Tasks
目录中找到。