AfterInstall

时间:2016-01-06 19:11:55

标签: amazon-web-services amazon-s3 yaml

第一次尝试使用CodeDeploy部署Django项目时,我在AfterInstall阶段一直遇到以下错误:

Error Code: ScriptFailed
Script Name: /setup.sh
Message: Script at specified location: /setup.sh failed with exit code 2
Log Tail: LifecycleEvent - AfterInstall
Script - /setup.sh
[stderr]python: can't open file 'setup_start.py': [Errno 2] No such file or directory

这可能是因为我误解了AppSpec的files部分。以下是我为该部分所做的事情的片段:

files:
  - source: ./BlackBoxes
    destination: project/BlackBoxes
  - source: ./Documentation
    destination: project/Documentation
  - source: ./manage.py
    destination: project
  - source: ./setup_start.py
    destination: project
  ...

我确实在S3存储桶上手动创建project文件夹,但没有子文件夹。

AfterInstall部分:

hooks:
  ...
  AfterInstall:
    - location: /setup.sh
      timeout: 180

我最初认为source应该是指文件/目录相对于我本地开发机器上项目目录的根目录的相对路径。我还假设将自动创建S3存储桶中不存在的任何文件夹。显然,我误解了CodeDeploy的一些内容,很可能与AppSpec文件有关。我到底做错了什么部署以及我应该做什么呢?

1 个答案:

答案 0 :(得分:1)

files部分出错了。您可以在此处告知代码部署:“将此目录/文件从我的存储库放置到我的EC2实例上的此位置”。您只需为部署的内容执行此操作,您不需要为部署挂钩脚本执行此操作。有关此部分的详细信息,请参阅docs

在一个钩子中,该位置是来自repo根目录的钩子脚本的相对路径。因此/setup.sh不正确 - >你需要给它相对的路径。同样,docs是阅读更多内容的地方。

我通常做的是在我的仓库的根目录中,我创建了一个名为eg的文件夹。脚本和我存储钩子脚本。

说我的repo目录结构如下所示:

application_code/
scripts/
appspec.yml

然后我可以像这样设置我的appspec.yml:

version: 0.0
os: linux
files:
  - source: application_code
    destination: /desired/code/location #path to where the code should be put on the instance
hooks:
  ApplicationStop:
    - location: scripts/some_script.sh
      timeout: 300
      runas: root

一旦您全面阅读documentation,代码部署就很容易使用。在那之前,你将继续遇到这样的问题。

祝你好运! :)