我正在尝试通过 CodePipeline 部署 React 应用程序;我的 3 个步骤是
构建规范.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 进行部署的正确方法是什么吗?非常感谢
尝试更改您的应用程序停止挂钩:
#!/bin/bash
service nginx stop
补充:
尝试在您的实例 EC2 中执行停止 nginx 的命令,而不是来自 CodeDeploy,就像 root / ec2-user 可能是它的权限 Idk,但是尝试从命令中修复 nginx 的状态,一旦修复它,您可以重新- 运行 CodeDeploy 作业,错误不是来自 CodeDeploy,而是来自命令。
你看到 127 代码,这意味着找不到命令。首先在 EC2 内的终端中修复它,然后重新运行 CodeDeploy 作业
这里的文档讨论了 ApplicationStop 第一次没有运行,所以第一次运行通过然后第二次运行失败是有道理的:
https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html