AWS CodeDeploy 与 Bamboo
AWS CodeDeploy with Bamboo
我们开发了一个 NodeJS 应用程序,我们想在亚马逊云中启动它们。
我们在其他 Atlassian 应用程序中集成了“Bamboo”。 Bamboo 将构建文件从 Amazon 传输到 S3 Bucket。
问题是:如何将应用程序从 S3 移动并启动到 EC2 实例?
您可以在附件中找到我的appspec.yml,在我的构建目录中有以下文件:
- 客户 | index.html 等文件
- 服务器 | server.js 和 socketio.js
等文件
- appspec.yml
- 自述文件
有人有想法吗?我希望它包含您需要的所有重要信息。
谢谢 :D
附件
version: 1.0
os: linux
files:
- source: /
destination: /
更新
我刚刚意识到您的 appspec.yml
似乎缺少部署 Node.js 应用程序(以及与此相关的大多数其他应用程序)的关键部分,即 hooks
部分。如 AWS CodeDeploy Application Specification Files 中所述,AppSpec 文件用于将每个部署作为一系列部署生命周期事件进行管理:
- During the deployment steps, the AWS CodeDeploy Agent will look up the current event's name in the AppSpec file's hooks section. [...] If
the event is found in the hooks section, the AWS CodeDeploy Agent will
retrieve the list of scripts to execute for the current step. [...]
例如,请参阅提供的 AppSpec file Example(仅供说明,您需要制作适合您的应用的自定义应用):
os: linux
files:
- source: Config/config.txt
destination: webapps/Config
- source: source
destination: /webapps/myApp
hooks:
BeforeInstall:
- location: Scripts/UnzipResourceBundle.sh
- location: Scripts/UnzipDataBundle.sh
AfterInstall:
- location: Scripts/RunResourceTests.sh
timeout: 180
ApplicationStart:
- location: Scripts/RunFunctionalTests.sh
timeout: 3600
ValidateService:
- location: Scripts/MonitorService.sh
timeout: 3600
runas: codedeployuser
没有这样的 ApplicationStart
命令,AWS CodeDeploy 没有任何关于如何处理您的应用程序的说明(请记住,CodeDeploy 是技术不可知论者,因此需要被告知如何启动应用程序服务器等) .
初始答案
部分 部署概述 What Is AWS CodeDeploy? 说明了典型 AWS CodeDeploy 部署的流程:
关于您的问题的关键方面是第 4 步:
- Finally, the AWS CodeDeploy Agent on each participating instance pulls the revision from the specified Amazon S3 bucket or GitHub
repository and starts deploying the contents to that instance,
following the instructions in the AppSpec file that's provided. [emphasis mine]
也就是说,一旦您启动了 AWS CodeDeploy 部署,一切都应该自动运行 - 因此,某些配置似乎不太正确,最常见的问题是部署组实际上不包含任何 运行 个实例。您是否已确认可以通过 AWS 管理控制台从 CodeDeploy 部署到您的 EC2 实例?
如果您登录 AWS CodeDeploy 控制台的 Deployments 列表,您会看到什么?
https://console.aws.amazon.com/codedeploy/home?region=us-east-1#/deployments
(相应地更改区域)
代码也将在 /opt/codedeploy-agent/deployment-root/<agent-id?>/<deployment-id>/deployment-archive
下载
并且 /opt/codedeploy-agent/deployment-root/<agent-id?>/<deployment-id>/logs/scripts.logs
中的日志
确保代理具有从 S3 存储桶下载版本的连接和权限。这意味着在实例中使用代理进行互联网连接 and/or(设置 http_proxy 以便 code_deploy 使用它),并在实例中设置 IAM 配置文件,使其具有读取 S3 存储桶的权限。
检查 codedeploy 代理的日志以查看它是否连接成功:/var/log/aws/codedeploy-agent/codedeploy-agent.log
您需要在代码部署中创建部署,然后使用代码部署中的下拉箭头和您的 S3 存储桶部署新修订 URL。但是它必须是 zip/tar.gz/tar
我们开发了一个 NodeJS 应用程序,我们想在亚马逊云中启动它们。
我们在其他 Atlassian 应用程序中集成了“Bamboo”。 Bamboo 将构建文件从 Amazon 传输到 S3 Bucket。
问题是:如何将应用程序从 S3 移动并启动到 EC2 实例?
您可以在附件中找到我的appspec.yml,在我的构建目录中有以下文件:
- 客户 | index.html 等文件
- 服务器 | server.js 和 socketio.js
等文件
- appspec.yml
- 自述文件
有人有想法吗?我希望它包含您需要的所有重要信息。
谢谢 :D
附件
version: 1.0
os: linux
files:
- source: /
destination: /
更新
我刚刚意识到您的 appspec.yml
似乎缺少部署 Node.js 应用程序(以及与此相关的大多数其他应用程序)的关键部分,即 hooks
部分。如 AWS CodeDeploy Application Specification Files 中所述,AppSpec 文件用于将每个部署作为一系列部署生命周期事件进行管理:
- During the deployment steps, the AWS CodeDeploy Agent will look up the current event's name in the AppSpec file's hooks section. [...] If the event is found in the hooks section, the AWS CodeDeploy Agent will retrieve the list of scripts to execute for the current step. [...]
例如,请参阅提供的 AppSpec file Example(仅供说明,您需要制作适合您的应用的自定义应用):
os: linux
files:
- source: Config/config.txt
destination: webapps/Config
- source: source
destination: /webapps/myApp
hooks:
BeforeInstall:
- location: Scripts/UnzipResourceBundle.sh
- location: Scripts/UnzipDataBundle.sh
AfterInstall:
- location: Scripts/RunResourceTests.sh
timeout: 180
ApplicationStart:
- location: Scripts/RunFunctionalTests.sh
timeout: 3600
ValidateService:
- location: Scripts/MonitorService.sh
timeout: 3600
runas: codedeployuser
没有这样的 ApplicationStart
命令,AWS CodeDeploy 没有任何关于如何处理您的应用程序的说明(请记住,CodeDeploy 是技术不可知论者,因此需要被告知如何启动应用程序服务器等) .
初始答案
部分 部署概述 What Is AWS CodeDeploy? 说明了典型 AWS CodeDeploy 部署的流程:
关于您的问题的关键方面是第 4 步:
- Finally, the AWS CodeDeploy Agent on each participating instance pulls the revision from the specified Amazon S3 bucket or GitHub repository and starts deploying the contents to that instance, following the instructions in the AppSpec file that's provided. [emphasis mine]
也就是说,一旦您启动了 AWS CodeDeploy 部署,一切都应该自动运行 - 因此,某些配置似乎不太正确,最常见的问题是部署组实际上不包含任何 运行 个实例。您是否已确认可以通过 AWS 管理控制台从 CodeDeploy 部署到您的 EC2 实例?
如果您登录 AWS CodeDeploy 控制台的 Deployments 列表,您会看到什么?
https://console.aws.amazon.com/codedeploy/home?region=us-east-1#/deployments
(相应地更改区域)
代码也将在 /opt/codedeploy-agent/deployment-root/<agent-id?>/<deployment-id>/deployment-archive
并且 /opt/codedeploy-agent/deployment-root/<agent-id?>/<deployment-id>/logs/scripts.logs
确保代理具有从 S3 存储桶下载版本的连接和权限。这意味着在实例中使用代理进行互联网连接 and/or(设置 http_proxy 以便 code_deploy 使用它),并在实例中设置 IAM 配置文件,使其具有读取 S3 存储桶的权限。
检查 codedeploy 代理的日志以查看它是否连接成功:/var/log/aws/codedeploy-agent/codedeploy-agent.log
您需要在代码部署中创建部署,然后使用代码部署中的下拉箭头和您的 S3 存储桶部署新修订 URL。但是它必须是 zip/tar.gz/tar