CodeDeploy 失败“停止:找不到命令”
Posted
技术标签:
【中文标题】CodeDeploy 失败“停止:找不到命令”【英文标题】:CodeDeploy fails "stop: command not found" 【发布时间】:2022-01-15 05:01:26 【问题描述】:我正在尝试通过 CodePipeline 部署 React 应用程序;我的三个步骤是
Github 源(通过) CodeBuild(通过) CodeDeploy(失败)Buildspec.yml
version: 0.2
phases:
pre_build:
commands:
- npm install
- npm install -g webpack-cli
build:
commands:
- echo Build started on `date`
- echo Compiling
- webpack --config config/webpack.prod.js --env BACKEND_URL=$BACKEND_URL
post_build:
commands:
- echo Build completed on `date`
artifacts:
files:
- build/**/*
- public/**/*
- dist/**/*
- src/**/*
- config/**/*
- scripts/**/*
- package.json
- appspec.yml
Appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/server
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
ApplicationStop:
- location: scripts/app_stop.sh
timeout: 300
runas: root
BeforeInstall:
- location: scripts/before_install.sh
timeout: 300
runas: root
ApplicationStart:
- location: scripts/app_start.sh
timeout: 300
runas: root
app_stop.sh
#!/bin/bash
sudo systemctl stop nginx
before_install.sh
#!/bin/bash
cd /home/ec2-user/server
amazon-linux-extras install nginx1
app_start.sh
#!/bin/bash
cd /home/ec2-user/server
cp build/nginx.conf /etc/nginx/nginx.conf
cp -R dist /var/www/html/taxi-booker
nginx
CodeDeploy 当前在“ApplicationStop”步骤中出现此日志失败。我第一次运行这个管道时它通过了(没有 ApplicationStop)但是如果我在没有这一步的情况下运行它,则 nginx 端口已经在使用中。
LifecycleEvent - ApplicationStop
Script - scripts/app_stop.sh
[stderr]/opt/codedeploy-agent/deployment-root/9ce189ed-1f48-4cdb-b01f-e7cd8986c8b7/d-QUYBUBMKC/deployment-archive/scripts/app_stop.sh: line 2: stop: command not found
知道使用 nginx 部署的正确方法是什么吗?非常感谢
日志:
【问题讨论】:
【参考方案1】:尝试更改您的应用程序停止挂钩:
#!/bin/bash
service nginx stop
补充:
尝试执行命令以在您的实例 EC2 中停止 nginx,而不是来自 CodeDeploy,例如 root / ec2-user 可能是它的权限 Idk,但尝试从命令修复 nginx 的状态,一旦修复它,您可以重新运行 CodeDeploy 作业,错误不是来自 CodeDeploy,而是来自命令。
您看到 127 代码,这意味着找不到命令。首先在您的 EC2 内的终端中修复它,然后重新运行 CodeDeploy 作业
【讨论】:
我试了一下,收到了同样的错误 你能在你的实例中分享 codedeploy 的日志吗,比如 less /var/log/aws/codedeploy-agent/codedeploy-agent.log 用日志更新答案 尝试执行命令以停止实例 EC2 内的 nginx,而不是来自 CodeDeploy,如 root / ec2-user 可能其权限 Idk,但尝试从命令修复 nginx 的状态,一次您修复它,您可以重新运行 CodeDeploy 作业 感谢您的建议;我设法在我的 EC2 上运行“systemctl stop nginx”没问题,以及启动、状态等。但是在上面的部署管道中尝试该命令时,我仍然遇到同样的错误。以上是关于CodeDeploy 失败“停止:找不到命令”的主要内容,如果未能解决你的问题,请参考以下文章
AWS CodeDeploy Blue/Green with ASG - 失败的部署不断重启 EC2 实例