部署Vue+;作为单个二进制文件转到Heroku
我已经合并了我的独立前端和后端回购到一个单一的。我的gitlab ci管道在单独的项目中工作得非常好,但我无法将其作为单个项目来工作 单个后端项目的管道:部署Vue+;作为单个二进制文件转到Heroku,heroku,gitlab,gitlab-ci,Heroku,Gitlab,Gitlab Ci,我已经合并了我的独立前端和后端回购到一个单一的。我的gitlab ci管道在单独的项目中工作得非常好,但我无法将其作为单个项目来工作 单个后端项目的管道: ... staging: image: ruby stage: deployment script: - apt-get update -qy - apt-get install -y ruby-dev - gem install dpl - dpl --provider=heroku --app
...
staging:
image: ruby
stage: deployment
script:
- apt-get update -qy
- apt-get install -y ruby-dev
- gem install dpl
- dpl --provider=heroku --app=$HEROKU_APP_STAGING --api-key=$HEROKU_API_KEY
environment:
name: Staging
only:
- staging
...
build site:
image: node
stage: build
script:
- yarn install --progress=false
- yarn build
artifacts:
expire_in: 1 week
paths:
- dist
staging:
image: ruby
stage: deployment
script:
- apt-get update -qy
- apt-get install -y ruby-dev
- gem install dpl
- dpl --provider=heroku --app=$$HEROKU_APP_STAGING --api-key=$HEROKU_API_KEY
environment:
name: Staging
only:
- staging
单个前端项目的管道:
...
staging:
image: ruby
stage: deployment
script:
- apt-get update -qy
- apt-get install -y ruby-dev
- gem install dpl
- dpl --provider=heroku --app=$HEROKU_APP_STAGING --api-key=$HEROKU_API_KEY
environment:
name: Staging
only:
- staging
...
build site:
image: node
stage: build
script:
- yarn install --progress=false
- yarn build
artifacts:
expire_in: 1 week
paths:
- dist
staging:
image: ruby
stage: deployment
script:
- apt-get update -qy
- apt-get install -y ruby-dev
- gem install dpl
- dpl --provider=heroku --app=$$HEROKU_APP_STAGING --api-key=$HEROKU_API_KEY
environment:
name: Staging
only:
- staging
然后我决定将这两个项目合并在一起。项目结构如下所示:
Project
|
+-- backend
|
+-- frontend
| |
| +-- dist
| |
| +-- package.json
|
+-- Procfile
|
+-- .gitlab-ci.yml
Go后端以静态路由为Vue前端提供服务。因此,我需要在后端之前构建前端,然后在后端构建中引用生成的dist目录
这是程序文件:
web: backend
这是我的gitlab-ci.yml的当前状态:
...
build frontend:
image: node
stage: frontend
script:
- cd frontend
- yarn install --progress=false
- yarn build
artifacts:
name: "frontend"
expire_in: 1 week
paths:
- frontend/dist
build backend:
image: golang
stage: backend
script:
- cd backend
- go build
- ls -la
artifacts:
name: "backend"
expire_in: 1 week
paths:
- backend/backend
staging:
image: ruby
stage: deployment
script:
- apt-get update -qy
- apt-get install -y ruby-dev
- gem install dpl
- dpl --skip_cleanup --provider=heroku --app=$HEROKU_APP_STAGING --api-key=$HEROKU_API_KEY
environment:
name: Staging
only:
- staging
此版本的管道在部署时失败,出现以下错误:
-----> App not compatible with buildpack: https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/go.tgz
More info: https://devcenter.heroku.com/articles/buildpacks#detection-failure
! Push failed
deploy failed
没有进一步的信息来检查到底上传了什么。据我理解,它应该是二进制的,不应该失败
我做错了什么或者我的误解是什么
编辑:
更新的暂存部分:
staging:
image: ruby
stage: deployment
script:
- ./detect backend
- cd backend
- apt-get update -qy
- apt-get install -y ruby-dev
- gem install dpl
- ls -la ../frontend/dist
- ls -la
- dpl --skip_cleanup --provider=heroku --app=$HEROKU_APP_STAGING --api-key=$HEROKU_API_KEY
- ls -la
返回:
$ ./detect backend
Go
$ ls -la
total 30896
drwxrwxrwx 5 root root 4096 Sep 21 11:39 .
drwxrwxrwx 5 root root 4096 Sep 21 11:03 ..
drwxrwxrwx 2 root root 4096 Sep 18 15:03 controllers
-rw-rw-rw- 1 root root 1306 Sep 21 10:11 go.mod
-rw-rw-rw- 1 root root 56556 Sep 21 10:11 go.sum
-rw-rw-rw- 1 root root 251 Sep 18 13:14 main.go
-rwxr-xr-x 1 root root 31527936 Sep 21 11:38 backend
drwxrwxrwx 2 root root 4096 Sep 18 13:14 middleware
drwxrwxrwx 2 root root 4096 Sep 18 13:14 model
...
Detected the following main packages to install:
backend
-----> Running: go install -v -tags heroku backend
...
github.com/jackc/pgx/v4
github.com/jackc/pgx/v4/stdlib
! Push rejected, failed to compile Go app.
! Push failed
deploy failed
运行此
detect
脚本是为了检查您的项目是否与heroku-buildpack-go兼容。嗨,我签出了您引用的脚本。正如您在我的编辑中看到的,它与heroku buildpack兼容。你知道为什么这一推现在被拒绝了吗?