sle/phing-typo3-deployer

Phing TYPO3 Deployer 是一个强大的 TYPO3 CMS 部署工具

2.5.0 2021-11-23 12:27 UTC

README

版权所有 2017 Steve Lenz

Tracis CI

内容

简介

本包的目标是什么?

Phing Typo3 Deployer 基于 Build 工具 Phing,用于自动化发布,即持续集成和持续部署,TYPO3 CMS 实例。

先决条件

  • PHP 7
  • TYPO3 CMS 7 || 8 在 Composer 模式下
  • 命令行
  • Unix 或 Linux
  • 以必要的 Web 用户(通常是 www-data)的权限执行

项目结构

此工具需要和生成以下目录结构和文件

bin/
releases/
    current/
    previous/
    next/
rsync/ -> Wird nur generiert, wenn 'install-rsync-excludes' aktiviert ist.
    excludes.txt
shared/
typo3/
    composer.json
vendor/
build.custom.properties
build.env.properties
build.hook.xml
build.xml
composer.json
composer.lock

设置新项目

设置仅需以下三个步骤

  1. 在项目的 Webroot(htdocs 目录)中创建 composer.json

    {
      "name": "my/typo3-project",
      "license": "MIT",
      "description": "",
      "type": "project",
      "require": {
        "sle/phing-typo3-deployer": "[VERSION]"
      },
      "config": {
        "vendor-dir": "vendor",
        "bin-dir": "bin"
      },
      "minimum-stability": "stable",
      "scripts": {
        "post-install-cmd": [
          "Sle\\PhingTypo3Deployer\\Composer\\Scripts::postInstall"
        ],
        "post-update-cmd": [
          "Sle\\PhingTypo3Deployer\\Composer\\Scripts::postUpdate"
        ]
      },
      "extra": {
        "sle/phing-typo3-deployer": {
          "install-rsync-excludes": false
        }
      }
    }
  2. 安装 Composer 包

    $ composer install

    安装时将生成以下项目结构

    bin/
    vendor/
    typo3/
        composer.json
    build.custom.properties
    build.env.properties
    build.hook.xml
    build.xml
    composer.json
    composer.lock
  3. 将文件添加到版本控制

    必须添加以下文件到版本控制

    rsync/
        excludes.txt
    typo3/
        composer.json
    build.custom.properties
    build.hook.xml
    composer.json
    composer.lock

    使用 git 添加

    $ git add -A && git commit -m '[Build] Add phing-typo3-deployer'

在目标系统上设置项目

在这里,“目标系统”指的是一个 Web 服务器或其他类似设备。

