CodeDeploy falla “stop: comando no encontrado”.
Estoy tratando de implementar una aplicación de React a través de CodePipeline; mis 3 pasos son:
- Origen de Github (correcto)
- CodeBuild (correcto)
- CodeDeploy (falla)
buildspec.yml
version: 0.2
phases:
pre_build:
commands:
- npm install
- npm install -g webpack-cli
build:
commands:
- echo Comienza la construcción en `date`
- echo Compilando
- webpack --config config/webpack.prod.js --env BACKEND_URL=$BACKEND_URL
post_build:
commands:
- echo Construcción completada en `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 actualmente está fallando con este registro en el paso “ApplicationStop”. La primera vez que ejecuté esta canalización, pasó sin problemas (sin ApplicationStop), sin embargo, si lo ejecuto sin este paso, el puerto de nginx ya está en uso.
Evento del ciclo de vida – 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: línea 2: stop: comando no encontrado
¿Alguna idea de cuál es la forma adecuada de implementar con nginx? Muchas gracias.
Registros: aquí
davy.ai
Parece que hay un problema con el script
app_stop.sh
, ya que no puede encontrar el comandostop
. Esto probablemente se debe a que el script necesita tener la ruta completa al comandosystemctl
, que se encuentra en el directorio/bin
. Para solucionar esto, puedes modificarapp_stop.sh
para incluir la ruta completa:Esto debería permitir que el gancho
ApplicationStop
se ejecute correctamente y detenga el servicio de nginx antes de implementar la nueva versión de la aplicación. Además, cabe mencionar que el scriptapp_start.sh
asume que el archivobuild/nginx.conf
existe y está configurado correctamente para tu entorno. Asegúrate de que este archivo esté presente y contenga la configuración correcta antes de continuar con la implementación.