我们有一个play2/scala
我们正在使用 gitlab ci 构建的应用程序。
Our .gitlab-ci.yml
(至少重要部分)如下所示:
image: hseeberger/scala-sbt
variables:
SBT_GLOBAL_BASE_DIR: "$CI_PROJECT_DIR/cache/.sbt"
IVY2_CACHE_DIR: "$CI_PROJECT_DIR/cache/.ivy2"
SBT_BOOT_DIR: "$CI_PROJECT_DIR/cache/.sbt/boot"
M2_HOME_DIR: "$CI_PROJECT_DIR/cache/.m2"
before_script:
# Log the sbt version
- sbt sbt-version
build:
stage: build
script:
- ./build.sh
with build.sh
:
sbt -Dsbt.global.base=$SBT_GLOBAL_BASE_DIR \
-Dsbt.ivy.home=$IVY2_CACHE_DIR \
-Dsbt.boot.directory=$SBT_BOOT_DIR \
compile
不幸的是,我们的管道总是运行大约 30-40 分钟,完成所有步骤(构建、验证、部署)。大部分时间都花在下载上sbt
一遍又一遍是什么really恼人的。
我可能还不够了解gitlab ci runners
但据我了解,通过使用hseeberger/scala-sbt https://hub.docker.com/r/hseeberger/scala-sbt/~/dockerfile/如图所示,sbt
应该是全球可用的,并且不需要下载它。
然后还有this https://docs.gitlab.com/ee/ci/examples/test-scala-application.html#add-gitlab-ci-yml-file-to-project不需要 gitlab 的解决方案。
无论如何,我会很高兴如果sbt
每次部署期间,只要服务器运行任何一个,都不会下载总共 6 次sbt
命令。
有人可以解释一下如何使用权利吗image
or the image
以正确的方式或者以其他方式我如何缓存sbt
stuff?
Update
在过去的几天里,我与docker
and gitlab ci
。我发现这个问题与中描述的几乎相同不要下载互联网 http://blog.flurdy.com/2014/11/dont-download-internet-share-maven-ivy-docker.html。拥有所有依赖项似乎是一项艰巨的任务,最好通过安装它们来完成。不幸的是,在共享的 gitlab ci runner 上这是不可能的。
我继续往前走,发现sbt-docker https://github.com/marcuslonnberg/sbt-docker它允许您从构建 docker 容器build.sbt
文件。随着封装基本方法 https://github.com/marcuslonnberg/sbt-docker/blob/master/examples/package-basic/build.sbt我尝试将项目的所有本地可用依赖项包含到容器中,如下所示全局 sbt 插件 http://www.scala-sbt.org/1.0/docs/Global-Settings.html#Global+Settings+using+a+Global+Plugin。但这也没有帮助。
我最后的发现是这个关于maven解决方案 https://gitlab.com/gitlab-org/gitlab-ce/issues/15167#note_15206811并试图将其转化为我们的sbt
项目:
.gitlab-ci.yml
image: hseeberger/scala-sbt
variables:
MAVEN_OPTS: -Dmaven.repo.local=/cache/maven.repository
stages:
- build
- test
- staging
- deploy
build:
stage: build
script:
- sbt compile -Dsbt.ivy.home=/cache/.ivy2 -Dsbt.global.base=/cache/.sbt/0.13 -Dsbt.boot.directory=/cache/.sbt/boot -Dsbt.repository.config=/cache/.sbt/repositories
我可以访问gitlab ci
再次记录。它们看起来基本上如下:
[info] Loading project definition from /builds/kwiqjobs/backend/project
[info] Updating {file:/builds/kwiqjobs/backend/project/}backend-build...
[info] Resolving com.typesafe.play#sbt-plugin;2.5.4 ...
[info] Resolving com.typesafe.play#sbt-plugin;2.5.4 ...
[info] Resolving com.typesafe.play#sbt-routes-compiler_2.10;2.5.4 ...
[info] Resolving com.typesafe.play#sbt-routes-compiler_2.10;2.5.4 ...
[info] Resolving org.scala-lang#scala-library;2.10.6 ...
[info] Resolving com.typesafe.play#twirl-api_2.10;1.1.1 ...
[info] Resolving com.typesafe.play#twirl-api_2.10;1.1.1 ...
... a **lot** more
[info] [SUCCESSFUL ] com.typesafe.sbt#sbt-twirl;1.1.1!sbt-twirl.jar (1033ms)
[info] downloading https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-native-packager/scala_2.10/sbt_0.13/1.0.3/jars/sbt-native-packager.jar ...
[info] [SUCCESSFUL ] com.typesafe.sbt#sbt-native-packager;1.0.3!sbt-native-packager.jar (954ms)
[info] downloading https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-web/scala_2.10/sbt_0.13/1.3.0/jars/sbt-web.jar ...
[info] [SUCCESSFUL ] com.typesafe.sbt#sbt-web;1.3.0!sbt-web.jar (1010ms)
[info] downloading https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-js-engine/scala_2.10/sbt_0.13/1.1.3/jars/sbt-js-engine.jar ...
[info] [SUCCESSFUL ] com.typesafe.sbt#sbt-js-engine;1.1.3!sbt-js-engine.jar (1147ms)
[info] downloading https://repo1.maven.org/maven2/com/typesafe/play/twirl-api_2.10/1.1.1/twirl-api_2.10-1.1.1.jar ...
[info] [SUCCESSFUL ] com.typesafe.play#twirl-api_2.10;1.1.1!twirl-api_2.10.jar (89ms)
[info] downloading https://repo1.maven.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.jar ...
[info] [SUCCESSFUL ] commons-io#commons-io;2.4!commons-io.jar (48ms)
a **lot** more
[info] Done updating.
[info] Compiling 228 Scala sources and 4 Java sources to /builds/kwiqjobs/backend/target/scala-2.11/classes...
[info] 'compiler-interface' not yet compiled for Scala 2.11.8. Compiling...
[info] Compilation completed in 17.735 s
[success] Total time: 149 s, completed Jan 20, 2017 2:22:52 PM
Build succeeded
我想摆脱所有下载.