特拉维斯以分支为条件 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_BRANCH
。 TRAVIS_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
在我的 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_BRANCH
。 TRAVIS_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