instituteweb / deployer-scripts

PHP 部署脚本 (deployer.org),用于构建本地和部署远程 iw_master TYPO3 发行版。

1.3.1 2017-02-15 13:24 UTC

This package is auto-updated.

Last update: 2024-09-14 19:58:47 UTC


README

这些 部署脚本 包含了 构建部署脚本,用于任务执行器 PHP Deployer。所有任务都是系统独立的(Unix/Windows)且高度可配置。

这些脚本最初是为 TYPO3 CMS 和发行版 iw_master 制作的。但您也可以使用这些脚本部署任何您想要的应用程序。

目前这是一个早期版本,我很高兴收到反馈和贡献,谢谢 :)

关键特性:league/flysystem

这些部署脚本的一个酷特性是出色的包 league/flysystem,它允许您通过 SSH、FTP、本地机器以及更多其他方式执行文件操作。

Deployer Scripts 在您的任务中提供了 files()filesLocally() 函数,这些函数会自动使用当前服务器的 Deployer 配置初始化。

安装

只需将 instituteweb/deployer-scripts 添加到您的 composer 项目中

$ composer require instituteweb/deployer-scripts

这将在您的项目中安装 deployer/deployer

全局安装

我建议全局安装 PHP Deployer 并将 vendor/bin 目录添加到您的 home 目录中,以便将其添加到 PATH 变量。

$ composer global require instituteweb/deployer-scripts

在下面的示例中,我总是写 $ dep ...,假设您也已经全局安装了它。如果没有,您需要写 $ bin/dep(iw_master)或 $ vendor/bin/dep(composer 默认)...这取决于您的 composer.json 配置(bin-dir)。

配置

PHP Deployer 提供了非常不错的环境处理,允许我们全局或为每个环境单独设置变量。构建和部署配置发生在项目根目录的 deploy.php 文件中。

您需要包含 deployer-scripts 的通用脚本。在通用脚本中包含了所有可用的任务。

<?php
namespace Deployer;

require 'vendor/instituteweb/deployer-scripts/src/common.php';

// deployer.php kickstart template 

如果您没有经验,可以查看 Deployer 的文档中的任务章节

通用配置参数

使用的二进制文件,如 php、git、composer 或 unzip,在不同环境中可能有不同的调用方式。

<?php

set('bin/php', get('bin/php') ?: getenv('PHP_BIN') ?: 'php');
set('bin/git', get('bin/git') ?: getenv('GIT_BIN') ?: 'git');
set('bin/composer', get('bin/composer') ?: getenv('COMPOSER_BIN') ?: 'composer');

许多文件操作与 flysystem 协作良好,但某些操作则不行。例如删除和复制整个目录以及创建符号链接。它们使用 vsprintf()

<?php

// File operations (unix)
set('bin/unzip', 'unzip -qo "%s" -d "%s"');
set('bin/rm', 'rm -rf %s');
set('bin/cp', 'cp -rf "%s" "%s"');
set('bin/symlink', 'ln -nfs %s %s');
set('bin/symlink-file', get('bin/symlink'));

对于 Windows 系统,您可以使用以下命令

<?php

// File operations (windows)
set('bin/rm', 'del /S /Q "%s"');
set('bin/cp', 'copy /Y /L "%s" "%s"');
set('bin/symlink', 'mklink /D %2$s %1$s');
set('bin/symlink-file', 'mklink %2$s %1$s');

还有更多配置参数,但它们用于构建或部署。您可以在相关部分下找到它们。

构建脚本

在我们能够部署项目之前,我们需要创建一个构建。Deployer Scripts 将所有文件压缩成 zip 存档,这使得部署变得容易。

要创建一个构建,只需调用

$ dep build
  1. 创建 配置的构建目录(默认:../.build,因为 git 在 git 中是不可能的)
  2. 更新代码 使用 git。我们定义分支/标签或特定修订版本(默认是 master 分支)
  3. 在这里我们可以执行前端相关的事情,如 npm、bower 和 grunt/gulp。这里没有 composer,这应该在运行它的系统上执行(因为符号链接和读写/执行标志)
  4. 基于已签出和准备好的发布创建 zip 存档
  5. 清除 并删除已签出文件夹。完成。

现在这个 zip 文件可以部署了。

构建和部署可以分别调用。如果您想一次执行它们,也可以调用

$ dep build-deploy 

构建配置

build_dir

字符串。 用于构建发布的文件夹。相对当前工作目录(cwd)。可能不在git版本控制下。默认:../.builds

archive_list

数组。 键是目录路径,值是要创建的zip文件的路径,包含给定键目录的内容。默认 set('archive_list', ['{{build_path}}' => '{{build_dir}}/{{short_revision}}.zip']);

git_repository

字符串。 您的仓库路径。您也可以通过SSH应用仓库并访问私有仓库。默认:null

git_branch

字符串。要检出分支或标签(两者都可行)。默认:master

build_directory (只读)

返回绝对构建目录路径。

build_path (只读)

返回包含 build_name 的绝对构建目录路径。

build_name (只读)

返回构建名称。如果提供 --name 选项,则返回此值。否则,它采用 git_target 值。

git_target (只读)

