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://