我正在学习如何使用CodePipeline,对于小型测试节点应用程序,CodeDeploy有问题。我的目标是为大型express + react应用程序实现CD,我需要使用来自AppSpec.yml的钩子。目前,其他一切都在工作,文件被复制等,它只是不触发脚本。我从BeforeInstall (从pm2删除进程)和ApplicationStart (用pm2开始应用程序)钩子开始,但现在我转向使用ApplicationStart with script从pm2中删除进程,以查看它是否有效。
我的AppSpec.yml:
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/api
permissions:
- object: /home/ubuntu/api/
owner: ubuntu
group: ubuntu
mode: "777"
# I use appStop.sh just to check if this works:
ApplicationStart:
- location: scripts/appStop.sh
runas: ubuntu
# I tried also running as root, still nothing
timeout: 60
appStop.sh:
#!/bin/bash
cd /home/ubuntu/api
pm2 delete 0
我尝试了很多东西,也把所有东西都作为root运行(虽然我更喜欢使用ubuntu用户)。
在/var/ log /aws/codedeploy中的日志文件中没有错误。
我还可以在/opt/codedeploy/deployment/.中看到reviev中的所有文件和脚本dir。
当我在home dir中手动运行appStop脚本时,它可以工作。看起来CodeDeploy代理只是没有运行脚本。
发布于 2022-04-16 15:40:44
好吧,看来我成功了。首先,我通过删除/opt/deployment-root/<deployment droup id>
、dir和/opt/deployment-root/deployment-instructions
清除了代码部署代理数据。
我也改变了位置,不知道这是否有帮助,但必须这样做,因为我决定与根用户,以使事情更容易。App现在在/var/www/api中。
我还使用pm2重新安装了所有js软件(节点、pm2、npm)。
我的工作AppSpec.yml:
version: 0.0
os: linux
files:
- source: /
destination: /var/www/api
permissions:
- object: /var/www/api/
mode: 775
type:
- file
- directory
hooks:
ApplicationStop:
- location: scripts/appStop.sh
runas: root
ApplicationStart:
- location: scripts/appStart.sh
runas: root
和工作脚本:
appStop.sh:
#!/bin/bash
cd /var/www/api
sudo pm2 delete 0
appStart.sh:
#!/bin/bash
cd /var/www/api
sudo pm2 start server.js
https://stackoverflow.com/questions/71897481
复制相似问题