4

我正在研究 Puppet 作为我们未来在我们商店中的部署和配置工具,但现在我被困在如何通过 Puppet 部署来制作一个聪明的持续集成/交付工具链。

在我们的任何环境(dev、test、qa、demo、prod)中,我们都有一系列组件。我们需要能够单独部署每个组件,甚至可能同时部署。

我想要一种方法来启动(通过脚本)单个组件包(= Puppet 模块)的部署并收集其输出和成功状态。仅仅等待预定的代理拉取,或者在环境中的每个节点上执行“puppet agent --test”是不够的,因为它可能会获取其他待处理的更改(我不知道是否还有其他组件在部署过程)。

在我的工具链中,我希望单独记录组件 A 和组件 B 的部署输出和状态,而不是混淆。

所以我的问题是:我可以使用 puppet 一次部署一个命名包(模块)吗?

如果没有,当我沿着这条路行驶时,我在哪里拐错了?

我意识到使用复制到每个节点的模块和清单的无主 Puppet 设置也许可以做到,但恕我直言,无主 Puppet 设置有悖于 Puppet 的目的。

PS:我认为在 Damon Edwards 的将 DevOps 工具集成到服务交付平台中的非常有启发性的视频中,我想要实现的被称为“定向编排” (时间戳在 22:30 左右)。

4

3 回答 3

3
  • 所以我的问题是:我可以使用 puppet 一次部署一个命名包(模块)吗?

是的,您可以通过puppet apply. 首先,您需要创建一个 moduledir 和一个包含清单的模块。例如:

  /scratch/user/puppet/local/  # This is your modulepath for local deployment

  # Following contains the manifests for a module name "localmod"
  /scratch/user/puppet/local/localmod/manifests/init.pp 

  # example content of init.pp
  class localmod {
    notify{"I am in in local module....":}
  }

在该本地机器上,您可以通过以下方式测试此模块puppet apply

 puppet apply -v --modulepath=/scratch/user/puppet/local -e "include localmod"
 echo $? # Get the exit status of the above command
于 2013-10-04T15:32:13.137 回答
2

我在您的视频点观看了视频。您可以执行两种类型的自动化。

应用程序构建/部署自动化,可以通过 maven/ant (Build) 和 ant/capistrano/chrome/bash/msdeploy (Deploy) 或在该幻灯片上称为“安装程序”来实现。

系统/基础设施自动化可以通过 Chef/Puppet/CFEngine 实现。

这个问题似乎是......“我如何使用 puppet 构建应用程序(暗示为系统自动化工具)”

很简单,圆孔中的椭圆形工具。(我没说正方形)

在我的公司,我们使用 Jenkins 和 Build Pipeline Integration 插件来构建大量的多组件项目。例如,Java 应用程序将在构建作业中使用 ant,下一个链式作业将是使用 Capistrano 部署应用程序的“部署到开发”作业,然后链中的下一个作业是“配置开发”,它调用Chef 更新 DEV 环境中的系统配置。Chef 用于配置应用程序。这些作业中的每一个都可以设置为自动和顺序运行。

于 2013-10-03T21:24:51.583 回答
1

没有主人的 Puppet 设置有点违背 Puppet 的目的。

只要你打折

  1. 丰富的 DSL 木偶必须提供
  2. 这么多同行评审的社区模块

否则,这样的事情会给你远程定向编排。

#update manifests etc (version control is the source of truth)
ssh user@host git pull
#run puppet
ssh user@host sudo puppet-apply
于 2013-10-03T11:08:01.840 回答