irg*_*wer 6 gitlab gitlab-ci gitlab-ci-runner
我使用gitlab-ci来测试,编译和部署一个小型golang应用程序,但问题是阶段花费的时间比必要的长,因为它们每次都必须获取所有依赖项。
如何在两个阶段(测试和构建)之间保持golang依赖关系?
这是我当前的gitlab-ci配置的一部分:
test:
stage: test
script:
# get dependencies
- go get github.com/foobar/...
- go get github.com/foobar2/...
# ...
- go tool vet -composites=false -shadow=true *.go
- go test -race $(go list ./... | grep -v /vendor/)
compile:
stage: build
script:
# getting the same dependencies again
- go get github.com/foobar/...
- go get github.com/foobar2/...
# ...
- go build -race -ldflags "-extldflags '-static'" -o foobar
artifacts:
paths:
- foobar
Run Code Online (Sandbox Code Playgroud)
voi*_*ski 10
正如Yan Foto所提到的,您只能使用项目工作区中的路径。但是您可以$GOPATH按照extrawurst 博客的建议将 移动到您的项目中。
test:
image: golang:1.11
cache:
paths:
- .cache
script:
- mkdir -p .cache
- export GOPATH="$CI_PROJECT_DIR/.cache"
- make test
Run Code Online (Sandbox Code Playgroud)
这是一个非常棘手的任务,因为GitLab不允许在项目目录外进行缓存。一个快速而又肮脏的任务是将$GOPATH项目内某个目录下的内容(例如_GO)复制,缓存并在每个阶段开始时将其复制回$GOPATH:
after_script:
- cp -R $GOPATH ./_GO || :
before_script:
- cp -R _GO $GOPATH
cache:
untracked: true
key: "$CI_BUILD_REF_NAME"
paths:
- _GO/
Run Code Online (Sandbox Code Playgroud)
警告:这只是一个(相当丑陋的)解决方法,我自己尚未对其进行测试。它仅应显示可能的解决方案。
| 归档时间: |
|
| 查看次数: |
1942 次 |
| 最近记录: |