如何使Travis条件构建阶段工作?

Lau*_*ura 6 travis-ci

我的目标是在我的Travis流程中有三个步骤:

  1. 测试(总是)
  2. 构建(停泊者图像,仅当分支合并到开发中时)
  3. 部署(与构建相同)

我已经阅读了关于构建阶段和条件文档,但我似乎误解了一些东西,因为Travis总是执行所有三个阶段(例如,当我推动一个功能分支时).

我目前的设置如下:

jobs:
  include:
    - stage: test
      script: ".travis/01-test.sh"
    - stage: build
      script: ".travis/02-build-and-push-image.sh"
      if: (branch = develop) AND (NOT(type IN (push, pull_request)))
    - stage: deploy
      script: ".travis/03-deploy.sh staging"
      if: (branch = develop) AND (NOT(type IN (push, pull_request)))
Run Code Online (Sandbox Code Playgroud)

当我打开Travis构建页面上的配置选项卡时,我可以看到此配置,因此它不应该是解析错误.我也尝试分别列出作业和阶段,但结果是一样的:

jobs:
  include:
    - stage: test
      script: ".travis/01-test.sh"
    - stage: build
      script: ".travis/02-build-and-push-image.sh"
    - stage: deploy
      script: ".travis/03-deploy.sh staging"
stages:
  - test
  - name: build
    if: (branch = develop) AND (NOT(type IN (push, pull_request)))
  - name: deploy
    if: (branch = develop) AND (NOT(type IN (push, pull_request)))
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我错过了什么吗?据Travis博客文章称,我知道构建阶段是测试版功能,但我认为这应该已经有效了.

小智 11

我可以在内部解析条件时确认这是一个问题.

您可以尝试在"NOT"运算符后添加空格吗?如:

if: (branch = develop) AND (NOT (type IN (push, pull_request)))
Run Code Online (Sandbox Code Playgroud)

这似乎解决了这个问题,我想知道Travis是否正在检测not()作为一个函数(就像它一样env(foo)),因此这会导致错误.