通过AWS CodeDeploy部署时遇到两个问题。 我正在尝试将CodeCommit的代码部署到EC2 ubuntu实例。
在appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu
hooks:
ApplicationStart:
- location: scripts/ApplicationStart.sh
timeout: 300
runas: ubuntu
在启动pm2之前,需要将几个配置文件放置在应用程序中的正确位置。我还假设,因为我在appspec.yml中将runas设置为ubuntu,所以bash脚本将位于/ home / ubuntu。
我的/ home / ubuntu有
config/ backend/ frontend/
看起来像代码部署不会覆盖以前的部署,因此如果我在目录中有backend /和frontend /文件夹,它将在安装阶段失败。
在ApplicationStart.sh
#!bin/bash
sudo cp config/config1.json backend/config/config1.json
sudo cp config/config2.json backend/config/environments/development/config2.json
sudo cp config/config3.json frontend/config3.json
sudo pm2 kill
cd backend
sudo npm install
sudo pm2 start "strapi start" --name backend
cd ../frontend
sudo npm install
sudo pm2 start "npm start" --name frontend
在ApplicationStart阶段,它给了我以下错误。
LifecycleEvent - ApplicationStart
Script - scripts/ApplicationStart.sh
[stderr]bash: /opt/codedeploy-agent/path/to/deployment/scripts/ApplicationStart.sh: bin/bash:
bad interpreter: No such file or directory
我在/ home / ubuntu上运行相同的bash文件。工作正常。
问题1。 -如何在没有错误的情况下运行BeforeInstall.sh?是否存在路径问题或我尝试做的其他事情,但我不应该做?
问题2。 -当目录(/ home / ubuntu)中已经有应用程序文件夹时,如何让代码部署覆盖以前的部署? -是否在安装前阶段手动删除目录?
答案 0 :(得分:1)
您在bin/bash
的{{1}}之前缺少斜杠。
应为#!bin/bash
。