

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Chef 部署挂钩
<a name="workingcookbook-extend-hooks"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

您可以实施自定义配方来执行所需的任务并将该配方分配到相应层的部署事件，从而自定义部署。一个替代方法是使用 Chef 部署挂钩运行您的自定义代码，这个方法有时候更简单，尤其是在您出于其他原因无需实施说明书时。此外，在部署后运行的自定义部署配方已由内置配方执行。利用部署挂钩，您可以在部署期间进行交互，例如，在已将应用程序的代码从存储库签出但尚未重新启动 Apache 时。

Chef 分四个阶段部署应用程序：
+ **签出**-从存储库下载文件
+ **迁移**-根据需要运行迁移
+ **符号链接**-创建符号链接
+ **重新启动**-重新启动应用程序

Chef 部署挂钩提供了一种自定义部署的简单方法，即在每个阶段完成后选择性地运行用户提供的 Ruby 应用程序。要使用部署挂钩，请实施一个或多个 Ruby 应用程序，然后将其放在您的应用程序的 `/deploy` 目录中。(如果您的应用程序没有 `/deploy` 目录，请在 `APP_ROOT` 级别创建一个。) 该应用程序必须具有以下名称之一，该名称决定了应用程序运行的时间。
+ `before_migrate.rb` 在签出阶段已完成但迁移尚未开始时运行。
+ `before_symlink.rb` 在迁移阶段已完成但符号链接尚未开始时运行。
+ `before_restart.rb` 在符号链接阶段已完成但重新启动尚未开始时运行。
+ `after_restart.rb` 在重新启动阶段完成后运行。

Chef 部署挂钩可使用标准节点语法访问节点对象，就像配方一样。部署挂钩还可访问您已指定的任何[应用程序环境变量](workingapps-creating.md#workingapps-creating-environment)的值。但是，您必须使用 `new_resource.environment["VARIABLE_NAME"] ` 访问该变量的值，而不是使用 `ENV["VARIABLE_NAME"]`。