第一次尝试使用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文件有关。我到底做错了什么部署以及我应该做什么呢?
答案 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,代码部署就很容易使用。在那之前,你将继续遇到这样的问题。
祝你好运! :)