innmind/tower

应用部署工具

2.2.0 2021-02-20 11:07 UTC

This package is auto-updated.

Last update: 2024-09-20 19:24:58 UTC


README

Build Status codecov Type Coverage

这是一个使用新方法部署代码库的命令行工具。不同于构建另一个工具,通过ssh发送一系列shell命令,Tower采用服务器作为树节点的方法,从一个节点触发子节点中的tower

配置

  • 每台服务器安装一个Tower
  • 部署服务器的配置位于本地
  • 节点只知道其邻居服务器的位置

优势

  • 只知道可以在服务器上部署什么(而不是如何部署)
  • 保留服务器上的部署方法
  • 如果操作更新,不会影响任何人
  • 易于级联部署(如果节点从父节点检索源代码)
  • 同一级别的节点可以并行部署(通过后台作业,松散的直接输出)
  • 命令在本地运行,所有操作都记录下来,因此您可以跟踪何时部署了环境

缺点

  • 节点需要知道如何连接到其邻居(如果节点被黑,子树将受到影响)(特定于ssh传输,tcp不受影响)
  • 节点需要知道如何连接到父节点以检索源代码(降低主存储库的负载)(只有您决定这样的策略)
  • 父节点和邻居之间的交叉关系

示例

              A (you)
             / \
            /   \
           /     \
   (prod) B       C (staging)
         / \       \
        /   \       \
       /     \       \
      D       E       F
      |       |
      |       |
      G       H

假设以下树中的B也是用于生产的,使用此工具可以轻松地在五台服务器上放置相同的Tower配置。要部署所有这些服务器,您只需运行命令tower ping B即可!或者,如果您只想部署H,以确保一切部署正常,连接到机器并在本地运行tower trigger或将此作为邻居添加到本地机器(A)并运行tower ping H。再次强调,这是一个树,您可以从任何地方开始。

但在正常情况下,您的机器的邻居将是BC

为了真正高效(即不过载VCS服务器),将邻居设置为从父节点检索代码。例如,将BC配置为您的VCS服务器作为git remoteDEB作为git remote,依此类推...

注意:我在这里讨论git,但您不必使用它

注意:在级联时,如果邻居部署失败,其子树将不会部署

另一个用例是您有一个用于应用程序的单个服务器,以及其他服务器用于支持第一个服务器所需的相关服务。您可以推断,使用这种树的概念,每次部署应用程序都会触发相关服务的部署(因此一切始终保持最新)。

安装

composer global require innmind/tower

配置

neighbours:
    _name_:
        url: ssh://example.com:80/path/to/config/on/neighbour/server.yml # scheme can be tcp or ssh, path only used via ssh
        tags: [foo, bar] # optional

exports: # optional
    - 'echo "ENV=value"' # contains list of env variables that will be available to each action

actions:
    - 'some bash command'

当配置所在的服务器被ping时,将运行actions集合中的命令。每个操作都将作为环境变量具有通过exports部分构建的变量,此数组必须是产生形式为ENV=value的输出的命令。

最后,neighbours部分是当配置所在的机器被ping时将被ping的服务器列表。您可以决定通过ssh(使服务器容易受到外部世界的影响,但这是最简单的方法)或通过tcp套接字(允许关闭所有直接访问机器,但容易受到DOS攻击)来ping服务器。

用法

通过ssh

在您的机器上配置一个包含以下内容的tower.yml文件

neighbours:
    gateway:
        url: ssh://gateway.com:22/path/to/configuration/on/gateway

完成后,您可以在该文件夹中运行tower ping gateway。这将通过端口22连接到gateway.com,移动到/path/to/configuration/on/gateway文件夹,并运行tower trigger命令;您需要在文件夹中创建一个tower.yml文件,该文件将描述要执行的操作或要ping的邻居。

通过tcp

在您的机器上配置一个包含以下内容的tower.yml文件

neighbours:
    gateway:
        url: tcp://gateway.com:1337

在服务器上,您需要创建一个类似名为tower.yml的文件,其中包含要运行的操作或要ping的邻居;然后在文件夹中运行tower listen 1337 -d。最后一个命令在端口1337上打开一个tcp连接并等待接收到的ping。

现在您可以在您的机器上运行tower ping gateway