【问题标题】:AWS CodeDeploy ScriptFailed Error in AfterInstallAfterInstall 中的 AWS CodeDeploy ScriptFailed 错误
【发布时间】:2016-04-11 00:02:32
【问题描述】:

第一次尝试使用 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 文件有关。我在部署中到底做错了什么,我应该怎么做?

【问题讨论】:

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


    【解决方案1】:

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

    在钩子中,位置是钩子脚本从仓库根目录到的相对路径。所以/setup.sh 不正确-> 你需要给它相对路径。同样,docs 是阅读更多内容的地方。

    我通常做的是在我的 repo 的根目录中,我创建一个名为 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 后,Code Deploy 使用起来很简单。在那之前,你会不断遇到这样的问题。

    祝你好运! :)

    【讨论】:

    • 好吧,这几乎回答了我的问题。我现在意识到,由于项目使用 docker-compose,我只需要对我正在尝试的方法采取不同的方法。我应该为此使用 ECS,对吧?
    • 是的,Docker ECS 是最好的选择。
    • 有趣的是,我们决定不使用 ECS。我们实际上可以直接在 EC2 实例上构建和运行我们的容器,只要我们有最新的 docker 并且记得在我们的 AfterInstall 脚本中运行 service docker start。由于 docker-compose 的内存和磁盘使用量,我们还需要从 t1.micro 切换到 m3.medium 并添加更多磁盘空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2016-01-23
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多