В моем проекте я настроил процесс сборки Travis CI, который выпускает новые версии артефакта в релизы Github. Мой .travis.yml
файл:
language: java
jdk: oraclejdk8
branches:
only:
- master
before_install: mvn package
before_deploy:
- export TRAVIS_TAG="1.$TRAVIS_BUILD_NUMBER"
- echo "$TRAVIS_TAG" "$TRAVIS_COMMIT"
- git config --local user.name "$USER_NAME"
- git config --local user.email "$USER_EMAIL"
- git tag "$TRAVIS_TAG" "$TRAVIS_COMMIT"
deploy:
provider: releases
tag_name: $TRAVIS_TAG
target_commitish: $TRAVIS_COMMIT
name: $TRAVIS_TAG
overwrite: true
skip_cleanup: true
api_key: $GITHUB_TOKEN
file_glob: true
file:
- target/my-artifact-$TRAVIS_TAG.jar
on:
branch: master
notifications:
email:
on_success: never
on_failure: always
Я хотел добавить возможность развертывания артефакта в Heroku, и для этого я добавил второй элемент к шагу deploy
, этот:
provider: heroku
api_key: $HEROKU_API_KEY
on:
branch: master
С этими изменениями окончательная версия конфигурации Travis CI:
language: java
jdk: oraclejdk8
branches:
only:
- master
before_install: mvn package
before_deploy:
- export TRAVIS_TAG="1.$TRAVIS_BUILD_NUMBER"
- echo "$TRAVIS_TAG" "$TRAVIS_COMMIT"
- git config --local user.name "$USER_NAME"
- git config --local user.email "$USER_EMAIL"
- git tag "$TRAVIS_TAG" "$TRAVIS_COMMIT"
deploy:
- provider: releases
tag_name: $TRAVIS_TAG
target_commitish: $TRAVIS_COMMIT
name: $TRAVIS_TAG
overwrite: true
skip_cleanup: true
api_key: $GITHUB_TOKEN
file_glob: true
file:
- target/my-artifact-$TRAVIS_TAG.jar
on:
branch: master
- provider: heroku
api_key: $HEROKU_API_KEY
on:
branch: master
notifications:
email:
on_success: never
on_failure: always
Но сборки с такой конфигурацией терпят неудачу с сообщением
роковой: тег уже существует
Команда "git tag" $ TRAVIS_TAG "" $ TRAVIS_COMMIT "" завершилась неудачно и завершилась с 128 во время
Ваша сборка была остановлена.
Как результат - я вижу, что новая версия артефакта была выпущена в релизах Github, но развертывание в Heroku не удалось. Я исследовал проблему, и похоже, что конвейер Travis CI пытается выполнить шаг before_deploy
перед каждым deploy
, и когда он пытается выполнить его для развертывания в Heroku, происходит сбой из-за того, что тег * Git с таким именем уже был создан в before_deploy
шаг для deploy
к релизам Github.
Как я могу исправить проблему и настроить Travis CI на выполнение before_deploy
шага только один раз?