【问题标题】:Automating build installation process自动化构建安装过程
【发布时间】:2018-06-27 18:21:12
【问题描述】:

我在我公司的基于 SaaS 的产品上工作,该产品托管在私有云上。因此,每次开发团队提供新的 BOM 包时。在公共共享文件夹中,我们 - 测试团队将构建安装在我们的应用程序服务器(3 个多节点服务器,一个是主要的,另外两个是辅助的)上。

构建安装完全是手动完成的。在三个应用服务器(linux机器)上,我们遵循的步骤如下

  1. 停止所有应用服务器
  2. 从代码存储服务器复制最新的构建(复制 .zip 构建文件)
  3. 将文件夹解压到应用服务器中的文件夹(使用 unzip 命令)
  4. 在所有三个文件夹上运行现有运行构建的备份(命令类似于 - ant-f primaryBackup.xml, ant-f secondary backup.xml)
  5. 然后在所有三个服务器上运行安装命令类似于 - ant-f primaryInstall.xml, ant-f secondaryInstall.xml)
  6. 然后重启所有服务器,检查最新的构建是否成功应用。

问题:我想自动化整个过程,这样我只需要提供要安装的最新版本号,脚本会负责整个安装。

目前我不明白如何做到这一点?我应该从哪里开始?这可行吗?整个过程的shell脚本会是解决方案吗?

【问题讨论】:

    标签: linux unix scripting build-automation


    【解决方案1】:

    有许多构建自动化/持续部署工具可以帮助您找到自动化部署管道的解决方案。一些比较流行的配置自动化工具有 puppet、chef、ansible 和 saltstack。我只有 ansible 和 chef 的经验,但我的解释是 chef 是更“用户友好”的选项。我将从那里开始......(厨师使用 ruby​​ 语言,ansible 使用 python)。 我可以回答有关此的具体问题,但小时原始问题确实是开放式和广泛的。 免费教程:https://learn.chef.io/

    编辑:我不建议使用 bash 脚本来配置您的服务器/部署......这通常是混乱的,并且随着您的自动化增长(它可能会),您的代码将逐渐变得难以管理。使用诸如 chef 之类的东西,您可以为存储库中的新代码设置定期检查,并在检测到新代码时(或满足某些条件)进行部署。您可以在 ruby​​ 块中编写 strait bash 代码,该代码将远程停止/启动这样的服务(示例):

    bash 'Copying the conf file' do
        cwd "current/working/directory"
        user 'user_name'
        code <<-EOH
        nohup ./startservice.sh &
        sleep 2m
        nohup ./startservice.sh &
        sleep 3m
      EOH
    end
    

    例如从 git 复制代码...我在此示例中假设为 github,因为我不知道您的代码所在的位置:

    git "/opt/mysources/couch" do
      repository "git://git.apache.org/couchdb.git"
      reference "master"
      action :sync
      ssh_wrapper "/some/path/git_wrapper.sh"
    end
    

    假设您的代码在其他任何地方..例如竹子或詹金斯...有一个 ruby​​/chef 资源用于它或使用 strait ruby​​ 代码调用它的某种方式。

    这是“您”和您的团队必须为之制定策略的事情。

    您可以像这样使用 tar 资源解压文件:

    tar_package 'http://pgfoundry.org/frs/download.php/1446/pgpool-3.4.1.tar.gz' do
      prefix '/usr/local'
      creates '/usr/local/bin/pgpool'
    end
    

    或者使用通用的linux命令来喜欢这样:

    execute 'extract_some_tar' do
      command 'tar xzvf somefile.tar.gz'
      cwd '/directory/of/tar/here'
      not_if { File.exists?("/file/contained/in/tar/here") }
    end
    

    您可以按照我编写第一段代码的方式启动服务器(假设它们是服务。如果您需要重新启动实际的服务器,那么您可以运行init 6 或其他方式。

    这只是这些实用程序提供的灵活性的一个示例

    【讨论】:

    • 一些具体细节 - 正如我上面提到的备份现有正在运行的构建 - 这在主应用服务器上大约需要 20 分钟,在辅助服务器上需要几秒钟,所以我编写的自动化脚本将必须检查主服务器上的主备份日志,并检查它是否成功,然后在辅助服务器上运行备份命令 2。安装命令也是如此。在主服务器上安装构建需要一个小时,在辅助服务器上安装构建只需几秒钟,这里的安装日志也可用并且可以检查
    • 您还想知道什么?由于我对 Linux/shell 脚本的了解很少,所以我对您上面的回答有点迷茫?如果您对上述细节有更多了解,请告诉我
    • 如果您需要进一步的指导,请分享您需要回答的当前状态和具体问题,我很乐意为您提供帮助...但请使用具体信息。
    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 2010-09-06
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多