Angularjs + grunt + bower + Gitlab CI. Установка для испытания

у меня есть GitLab CI runner, который запускается каждый раз, когда я нажимаю код в своей ветке. Проблема в том, что я использую npm+bower для всех зависимостей, которые мне нужны, но я не хочу загружать все зависимости для каждого теста: это пустая трата сети и времени.

Итак, я придумал этот сценарий. В этом есть смысл?

touch ~/.bash_profile
npm config set prefix ~/npm
export PATH="~/npm/bin:$PATH"
source ~/.bash_profile
npm install
rm -f ~/bower/bower.json
cp bower.json ~/bower
pushd ~/bower
bower update
bower install
popd
mkdir bower_components
cp -r ~/bower/bower_components bower_components
grunt test

в любом случае, проблема, с которой я сталкиваюсь, - это всегда тайм-аут с bower:

bower angular-cookies#1.2.16                  ECMDERR Failed to execute "git ls-remote --tags --heads git://github.com/angular/bower-angular-cookies.git", exit code of #128 fatal: unable to connect to github.com: github.com[0: 192.30.252.128]: errno=Connection timed out

кроме того, он не закончил один раз, поэтому я не уверен, но кажется он повторно загружает все пакеты каждый раз.

Я попытался найти в сети, но ничего не нашел. Есть способ достичь того, чего я пытаюсь достичь? (Также с совершенно другой стратегией. У меня также есть ssh-доступ к runner)

1 ответов


обновление 2016

бегуны GitLab теперь используют .gitlab-ci.в формате YML это имеет поддержку кэша.

теперь это наш скрипт:

image: *****/frontend

stages:
  - test
  - deploy

before_script:
  - npm prune
  - npm install
  - bower prune --allow-root
  - bower install --allow-root

cache:
  paths:
    - node_modules/
    - bower_components/
  key: "$CI_BUILD_REPO"

sample_test:
  stage: test
  script:
    - grunt build
    - grunt test
    - grunt jscs --force
    - grunt jshint --force

sample_deploy:
  stage: deploy
  only:
    - master
    - development
  script:
    - grunt build babel uglify:dist
  artifacts:
    paths:
      - dist/

теперь самое интересное key: "$CI_BUILD_REPO" В разделе кэш - это кэш, чтобы быть одинаковым для всех построить в репо. Вот почему мы используем npm prune и bower prune - чтобы быть уверенным, что только модули, которые нам действительно нужны, находятся в сборке в конце

оригинал Ответ

так, в конце я использую этот скрипт:

rm -f ~/bower/bower.json
rm -f ~/bower/package.json
cp bower.json ~/bower
cp package.json ~/bower
pushd ~/bower
npm install
bower install
popd
cp -r ~/bower/bower_components .
cp -r ~/bower/node_modules .
grunt build
grunt test

кроме того, чтобы избежать таймаута от github, я использую https вместо git для загрузки кода с помощью команды

git config --global url."https://".insteadOf git://