如何为多部署配置仅执行一次Travis CI"before_deploy"步骤?



在我的项目中,我配置了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 管道尝试在每次deploy之前执行步骤before_deploy,当它尝试执行它以部署到 Heroku 时,它失败了,因为具有这种名称的 Git 标签已经在before_deploy步骤中创建,用于deploy到 Github 版本。

如何解决此问题并将 Travis CI 配置为仅执行一次before_deploy步骤?

我能够在before_deploy步骤中使用if条件修复发布过程。如果变量已存在TRAVIS_TAG它将在执行第二次部署之前跳过标记的创建:

before_deploy:
if ! [[ $TRAVIS_TAG ]]; then
export TRAVIS_TAG="1.$TRAVIS_BUILD_NUMBER" &&
git config --local user.name "$USER_NAME" &&
git config --local user.email "$USER_EMAIL" &&
git tag "$TRAVIS_TAG" "$TRAVIS_COMMIT";
fi

相关内容

  • 没有找到相关文章

最新更新