为了在目标系统上正确设置,需要以下步骤

  1. 将项目文件复制到目标系统

    必须将位于版本控制中的项目文件和目录复制到目标系统。目录结构现在如下所示

    typo3/
        .env.dist
        composer.json
        composer.lock
    build.custom.properties
    build.hook.xml
    composer.json
    composer.lock
  2. 安装 Composer 包

    $ composer install
  3. 在某些 vServer(例如 Mittwald vServer)上,Phing 可能无法正确读取绝对路径。此外,PHP 在命令行中以 php_cli 而不是 php 被调用。因此,可以在现在创建的 build.env.properties 中重新配置环境变量。

    • 例如,Mittwald vServer 环境配置

      # Base directory configuration
      base.dir = /home/www/p<XXXXXX>/html/<project-dir>
      
      # Commandline configuration
      cmd.php = php_cli
      cmd.composer = composer
      
  4. 发布初始版本

    当前版本的目录位于 releases/current/。要创建它,必须执行以下命令

    $ bin/phing ci:release

    另请参阅 如何创建新版本?

    注意!

    Mittwald vServer 上执行时,可能会出现 Phing 找不到 build.xml 的情况。为此,应安装替代的 phing.phar(请参阅 https://www.phing.info/)。理想情况下,phing.phar 应包含在项目存储库的根目录中,并且也应将其部署。

    $ php_cli phing.phar ci:release

    在此过程中,将创建以下文件和目录

    releases/
        current/
            bin/
            vendor/
            web/
        previous/ -> Wird ab dem zweiten Release generiert und beinhaltet immer das vorherige Release.
            bin/
            vendor/
            web/
    build.env.properties

    typo3 目录中的数据复制到 releases/current/ 目录,并执行 composer install

  5. 配置 vHost

    虚拟主机必须指向目录 <project-root>/releases/current/web

  6. 在目标系统上安装TYPO3 CMS

    现在必须在目标系统上初始化安装TYPO3 CMS。这可以通过TYPO3安装向导或typo3console完成。

    使用typo3console安装

    releases/current$ bin/typo3cms install:setup
  7. 公共文件集中存储

    公共文件(shared data)现在需要集中存储,以便为未来的发布版本可用。

    $ bin/phing init:shared

    在此过程中,将LocalConfiguration.php以及fileadminuploads目录复制到shared目录,因为这些目录始终保持不变,因此对于未来的发布版本可以在中央提供。此外,还将原始文件通过符号链接替换。

    shared生成的目录结构

    releases/
        current/
    shared/
        .env (Wenn typo3/.env.dist vorhanden ist)
        fileadmin/
        uploads/
        typo3conf/
            LocalConfiguration.php

为自动化发布设置

可以通过Git和Jenkins自动更新项目。在同步时,必须更新以下文件

typo3/
build.custom.properties
build.hook.xml
composer.json
composer.lock

钩子

所有可用的钩子都位于文件build.hook.xml中。

属性

全局属性

可用属性的列表位于文件src/phing/config/build.properties中。

自定义属性

可以在文件build.custom.properties中设置自定义属性,并在钩子中提供。

环境属性

可以在文件build.env.properties中设置环境配置。

常见问题解答

列出所有可用命令

$ bin/phing

本地开发

本地开发在目录htdocs/typo3中进行。安装后的完整目录结构如下

bin/
typo3/
    vendor/
    web/
    composer.json
    composer.lock
vendor/
build.custom.properties
build.env.properties
build.hook.xml
build.xml
composer.json
composer.lock

虚拟主机应指向typo3/web

如何创建新版本?

$ bin/phing ci:release

作为备选方案,可以创建并发布3个专用的目标。可以在目标之间执行自己的服务器脚本,例如调整权限。(这三个目标也将按照顺序由ci:release执行)

$ bin/phing ci:release:create:next
$ bin/phing ci:release:publish:next
$ bin/phing ci:release:post-actions

Jenkins 项目配置

  • 必须同步以下文件

    typo3/
    build.custom.properties
    build.hook.xml
    composer.json
    composer.lock
  • 使用远程shell创建新版本

    $ ssh <user>@<server>
    <server>$ cd <webroot>/<project>
    <server>/<webroot>/<project>$ composer install
    <server>/<webroot>/<project>$ bin/phing ci:release

    另请参阅 如何创建新版本?

RSYNC

安装excludes.txt

可以通过以下Composer配置自动安装excludes.txt

"extra": {
    "sle/phing-typo3-deployer": {
        "install-rsync-excludes": true
    }
}

配置

rsync --delete -aze ssh --iconv=UTF-8 --exclude-from $WORKSPACE/rsync/excludes.txt $WORKSPACE/ <user>@<server>:/<webroot>/<project>/

可以在文件rsync/excludes.txt中配置RSYNC-Excludes。

rsync
releases
shared
build.env.properties
build.xml

版本控制

以下文件和目录不应纳入版本控制

build.env.properties
build.xml
bin
shared
vendor
releases

迁移

从 1.x 版本升级到 2.x 版本

从版本2开始,必须通过build.custom.properties配置TYPO3 Web目录的路径,如下所示

# TYPO3 CMS web-dir
#
# This should be the same value as in composer.json 'web-dir'
#
# Example:
# ========
# "extra": {
#   "typo3/cms": {
#       "cms-package-dir": "{$vendor-dir}/typo3/cms",
#       "web-dir": "web"
#   },
# }
typo3-cms.web-dir = web