Travis CI Scala Play Оптимизация сборки и развертывания приложений - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть проект на GitHub, где я использую Travis CI для CI & CD. Это Scala приложение, созданное с использованием sbt и работающее как веб-приложение с использованием инфраструктуры Play. Я написал конвейер сборки таким образом, чтобы в качестве этапов сборки я делал следующее:

jobs:
  include:
  - stage: test
    script: sbt clean coverage test coverageReport
  - stage: assemble-jar
    script: sbt "set test in assembly := {}" assembly
    if: branch = master
  - stage: push-docker 
    script: bash docker_push.sh 
    if: branch = master  

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что на этапе тестирования он форматируется и компилируется один раз, как и во время сборка и еще раз на этапе пу sh - docker. Это довольно раздражает, учитывая тот факт, что медленный компилятор Scala. Есть ли способ оптимизировать это так, чтобы он не компилировался для каждого этапа? Я узнал о кешах, и в моем yml есть следующее:

cache:
  directories:
  - "$HOME/.ivy2/cache"
  - "$HOME/.sbt"

Но это, к сожалению, не помогает, поскольку кеширует только зависимости, а не результат предыдущего этапа сборки. Что я могу сделать, чтобы сделать это лучше?

1 Ответ

1 голос
/ 28 февраля 2020

Во-первых, вы не можете повторно использовать скомпилированные файлы классов на этапе тестирования, поскольку в них встроено инструментарий обнаружения, что делает их зависимыми от поиска во время выполнения. Когда вы попытаетесь запустить без него, он потерпит sh.

Во-вторых, если вы хотите поделиться файлами сборки между этапами сборки-jar и pu sh - docker, вы можете использовать S3 для сделать так: https://docs.travis-ci.com/user/build-stages/share-files-s3/

...