Сборка Travis CI на этапе развертывания выполняется на главном сервере, хотя условие тега не выполняется - PullRequest
0 голосов
/ 20 января 2019

У меня есть следующий файл .travis.yml в моем проекте, настроенный на сборку всегда и развертывание только тогда, когда сборка запускается тегом GitHub, соответствующим определенной строке версии:

language: java
sudo: false
cache:
  directories:
    - "$HOME/.cache"
jobs:
  include:
    - stage: build
      os: linux
      jdk: oraclejdk8
    - stage: build
      os: linux
      jdk: openjdk8
    - stage: build
      os: linux
      jdk: oraclejdk11
    - stage: build
      os: linux
      jdk: openjdk11
    - stage: deploy
      os: linux
      jdk: openjdk8
stages:
  - build
  - name: deploy
    if: tag =~ ^[0-9]+\.[0-9]+\.[0-9]+
install:
  - gpg --version
  - mvn process-resources -B -V -e
script:
  - mvn test -B -V -e
deploy:
  - provider: script
    script:
      - openssl aes-256-cbc ... -in .travis.gpg.enc -out .travis.gpg -d
      - openssl aes-256-cbc ... -in .travis.settings.xml.enc -out .travis.settings.xml -d
      - gpg --import .travis.gpg
      - cp .travis.settings.xml $HOME/.m2/settings.xml
      - mvn clean deploy -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -P sign -B -V -e
    skip_cleanup: true
  - provider: releases
    api_key:
      secure: CKKEi9hoN...xbzZByUU80Q=
    file_glob: true
    file:
      - $HOME/.m2/repository/path/to/project-*.pom
      - $HOME/.m2/repository/path/to/porject-*.pom.asc

Это работало нормально, когда я нажал на свою ветку: сборка Travis CI запустилась и сказала, что пропускает этап развертывания, потому что условие не было выполнено. Однако, когда я слил эту ветку в master, сборка Travis CI работала против master (правильно) и вызвала этап развертывания (некорректно), пытаясь выполнить развертывание в Maven / GitHub (и потерпела неудачу из-за того, что я считаю несвязанной ошибкой).

Как ни странно, дело не в том, что он запустил развертывание job (это не так; он только запустил сборку job s). Он добавил этап развертывания к первым четырем (сборка) job с (те, которые говорят stage: build). Это показано на снимке экрана ниже, где вы видите, что он выполнил четыре задания сборки, и все они потерпели неудачу (в частности, все они потерпели неудачу на этапе развертывания, но они не должны были пытаться развернуть; только задание развертывания должно развертывание).

Failed Travis CI build

Итак, два вопроса:

  1. Что я сделал не так, что попытался развернуть его из master, даже если это не тег?
  2. Есть идеи, что следующая ошибка в том, что (к счастью) произошел сбой развертывания, и что мне нужно сделать, чтобы это исправить?

Ошибка развертывания:

$ rvm $(travis_internal_ruby) --fuzzy do ruby -S gem install dpl
Successfully installed dpl-1.10.6
Parsing documentation for dpl-1.10.6
Installing ri documentation for dpl-1.10.6
Done installing documentation for dpl after 0 seconds
1 gem installed
dpl.1
Installing deploy dependencies
Successfully installed dpl-script-1.10.6
Parsing documentation for dpl-script-1.10.6
Installing ri documentation for dpl-script-1.10.6
Done installing documentation for dpl-script after 0 seconds
1 gem installed
/home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/cli.rb:54:in `system': wrong first argument (ArgumentError)
    from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/cli.rb:54:in `shell'
    from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-script-1.10.6/lib/dpl/provider/script.rb:19:in `push_app'
    from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/provider.rb:199:in `block in deploy'
    from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/cli.rb:41:in `fold'
    from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/provider.rb:199:in `deploy'
    from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/cli.rb:32:in `run'
    from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/lib/dpl/cli.rb:7:in `run'
    from /home/travis/.rvm/gems/ruby-2.4.1/gems/dpl-1.10.6/bin/dpl:5:in `<top (required)>'
    from /home/travis/.rvm/gems/ruby-2.4.1/bin/dpl:23:in `load'
    from /home/travis/.rvm/gems/ruby-2.4.1/bin/dpl:23:in `<main>'

1 Ответ

0 голосов
/ 20 января 2019

Итак, я нашел ответ на оба вопроса.

Во-первых, странная ошибка произошла из-за этого:

deploy:
  - provider: script
    script:
      - do something
      - do something else
      - do another thing

Обычная директива script в сборках Travis CIпринимает последовательность, но директива script в поставщике развертывания script отличается и принимает только одну строку, которую она вызывает как одна команда.Вы даже не можете передать многострочную строку.Все еще не работает.Я подал эту ошибку вместе с Трэвисом и до тех пор, пока она не будет исправлена, нашел временное решение этой проблемы, используя before_deploy (ниже).

Во-вторых, если вы используете top-Директива level deploy, тогда развертывание будет выполняться как часть этапа сборки, а не как его собственный этап.Документация по этому вопросу не ясна, но это было легко исправить.

Наконец, вы можете зашифровать только один файл, а не несколько файлов, так что, если у вас есть несколько секретных файлов, вы должны использовать Tarзаархивируйте и зашифруйте это.

Вот рабочая сборка Travis после того, как я решил все свои проблемы:

language: java
sudo: false
cache:
  directories:
    - "$HOME/.cache"
jobs:
  include:
    - stage: build
      os: linux
      dist: trusty
      jdk: oraclejdk8
    - stage: build
      os: linux
      dist: trusty
      jdk: openjdk8
    - stage: build
      os: linux
      dist: xenial
      jdk: oraclejdk11
    - stage: build
      os: linux
      dist: xenial
      jdk: openjdk11
    - stage: deploy
      os: linux
      dist: xenial
      jdk: openjdk8
      before_deploy:
        - openssl aes-256-cbc -in .travis.secrets.tar.enc -out .travis.secrets.tar -d
        - tar -xvf .travis.secrets.tar
        - rm .travis.secrets.tar
        - gpg --import travis.gpg
        - rm travis.gpg
        - mv settings.xml $HOME/.m2/settings.xml
      deploy:
        - provider: script
          script: "mvn clean deploy -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -P sign -B -V -e"
          on:
            tags: true
          skip_cleanup: true
        - provider: releases
          api_key:
            secure: CKKEi9hoN...xbzZByUU80Q=
          file_glob: true
          file:
            - $HOME/.m2/repository/io/path/to/project-*.pom
            - $HOME/.m2/repository/io/path/to/project-*.pom.asc
          on:
            tags: true
stages:
  - build
  - name: deploy
    if: tag =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$
install:
  - gpg --version
  - mvn process-resources -B -V -e
script:
  - mvn test -B -V -e
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...