GitLab CI失败@ angular / cli

时间:2017-09-17 23:10:22

标签: gitlab-ci

我尝试使用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

4 个答案:

答案 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

中的所有库