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 实例

CodeDeploy 的 IAM 问题

CodeDeploy 的简单 IAM 问题

自动缩放组设置为 0 个实例时的 AWS Codedeploy

CodeDeploy 未部署到新的自动缩放实例

如何设置AWS CodeDeploy和EC2 CodeDeploy安全环境