返回给定的 git_target。默认是 master。您可以使用 --branch 或 --tag 选项或使用 --revision 选项来影响此选项。修订也是第一个参数。您可以使用 dep build-deploy 76b5410 调用

revision (只读)

返回当前的git修订版。仅在 build:update_code 任务之后或如果通过命令行已经给出了修订版时可用。

short_revision (只读)

revision 相同,但返回提交哈希的前七个数字。

部署脚本

这是已部署的TYPO3项目的示例结构

/html/typo3
├── .dep
│   └── releases.json
├── current -> releases/76b5410
├── releases
│   └── b2ff764
│   └── 1b61ee9
│   └── f9e80f1
│   └── e7059d1
│   └── 76b5410
└── shared
    ├── .env
    └── web
        └── fileadmin
        └── typo3temp
        └── uploads

为了在更新期间保持停机时间非常短,并在部署后发生严重错误时为您提供回滚到早期版本的可能性,我们使用 发布(类似于Deployer本身所做的)。每次部署都是一个新发布。

部署期间发生的事情

$ dep deploy --revision 76b5410
  1. 准备 在第一次在远程上创建初始文件夹结构
  2. 锁定 deployer(以避免并行执行)
  3. 上传 包含 构建 的zip文件 (76b5410.zip),到 /releases
  4. 解压 zip文件到 /releases/76b5410(可配置,默认:git提交哈希的短形式)
  5. 在新发布中执行 composer install
  6. 将配置的 共享文件和文件夹 移动到 /shared 目录,在 例如 /releases/76b5410 中删除它们,并创建指向共享文件夹的符号链接
  7. 推出 发布,这会将 /current 符号链接切换到新发布
  8. 执行 composer run post-update-cmd,执行TYPO3任务(更新数据库模式,清除缓存等)
  9. 解锁 deployer。我们完成了 :)

部署配置

composer_action

字符串。 在服务器上应执行的composer命令。通常是安装或更新。默认:install

composer_options

字符串。 将选项附加到composer以在远程机器上执行时使用。默认:{{composer_action}} --prefer-dist --no-progress --no-suggest --no-interaction --no-dev --optimize-autoloader

release_name

字符串。 发布的名称。默认 {{build_name}}

release_path

字符串。 在远程上传和提取发布的路径。默认:{{deploy_path}}/releases/{{release_name}}

max_release_cycle

整数。 在远程系统上保留的发布数量。默认:5

use_symlink_for_current

布尔值。 如果为true,则 /current 目录,该目录由web服务器(htdocs)使用,是一个符号链接。如果提供者不支持这里的符号链接,则可以禁用此选项。然后,将当前文件夹从发布复制过来。默认:true

upload_list

数组。 键是本地源文件,值是远程目标。上传文件。如果是zip文件,它也被提取到一个文件夹中,其名称与zip存档相同。默认:['{{build_dir}}/{{short_revision}}.zip' => '{{deploy_path}}/releases/{{release_name}}.zip']

directory_permissions

整数。 Unix目录权限。仅在SSH连接(在远程)上使用。默认:0755

回滚

如果您需要回滚到先前版本,可以这样做

$ dep rollback [to]

您可以将 to 参数设置为释放名称。默认情况下,它将回滚到上一个版本。所有版本都存储在 .dep/release.json 文件中。要显示可用的版本名称,请使用 dep list-releases

运行脚本

您可以使用此命令进行完整部署

$ dep build-deploy [stage] [--revision]

$ dep build [stage] [--revision|--branch|--name]

$ dep deploy [stage] [--revision]

参数 revision 是部署所需的,并期望在 build_dir 中存在一个 {{revision}}.zip 文件。

参数和选项

阶段参数

仅在此服务器或服务器组上运行任务。

--revision

指定一个特定的提交以构建和发布。

--tag 或 --branch

两者都相同。设置标签或分支。

--name

设置构建名称(也是发布名称)。

--force

如果设置,则忽略远程的 .lock 文件。仅在之前部署失败时使用此选项。

便利任务

要查看本地构建和远程发布(包括当前的是哪一个),可以使用以下命令

$ dep list-builds

➤ Executing task list-builds
Found builds in "C:\Dev\.builds":
- bbc2760

✔ Ok
$ dep list-releases

➤ Executing task list-releases
Max release cycle count: 5
Found releases on "production":

#0
Name: bbc2760
Path: /html/releases/bbc2760
Date: Sun, 15 Jan 2017 21:35:20 +0100

#1
Name: bbc2760_7
Path: /html/releases/bbc2760_7
Date: Sun, 15 Jan 2017 21:40:07 +0100

#2
Name: bbc2760_8
Path: /html/releases/bbc2760_8
Date: Sun, 15 Jan 2017 21:44:34 +0100

#3
Name: bbc2760_9
Path: /html/releases/bbc2760_9
Date: Sun, 15 Jan 2017 21:44:52 +0100

#10 +++ CURRENT RELEASE! +++
Name: bbc2760_10
Path: /html/releases/bbc2760_10
Date: Fri, 20 Jan 2017 13:26:57 +0100

✔ Ok

注意:当你多次上传相同的构建时,会发生这种情况(_7、_8 等)。