这些天我正在为我的项目苦苦挣扎GitLab CI设置。设置并不像Travis CI那么简单。我花了很多时间调试这个,而我发现的所有内容都不符合我的要求
我有一个使用rvm
和npm
以及postgresql
的Rails项目。我构建了一个安装了rvm
和npm
的自定义Docker镜像。但是,在运行之前,我必须获得与ruby
中相对应的node
和.gitlab-ci.yml
版本:
image: "my-rvm-npm-image"
services:
- postgres:9.3-alpine
variables:
POSTGRES_DB: db
POSTGRES_USER: user
POSTGRES_PASSWORD:
cache:
untracked: true
key: "$CI_BUILD_REF_NAME"
paths:
- node_modules/
stages:
- build
- rspec
- npm
build:
stage: build
script:
- sudo chown -R $(whoami) /cache
- /bin/bash -l -c "rvm install $(cat .ruby-version)
&& rvm use $(cat .ruby-version)
&& gem install bundle && bundle install --jobs $(nproc) --path /cache
&& source ~/.nvm/nvm.sh && nvm install && npm install npm -g && npm install
&& bundle exec rake db:test:prepare"
rspec:
stage: rspec
script:
- bundle exec rake
npm:
stage: npm
script:
- npm test
请注意,此.gitlab-ci.yml
文件仍为failed
。 bundle install
将与GitLab运行器配置中的/cache
一样:
[[runners]]
name = "xxxx"
url = "URLabc.com"
token = "myprojectoken"
executor = "docker"
[runners.docker]
tls_verify = false
image = "my-rvm-npm-image"
privileged = true
disable_cache = false
volumes = ["/home/ci/cache:/cache", "/home/ci/builds:/builds"]
[runners.cache]
builds
和cache
文件夹是主机绑定的。这样我就可以为下一次构建保留bundle install
缓存。
build
个职位通过,但rspec
和npm
失败/bin/bash: bundle: command not found
。似乎bundle
没有传递给其他工作。我知道我应该使用artifacts
传递给其他工作,但我已经将它作为缓存,我应该有
我想实现这些目标:
bundle install
,因为从头开始需要10~15分钟重建,并传递给rspec
作业来运行测试。 node_modules
缓存npm install
并传递给npm
工作。rvm
和npm
安装的任何建议,因为我不希望在每个命令之前使用丑陋的方式bash -l -c
。