帮酷LOGO
  • 显示原文与译文双语对照的内容
Easy and powerful deployment tool for

  • 源代码名称:Surf
  • 源代码网址:http://www.github.com/TYPO3/Surf
  • Surf源代码文档
  • Surf源代码下载
  • Git URL:
    git://www.github.com/TYPO3/Surf.git
  • Git Clone代码到本地:
    git clone http://www.github.com/TYPO3/Surf
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/TYPO3/Surf
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • TYPO3 Surf强大且灵活的部署工具,适用于PHP项目 Build Status

    描述

    冲浪包是一个完整的自动化部署工具。 它最好使用,但到目前为止还不限于部署 TYPO3 CMS和流应用程序。 它是由 Capistrano ( 致谢)的一些特性对Git工作流的影响。

    冲浪包的某些功能:

    • 使用模块( 抱歉,没有 SVN ) 远程签出Git仓库
    • 灵活的。声明式部署配置
    • 多节点。多应用。多部署部署
    • 在任何部署阶段钩子
    • 创建自定义任务数行
    • 使用干运行模拟部署

    安装

    通过从GitHub下载它来安装冲浪:

    mkdir/usr/local/surf
    curl -L https://github.com/TYPO3/Surf/releases/download/2.0.0-beta7/surf.phar -o/usr/local/surf/surf.phar
    chmod +x/usr/local/surf/surf.phar
    ln -s/usr/local/surf/surf.phar/usr/local/bin/surf

    你可能需要扩展特权 比如 sudo 。 通过这种方式,你可以将 /usr/local/surf 添加到IDE的PHP Include Paths

    通过composer安装冲浪

    # Until stable release, you need to set minimum-stability to beta
    composer global config minimum-stability beta
    composer global require typo3/surf:^2.0.0

    通过这种方式,你可以将 ~/.composer/vendor/typo3/surf 添加到IDE的PHP Include Paths

    指南

    部署配置

    每个部署都在配置( 用于开发,登台,实时环境的比如 ) 中定义。 每个部署配置为部署( 现在只有 SimpleWorkflow,但是你可以自由地创建自己的) 指定一个工作流。 部署配置至少有一个应用程序和一个或者多个用于 application(s)的节点。

    首先,在 ~/.surf/MyDeployment.php 中创建一个简单的部署配置,以为 ::的部署进行部署

    <?php
    $node = new TYPO3SurfDomainModelNode('example');
    $node->setHostname('example.com');
    $node->setOption('username', 'myuser');
    $application = new TYPO3SurfApplicationNeosFlow();
    $application->setVersion('4.0');
    $application->setDeploymentPath('/home/my-flow-app/app');
    $application->setOption('repositoryUrl', 'git@github.com:myuser/my-flow-app.git');
    $application->addNode($node);
    $deployment->addApplication($application);

    这是基于默认流应用程序模板 TYPO3SurfApplicationNeosFlow的非常基本的部署。 部署对象可以作为变量 $deployment 用于脚本。 node 基本上是一个表示应用程序服务器的部署目标。 将 node 分配给部署的应用程序。 最后将应用程序添加到部署中。

    每个应用程序都类似于一。 因此更复杂的部署既可以部署流应用程序,也可以为 TYPO3 CMS网站发布扩展。 另外,也可以使用应用程序表示不同的角色,因为每个任务都可以注册为运行所有或者特定的应用。

    SSH身份验证类型

    连接到远程主机的首选方式是通过SSH公钥身份验证。 这就是为什么在示例 above 中只设置用户名和主机名的原因。

    但是,由于基础设施设置中的约束,有时部署方案不能与 public 密钥身份验证一起使用。 Surf还支持基于口令的SSH认证。 为此,你需要指定密码如下:

    $node->setOption('password', 'yourSshPasswordHere');

    使用密码验证需要 expect unix工具,该工具在大多数Linux发行版中都是默认安装的。

    自定义连接

    如果需要通过更深奥的协议连接到远程主机,你还可以实现自己的远程主机连接: 在这种情况下,在 node 上设置选项 remoteCommandExecutionHandler::

    $node->setOption('remoteCommandExecutionHandler', function(TYPO3SurfDomainServiceShellCommandService $shellCommandService, $command, Node $node, Deployment $deployment, $logOutput = TRUE) {
    //Now, do what you need to do in order to connect to $node and execute $command.
    //You can call $shellCommandService->executeProcess() here.
    //This function should return a two-element array where the first array element
    //is an integer containing the Exit Code, and the second array element is a
    //string with the full, trimmed, output.
    });

    测试部署

    可以通过运行以下命令来获取部署说明:

    $ surf describe MyDeployment

    通过运行以下命令模拟部署:

    $ surf simulate MyDeployment

    仿真给出了哪些任务将在哪个 node 上执行的提示。 在仿真过程中,不会执行任何有害的任务。 如果远程SSH命令被执行,它将被打印在以 ... $nodeName:"command" 开头的日志消息中。

    流版本选项

    项目中使用的流版本可以使用以下方法设置:

    $application = new TYPO3SurfApplicationNeosFlow();
    $application->setVersion('4.0');

    默认为 4.0,因此如果使用旧的流版本,则需要将版本设置为 x.y 。 这将切换冲浪行为以正确调用流命令。

    流配置替代

    如果流应用程序的配置应根据部署配置不同而不同( 比如 。 数据库设置或者外部服务( TYPO3SurfTaskNeosFlowCopyConfigurationTask任务) 可以用于在代码更新( git checkout ) 之后重写配置。

    如果 Configuration 文件夹存在 inside,则以你的部署命名文件夹 %FLOW_ROOT%/Build/Surf/MyDeployment 每个文件都将被递归复制到发行版 Configuration 文件夹中。

    运行部署

    如果一切正常,你可以运行部署:

    $ surf deploy MyDeployment

    文档级自定义项

    使用git进行部署

    默认情况下,冲浪使用rsync和 Composer 进行部署。 但是你也可以使用 git,通过将以下配置添加到应用程序中:

    $application->setOption('transferMethod', 'git');
    $application->setOption('packageMethod', NULL);
    $application->setOption('updateMethod', NULL);

    使用rsync可以加快部署速度,不需要在生产服务器上使用 Composer 和 git 。

    在部署配置中自定义任务

    部署配置只是一个简单的PHP文件,可以访问任何流类,很容易扩展它或者编写更复杂的行为。 但删除任务或者将一些简单的shell 任务添加到现有的应用程序模板中更容易::

    <?php
    ...
    $workflow = new TYPO3SurfDomainModelSimpleWorkflow();
    $workflow->defineTask('mycompany.mypackage:initialize',
     TYPO3SurfTaskShellTask::class,
     array('command' => 'cd {releasePath} &&./flow mycompany.mypackage:setup:initialize')
    );

    这将基于 TYPO3SurfTaskShellTask 任务添加一个新任务,并使用一个定制的shell 命令运行流命令。 在定义新任务之后,我们必须告诉部署配置什么时候执行它::

    <?php
    ...
    $workflow = new TYPO3SurfDomainModelSimpleWorkflow();
    $application = new TYPO3SurfApplicationNeosFlow('MyProject');
    $workflow->defineTask('mycompany.mypackage:initialize',
     TYPO3SurfTaskShellTask::class,
     array('command' => 'cd {releasePath} &&./flow mycompany.mypackage:setup:initialize')
    );
    $deployment->onInitialize(function() use ($workflow, $application) {
     $workflow->addTask('mycompany.mypackage:initialize', 'migrate', $application);
     $workflow->removeTask(TYPO3SurfTaskNeosFlowSetFilePermissionsTask::class);
    });

    这将在中执行新任务,只迁移 $application 所引用的应用程序的阶段。 可以看到,从工作流中删除任务也是可能的。 大多数方法都可以用于全局或者应用程序特定的任务配置。

    除了通过阶段指定执行点之外,还可以将现有任务作为锚,并使用 afterTask 或者 beforeTask 指定任务执行。

    任务操作

    ====================== ================================= ===================================================================================
    Method Arguments Description
    ====================== ================================= ===================================================================================
    defineTask $taskName, $taskType, ($options) Defines a new task with name $taskName based on $taskType with custom options.
    addTask $tasks, $stage, ($application) Add one or more tasks to the workflow that should run in the given stage.
    removeTask $taskName Removes the task with the given name from all stages and applications.
    afterTask $taskName, $tasks, ($application) Adds one or more tasks that should run *after* the given task name.
    beforeTask $taskName, $tasks, ($application) Adds one or more tasks that should run *before* the given task name.
    ====================== ================================= ===================================================================================

    shell-任务选项扩展

    若要访问发布路径或者其他发布特定选项,可以在选项值中使用某些占位符::

    <?php
    ...
    $workflow = new TYPO3SurfDomainModelSimpleWorkflow();
    $workflow->defineTask('mycompany.mypackage:initialize',
     TYPO3SurfTaskShellTask::class,
     array('command' => 'cd {releasePath} &&./flow mycompany.mypackage:setup:initialize')
    );

    可用的占位符如下:

    • workspacePath: 本地工作空间目录的路径
    • deploymentPath: 部署基础目录的路径
    • releasePath: 工作目录中的路径( 通常由下一步引用)
    • sharedPath: 所有发布的共享目录的路径
    • currentPath: 指向当前 release的路径
    • previousPath: 指向 previous的路径的路径

    冒烟测试

    当你进行自动部署时,你应该检查网站是否正常运行,然后将它的切换到活动站点。 这叫做烟测试 。 我们将提供一个使用内置HTTP测试的示例。

    首先,在运行部署时,需要在"/releases/next/Web". 中创建一个具有文档 root的虚拟主机。

    然后,在部署配置中添加如下所示的测试::

    $workflow = new TYPO3SurfDomainModelSimpleWorkflow();
    $smokeTestOptions = array(
     'url' => 'http://your/website/which/you/want/to/test',
     'remote' => TRUE,
     'expectedStatus' => 200,
     'expectedRegexp' => '/somethingYouExpectOnThePage/'
    );
    $workflow->defineTask('mycompany.mypackage:smoketest', TYPO3SurfTaskTestHttpTestTask::class, $smokeTestOptions);
    $workflow->addTask('mycompany.mypackage:smoketest', 'test', $application);

    HTTP测试具有以下选项:

    最重要的选项:

    • URL ( 必选): 应该加载的URL
    • 远程:如果 true,则通过命令行CURL通过远程主机上的SSH通道触发冒烟测试。 如果 false,则从部署主机触发它。
    • expectedStatus: 应为HTTP状态代码
    • expectedHeaders: 预期的HTTP header 字符串( 可以以是多行字符串,每个 header 都位于单独的行中)
    • expectedRegexp: 测试针对HTTP响应的内容的正则表达式

    进一步的选项:

    • 超时( 仅在 remote=FALSE ): 要使用的HTTP超时
    • 端口( 仅在 remote=FALSE ): 要使用的HTTP端口
    • 方法( 仅在 remote=FALSE ): 要使用的HTTP方法( 默认获取)
    • 用户名( 仅在 remote=FALSE ): HTTP身份验证用户名
    • 口令( 仅在 remote=FALSE ): HTTP身份验证密码
    • 数据( 仅在 remote=FALSE ): HTTP负载
    • 代理( 仅在 remote=FALSE ): 要使用的HTTP代理
    • proxyPort ( 仅在 remote=FALSE ): 要使用的HTTP代理端口
    • additionalCurlParameters ( 仅在 remote=TRUE ): 直接传递给CURL的参数列表。 对 比如 禁用SSL证书检查尤其有用( 使用 --insecure )

    将cherry挑选到Git仓库: POST签出命令

    当你想在签出后直接执行一些命令,比如cherry拣选not-yet-committed错误,你可以在应用程序上设置 gitPostCheckoutCommands 选项,作为一个二维的array 。

    键包含命令应该执行的路径,而值是另一个包含命令本身的array 。

    示例:

    $application->setOption('gitPostCheckoutCommands', array(
     'Packages/Framework/Neos.Flow/' => [
     'git fetch https://github.com/neos/flow-development-collection.git refs/heads/somefix',
     'git cherry-pick FETCH_HEAD'
     ]
    ));

    环境变量

    • SURF_WORKSPACE,定义保存冲浪工作区的位置( 默认: ~/.surf/workspace)

    常见问题

    某些提供者可能有SSH速率限制

    源和详细信息:https://karsten.dambekalns.de/blog/using-ssh-controlmaster-with-typo3-surf.html

    SSH为后续的连接尝试重用现有的SSH连接提供了一种方法。

    将类似于 ~/.ssh/config的内容添加到中,以便重用现有的SSH连接:

    Host myhost.uberspace.de
    ControlMaster auto
    ControlPath/tmp/ssh_mux_%h_%p_%r
    ControlPersist 600

    从源构建一个 Surf

    冲浪是使用线索/phar composer插件构建的,过程很简单:

    • 下载最新的phar-composer.phar
    • cd your/surf/clone
    • php phar-composer.phar build.

    生成的surf.phar 应该作为expectd工作。

    版权

    部署包是在GNU通用 public 许可证。版本 3或者更高版本下授权的。 最初的开发是由 networkteam - Flow框架 Agentur 赞助的。




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语