CodeDeploy 运行 过时的 appspec 文件?
CodeDeploy running outdated appspec file?
我是 AWS CodeDeploy 的新手,事实上,我只是在试验。
我正在尝试使用 CircleCI 2.0 和 AWS CodeDeploy 处理持续集成,这样当我将对我的 django 项目的更改推送到 github 中的开发时,它会在 CircleCI 中构建,然后将部署推送到 S3然后将更改部署到 EC2。
我在 CodeDeploy 中完成了所有配置,并且我从 github 中的一个人那里复制了 appspec,他将 CodeDeploy 与 Django/DRF 项目(例如我的)一起使用。唯一的区别是他在他的 EC2 实例中使用了另一个内核(我认为是 AWS linux)而我使用的是 ubuntu。所以我不得不在每个 hooks
部分的 runas
部分更改用户名。我第一次 运行 aws cli 中的 create-deployment 命令部署失败并显示此消息:
LifecycleEvent - ApplicationStop
Script - scripts/stop_application.sh
[stderr]No passwd entry for user 'ec2-user'
事实证明,我忘记更改 ApplicationStop
挂钩中的 runas
用户。然后我改变了它,再次进行了推送和创建部署,但错误仍然是一样的。我是否需要执行其他操作才能考虑应用规范中的更改,或者为什么会发生这种情况?
这里是 appspec.yml 文件:
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/taptop_web
permissions:
- object: /home/ubuntu
pattern: "**"
owner: ubuntu
group: ubuntu
hooks:
BeforeInstall:
- location: scripts/clean_instance.sh
timeout: 6000
runas: root
AfterInstall:
- location: scripts/install_os_dependencies.sh
timeout: 6000
runas: root
- location: scripts/install_python_dependencies.sh
timeout: 6000
runas: ubuntu
- location: scripts/migrate.sh
timeout: 6000
runas: ubuntu
ApplicationStart:
- location: scripts/start_application.sh
timeout: 6000
runas: ubuntu
ApplicationStop:
- location: scripts/stop_application.sh
timeout: 6000
runas: ubuntu
还有stop_application.sh
#!/usr/bin/env bash
cd /home/ubuntu/taptop_web
ps auxw | grep runserver | awk '{print }' | xargs kill
要解决您的问题,您唯一需要做的就是成功部署。它只是看起来好像没有更新,因为当您进行部署时,它将 运行 ApplicationStop
来自以前的修订版。这常常令人困惑,但它是这样工作的,因为只有一个修订版应该知道如何停止它自己的应用程序——如果停止命令在修订版之间发生变化,新的停止命令将不起作用。
话虽如此,客户的 ApplicationStop
脚本由于脚本中的问题而失败的情况并不少见,因此部署将在没有干预的情况下不断失败。如果您有问题,请按照 this guide 摆脱困境。
我是 AWS CodeDeploy 的新手,事实上,我只是在试验。
我正在尝试使用 CircleCI 2.0 和 AWS CodeDeploy 处理持续集成,这样当我将对我的 django 项目的更改推送到 github 中的开发时,它会在 CircleCI 中构建,然后将部署推送到 S3然后将更改部署到 EC2。
我在 CodeDeploy 中完成了所有配置,并且我从 github 中的一个人那里复制了 appspec,他将 CodeDeploy 与 Django/DRF 项目(例如我的)一起使用。唯一的区别是他在他的 EC2 实例中使用了另一个内核(我认为是 AWS linux)而我使用的是 ubuntu。所以我不得不在每个 hooks
部分的 runas
部分更改用户名。我第一次 运行 aws cli 中的 create-deployment 命令部署失败并显示此消息:
LifecycleEvent - ApplicationStop
Script - scripts/stop_application.sh
[stderr]No passwd entry for user 'ec2-user'
事实证明,我忘记更改 ApplicationStop
挂钩中的 runas
用户。然后我改变了它,再次进行了推送和创建部署,但错误仍然是一样的。我是否需要执行其他操作才能考虑应用规范中的更改,或者为什么会发生这种情况?
这里是 appspec.yml 文件:
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/taptop_web
permissions:
- object: /home/ubuntu
pattern: "**"
owner: ubuntu
group: ubuntu
hooks:
BeforeInstall:
- location: scripts/clean_instance.sh
timeout: 6000
runas: root
AfterInstall:
- location: scripts/install_os_dependencies.sh
timeout: 6000
runas: root
- location: scripts/install_python_dependencies.sh
timeout: 6000
runas: ubuntu
- location: scripts/migrate.sh
timeout: 6000
runas: ubuntu
ApplicationStart:
- location: scripts/start_application.sh
timeout: 6000
runas: ubuntu
ApplicationStop:
- location: scripts/stop_application.sh
timeout: 6000
runas: ubuntu
还有stop_application.sh
#!/usr/bin/env bash
cd /home/ubuntu/taptop_web
ps auxw | grep runserver | awk '{print }' | xargs kill
要解决您的问题,您唯一需要做的就是成功部署。它只是看起来好像没有更新,因为当您进行部署时,它将 运行 ApplicationStop
来自以前的修订版。这常常令人困惑,但它是这样工作的,因为只有一个修订版应该知道如何停止它自己的应用程序——如果停止命令在修订版之间发生变化,新的停止命令将不起作用。
话虽如此,客户的 ApplicationStop
脚本由于脚本中的问题而失败的情况并不少见,因此部署将在没有干预的情况下不断失败。如果您有问题,请按照 this guide 摆脱困境。