如何在Travis构建阶段(Beta功能)中条件跳过PR/非主分支的发布阶段
解决Travis CI在PR/非主分支跳过发布阶段的问题
我懂你现在的困扰——想让Travis CI只在主分支的正常推送构建里执行发布,PR或者其他分支构建时直接跳过发布阶段对吧?之前的配置没搞定的话,咱们用Travis自带的环境变量就能精准控制,下面给你具体的解决办法:
核心思路:利用Travis环境变量判断构建场景
Travis会自动给每个构建设置几个关键环境变量,咱们靠它们来区分“要不要执行发布”:
TRAVIS_PULL_REQUEST: 如果是PR构建,这个值是对应的PR编号(字符串);如果是直接推送分支的构建,值是false。TRAVIS_BRANCH: 当前构建的分支名(注意:PR构建时,这个变量指的是PR要合并到的目标分支,比如你往master发PR,TRAVIS_BRANCH就是master)。
具体配置方案
假设你原本的发布逻辑是放在jobs的发布阶段里,直接修改配置给发布阶段加条件判断就行:
方案1:给发布阶段添加执行条件
把你的jobs部分改成这样,只有非PR且是主分支的构建才会触发发布:
language: node_js cache: directories: - node_modules node_js: - '8' - '6' before_install: - npm install -g npm@5 - npm install -g greenkeeper-lockfile@1 install: - yarn install --ignore-engines before_script: greenkeeper-lockfile-update after_script: greenkeeper-lockfile-upload script: - yarn coveralls branches: except: - /^v\d+\.\d+\.\d+$/ jobs: include: # 这里放你原本的其他阶段(如果有的话) - stage: release # 只有主分支(master)且不是PR的构建才执行这个阶段 if: branch = master AND type != pull_request script: skip # 前面已经执行过script了,这里跳过避免重复跑测试 deploy: # 替换成你自己的发布配置,比如npm发布、部署服务器等 provider: npm email: "your-email@example.com" api_key: $NPM_TOKEN on: branch: master
方案2:直接在命令里加条件判断
如果你的发布是用单独的命令执行(比如在script里),也可以直接用shell条件控制:
# 其他配置保持不变... script: - yarn coveralls # 只有非PR且是master分支时,才执行发布命令 - '[ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ] && yarn release'
几个要注意的点
- 如果你用的主分支是
main而不是master,记得把上面配置里的master替换成main。 - PR构建时
TRAVIS_BRANCH是目标分支,所以如果想完全跳过所有PR的发布,不管目标分支是什么,只需要判断TRAVIS_PULL_REQUEST != false就行。 - 确保你的发布用到的密钥(比如
NPM_TOKEN)已经在Travis项目的设置里正确配置,不然会导致发布失败。
内容的提问来源于stack exchange,提问作者Mrchief
相关产品推荐
相关产品推荐

