我尝试使用GitLab CI将Angular 4应用部署到Firebase,但它失败了。
这是我的CI配置:
image: node:latest
cache:
paths:
- node_modules/
stages:
- setup
- build
- deploy
setup:
stage: setup
script:
- npm install
only:
- master
build:
stage: build
script:
- npm install -g @angular/cli
- ng build -prod
only:
- master
deploy:
stage: deploy
script:
- npm install -g @angular/cli
- npm install -g firebase-tools
- ng build -prod
- firebase use --token $FIREBASE_DEPLOY_KEY production
- firebase deploy -m "Pipeline $CI_PIPELINE_ID, build $CI_BUILD_ID" --non-interactive --token $FIREBASE_DEPLOY_KEY
only:
- master
它在构建阶段失败了,我认为它导致了@ angular / cli install命令。
此外,还有构建阶段的日志:http://pasted.co/8d06985e
答案 0 :(得分:3)
由于某种原因,全局安装的软件包不会添加到PATH中,也不可用。我正在做的是使用相对路径(最新版本的np可执行文件,如ng
安装在node_modules/.bin
子文件夹中)
build:
stage: build
script:
- npm install @angular/cli
- ./node_modules/.bin/ng build -prod
答案 1 :(得分:1)
您应在package.json
中配置构建脚本:
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build --prod",
},
由于在设置阶段已经在运行npm install
,所以不应在构建阶段运行npm install -g @angular/cli
。相反,只需调用构建脚本:
build:
stage: build
script:
- npm run build
这样,您可以避免在每个阶段都创建构建,而不必使用在安装阶段已经下载的本地Angular CLI。
或者,如果您不想在package.json
中添加构建脚本,则仍然可以在构建阶段直接使用本地Angular CLI,如下所示:
build:
stage: build
script:
- npm run ng -- build --prod
诚然,这有点丑陋,但确实有助于避免全局重新安装Angular CLI。
上述脚本的丑陋版本(使用npx
,仅适用于节点> 5.2)如下:
build:
stage: build
script:
- npx ng build --prod
答案 2 :(得分:0)
您不应该使用$(npm bin)来对路径进行硬编码...它将生成指向closes bin文件夹的路径。
答案 3 :(得分:-1)
如果您使用角度项目,则脚本中的代码就足够了
script:
- apk add --no-cache git
- npm install
- npm install -g bower
- bower install --allow-root
- npm run-script build
npm install已经安装了package.json