CodeDeploy 失败“停止:找不到命令”

问题描述 投票:0回答:2

我正在尝试通过 CodePipeline 部署 React 应用程序;我的 3 个步骤是

  • Github 源码(通过)
  • CodeBuild(通过)
  • 代码部署(失败)

构建规范.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 进行部署的正确方法是什么吗?非常感谢

日志:

amazon-web-services nginx aws-codepipeline aws-codebuild aws-code-deploy
2个回答
0
投票

尝试更改您的应用程序停止挂钩:

#!/bin/bash
service nginx stop

补充:

尝试在您的实例 EC2 中执行停止 nginx 的命令,而不是来自 CodeDeploy,就像 root / ec2-user 可能是它的权限 Idk,但是尝试从命令中修复 nginx 的状态,一旦修复它,您可以重新- 运行 CodeDeploy 作业,错误不是来自 CodeDeploy,而是来自命令。

你看到 127 代码,这意味着找不到命令。首先在 EC2 内的终端中修复它,然后重新运行 CodeDeploy 作业


0
投票

这里的文档讨论了 ApplicationStop 第一次没有运行,所以第一次运行通过然后第二次运行失败是有道理的:

https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html

© www.soinside.com 2019 - 2024. All rights reserved.