Angularjs + grunt + bower + Gitlab CI。测试设置
Angularjs + grunt + bower + Gitlab CI. Setup for testing
我有一个 GitLab CI 运行器,每次我在我的分支中推送代码时它都会运行。
问题是:我使用 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)
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://
我有一个 GitLab CI 运行器,每次我在我的分支中推送代码时它都会运行。 问题是:我使用 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)
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://