特拉维斯以分支为条件 after_success

Travis conditional on branch after_success

在我的 travis 脚本中,我有以下内容:

after_success:
- ember build --environment=production
- ember build --environment=staging --output-path=dist-staging

在这两个构建之后,我根据当前 git 分支有条件地将合适的部署到 S3。

它可以工作,但如果我只构建我真正需要的那一个会节省时间。基于分支构建最简单的方法是什么?

可以在after_success中执行shell脚本,使用travis环境变量查看当前分支:

#!/bin/sh

if [[ "$TRAVIS_BRANCH" != "master" ]]; then
  echo "We're not on the master branch."
  # analyze current branch and react accordingly
  exit 0
fi

将脚本放在项目的某处并像这样使用它:

after_success:
- ./scripts/deploy_to_s3.sh

可能还有其他对您有用的 travis 变量,已列出 here

按原样使用 test 命令 here

after_success:
  - test $TRAVIS_BRANCH = "master" &&
    ember build

所有 travis env 变量都可用 here

我会说上述解决方案很好,因为它们也可以转移到非 travis-ci 构建系统,但是 TravisCI 中有一个类似于此的功能:

stages:
  - name: deploy
    # require the branch name to be master (note for PRs this is the base branch name)
    if: branch = master

虽然我无法让它与 after_success 一起工作,但下一页有一个关于 "Testing Conditions" 的部分,我没有设置它。

https://docs.travis-ci.com/user/conditional-builds-stages-jobs/

对于以下条目,只有当它不是 PR 并且分支是 master 时才会执行脚本。

after_success:
  - 'if [ "$TRAVIS_PULL_REQUEST" = "false" -a "$TRAVIS_BRANCH" = "master" ]; then bash doit.sh; fi'

不够评价TRAVIS_BRANCHTRAVIS_BRANCH 当分叉创建针对 master 的 PR 时设置为 master。

另请参阅 https://docs.travis-ci.com/user/environment-variables/ 上对 TRAVIS_BRANCH 的描述:

  • 对于推送构建或不是由拉取请求触发的构建,这是分支的名称
  • 对于由拉取请求触发的构建,这是拉取请求所针对的分支的名称
  • 对于由标签触发的构建,这与标签的名称相同 (TRAVIS_TAG)

如果您使用标签,则还必须考虑 TRAVIS_TAG。如果设置了TRAVIS_TAG,则TRAVIS_BRANCH设置为TRAVIS_TAG的值。

after_success:
  - if [ "$TRAVIS_PULL_REQUEST" = "false" -a \( "$TRAVIS_BRANCH" = "master" -o -n "$TRAVIS_TAG" \) ]; then doit.sh; fi