qobo/deploy

此包已被废弃且不再维护。未建议替代包。

部署自动化框架

v1.0.6 2015-01-19 08:52 UTC

This package is auto-updated.

Last update: 2023-04-08 19:34:22 UTC


README

Build Status

Deploy是一个部署自动化框架。

假设

以下是一些帮助理解这些内容的事情

  • 你是一个自动化狂热者!
  • 你需要定期部署一个或多个项目。
  • 你的每个项目都有多个环境(本地、开发、QA、实时等)
  • 你的每个环境都有一个或多个位置(Web服务器、数据库服务器等)
  • 你的每个项目已经有了一个构建自动化脚本(phing、phake、make等)
  • 你希望将构建自动化与基础设施配置自动化分开。

安装

使用 composer 安装非常简单。创建一个新文件夹

$ mkdir my-deploys
$ cd my-deploys

创建包含以下内容的 composer.json 文件

{
	"require": {
		"qobo/deploy": "~1.0"
	}
}

现在让 composer 发挥其魔力

$ composer install

你应该会看到一个 vendor 文件夹,并且有可执行的 vendor/bin/deploy

现在,为你的配置文件创建一个文件夹。如果你将其命名为 etc/,你的生活将会更轻松

$ mkdir etc

现在你可以运行部署脚本,检查可用参数等

$ ./vendor/bin/deploy

不过,除非你创建一些配置文件,否则它不会有太多用途。以提供的示例为起点,使用 vendor/qobo/deploy/etc/some.project.com.jsom

作为额外加分项,使用 git 对部署配置进行版本控制

$ git init
$ echo "vendor/" > .gitignore
$ git add .
$ git commit -m "Initial commit"

如果你将其推送到远程仓库,你也将有一个备份! :)

用法

首先,至少创建一个配置文件,例如这个

{
		"type": "project",
		"name": "Some Project",

		"params": {
			"base.dir": "/var/www/html/vhosts",
			"project.dir": "test.qobo.biz",

			"source.url": "git@github.com:QoboLtd/deploy.git",
			"source.version": "master",

			"source.install": "cd %%base.dir%% && git clone %%source.url%% %%project.dir%%",
			"source.update":  "cd %%base.dir%% && cd %%project.dir%% && git pull && %%source.checkout%%",
			"source.checkout": "git checkout %%source.version%%",

			"ssh.host": "localhost",
			"ssh.user": "root",
			"ssh.command": "ssh %%ssh.user%%@%%ssh.host%%"
		},

		"commands": {
			"install": { 
				"type": "command", 
				"command": "%%ssh.command%% '%%source.install%% && cd %%project.dir%% && %%source.checkout%%'" 
			},
			"update":  { 
				"type": "command", 
				"command": "%%ssh.command%% '%%source.update%% && cd %%project.dir%% && %%source.version%%'" 
			},
			"remove":  { 
				"type": "command", 
				"command": "%%ssh.command%% 'cd %%base.dir%% && rm -rf %%project.%%dir%%'" 
			}
		},

		"environments": {
			"live": {
				"type": "environment",

				"commands": {
					"remove": { 
						"type": "command", 
						"command": "" 
					}
				},

				"locations": {
					"web1": {
						"type": "location",

						"params": {
							"ssh.host": "some-web-host1",
							"base.dir": "/var/www/html"
						}
					},
					"web2": {
						"type": "location",

						"params": {
							"source.version": "stable",
							"ssh.host": "some-web-host2",
							"base.dir": "/usr/share/www"
						}
					}
				}
			}
		}
}

现在你准备好部署了。查看可用的项目

$ ./vendor/bin/deploy list

检查特定项目的部署目标

$ ./vendor/bin/deploy show --project some.domain.com

查看将要执行的内容 (--test)

$ ./vendor/bin/deploy run --test --project some.domain.com --env live --command install

不带参数或使用无效参数集运行部署脚本将打印出有用的(希望如此)信息。支持短参数和长参数。

配置

配置文件似乎很复杂。但它们并不复杂。以下是一些更多信息。

类型

每个部分都有一个类型,例如项目、环境、位置或命令。这是唯一的要求。当前逻辑遵循上述假设。但你可以轻松修改它,如果你准备好了修改一些 PHP 代码(lib/Deploy/Runnable/ 文件夹是为你准备的)。

传播

部署设置从上到下传播。也就是说,项目设置用作环境的默认设置。环境应仅覆盖不同的设置。环境设置用作位置的默认设置,位置又可以重新定义它们自己的内容。位置设置传递到命令部分,这些部分可以有最后的决定权。

你可以根据需要拥有任意数量的设置或部分 - 所有的内容都会向下传播。然而,你可能应该避免过多地信任字段 'name' 和 'type',因为它们在内部使用。现在是这样。 ;)

参数

参数是一个特殊部分。它可以用来向您的命令传递参数。实际上,也可以完全重新设计您的命令。其格式很简单 - 键和值。然而,解析是递归的,因此您可以拥有非常强大和深度嵌套的模板。

但请注意PHP的默认递归级别限制,默认为大约100。

命令

命令定义了在部署过程中将执行的操作。为了使事情更容易自动化,命令使用别名。您应使用通用名称,如'install'(安装)、'update'(更新)、'remove'(删除)、'test'(测试)、'backup'(备份)等。然后,在命令本身中执行所需操作。这允许在不同环境(如生产/开发/测试)和多个位置(例如具有不同操作系统的Web服务器)之间进行非常灵活的配置。

警告

不要假设这个整个系统每次都能完美工作!它可能让您的生活变得更好,也可能摧毁您,吃掉您的数据和灵魂。请小心。