使用ci/cd部署heroku



我正试图用github操作构建一个CI/CD管道,以便构建我的应用程序并将其部署到heroku。我使用了以下YAML文件。但它显示了github操作中的错误。有人能帮我解决这个问题吗。我的履历很重。我的项目结构是大商店|-后端|-前端|-package.json
错误-

Run npm run build

sh:1:反应脚本:找不到

npm ERR!代码ELIFECYCLEnpm ERR!系统调用生成npm ERR!文件shnpm ERR!errno ENOENTnpm ERR!frontend@0.1.0内部版本:react-scripts buildnpm ERR!生成ENOENT

bigshop@1.0.0build/home/runner/work/bigshopcicd/bigshopcidcd前端&npm运行-构建

frontend@0.1.0build/home/runner/work/bigshopcicd/bigshopcd/frontendreact脚本构建

npm ERR!npm ERR!在处失败frontend@0.1.0构建脚本。npm ERR!这可能不是npm的问题。上面可能有额外的日志输出。npm WARN Local package.json存在,但缺少node_modules,你是想安装吗?

npm ERR!此运行的完整日志可在以下位置找到:npm ERR/home/runner/.npm/\logs/2021-12-23T08_13_25_954Z-debug.lognpm ERR!代码ELIFECYCLEnpm ERR!错误号1npm ERR!bigshop@1.0.0内部版本:cd frontend && npm run buildnpm ERR!退出状态1npm ERR!npm ERR!在处失败bigshop@1.0.0构建脚本。npm ERR!这可能不是npm的问题。上面可能有额外的日志输出。

npm ERR!此运行的完整日志可在以下位置找到:npm ERR/home/runner/.npm/\logs/2021-12-23T08_13_25_975Z-debug.log错误:进程已完成,退出代码为1。

pipeline.yml-

name: Deployment pipeline
on:
push:
branches:
- main
pull_request:
branches: [main]
types: [opened, synchronize]
jobs:
simple_deployment_pipeline:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: npm install
run: npm install
- name: build
run: npm run build
- name: deployment
uses: akhileshns/heroku-deploy@v3.12.12
if: ${{ github.event_name == 'push' && !contains(join(github.event.commits.*.message, ' ,'), '#skip') }}
with:
heroku_api_key: ${{secrets.HEROKU_API_KEY}}
heroku_app_name: bigshopcicd
heroku_email: fakirsumon78@gmmail.com
healthcheck: 'https://bigshopcicd.herokuapp.com/health'
checkstring: 'ok'
rollbackonhealthcheckfailed: true
- uses: actions/checkout@v2
- name: Bump version and push tag
uses: anothrNick/github-tag-action@eca2b69f9e2c24be7decccd0f15fdb1ea5906598
if: ${{ github.event_name == 'push' && !contains(join(github.event.commits.*.message, ' ,'), '#skip') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
WITH_V: true
DEFAULT_BUMP: patch
RELEASE_BRANCHES: main

package.json文件-

"scripts": {
"start": "node backend/server.js",
"dev": "set NODE_ENV=DEVELOPMENT& nodemon backend/server",
"prod": "set NODE_ENV=PRODUCTION& nodemon backend/server",
"seeder": "node backend/utils/seeder.js",
"build": "cd frontend && npm run build",
"heroku-postbuild": "NPM_CONFIG_PRODUCTION=false && npm install --prefix frontend && npm run build --prefix frontend"

},

您的npm install命令在不包含react依赖项的根包.json中运行安装。然后进入构建步骤/前端,并尝试使用那些未提取的react脚本

您可以使用npm的preinstall目标来安装前端依赖项

还要试着看看是否有可能将项目分为两个不同的项目,因为这种结构看起来很脆弱,实际上你失去了拥有单独后端/前端的优势。(加上你的脚本变得过于复杂(

EDIT:
Preinstall不是专门为安装节点模块而设计的,它只是一个步骤,您可以将它添加到您的包中。在安装步骤之前,npm将运行它。它可以包含任意脚本命令。在你的情况下,也许可以尝试:

"scripts": {
"preinstall": "cd frontend && npm install",
"start": "node backend/server.js",
"dev": "set NODE_ENV=DEVELOPMENT& nodemon backend/server",
"prod": "set NODE_ENV=PRODUCTION& nodemon backend/server",
"seeder": "node backend/utils/seeder.js",
"build": "cd frontend && npm run build"
}