代码之家  ›  专栏  ›  技术社区  ›  Laura

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

  •  7
  • Laura  · 技术社区  · 8 年前

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

    1. 测试(始终)
    2. 生成(docker映像,仅当合并分支时 进入开发阶段)
    3. 部署(与构建相同)

    我读过 documentation on build stages and conditionals 但我似乎误解了什么,因为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)))
    

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

    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)))
    

    我怎样才能做到这一点?我错过什么了吗?我知道构建阶段是一个beta特性,但我认为这应该已经可以工作了,根据 Travis blog post .

    1 回复  |  直到 8 年前
        1
  •  12
  •   iriberri    8 年前

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

    能否尝试在“NOT”运算符后添加空格?如下所示:

    if: (branch = develop) AND (NOT (type IN (push, pull_request)))
    

    这似乎解决了问题,我想知道Travis是否将not()作为函数进行检测(就像它对 env(foo) ),因此这是导致错误的原因。