Travis-ci 阶段 - 条件逻辑

Travis-ci stages - conditional logic

这是我的 travis.yml 文件,后面是最新的 运行 https://travis-ci.com/github/harryyy27/allies-art-club:

sudo: required

services:
  - docker

stages:
  - name: before_deploy
    if: branch = master
  - name: before_install
    if: branch != master
  - name: scripts
    if: branch != master

before_install:
  - docker build -t harryyy27/allies_art_club/frontend -f ./client/Dockerfile.dev ./client
  - docker build -t harryyy27/allies_art_club/backend -f ./src/Dockerfile.dev ./src
scripts:
  - docker run -e CI=true harryyy27/allies_art_club/frontend npm test
  - docker run -e CI=true harryyy27/allies_art_club/backend npm test


before_deploy:
  - docker build -t harryyy27/aac-client ./client
  - docker tag harryyy27/aac-client registry.heroku.com/$HEROKU_APP/client
  - docker build -t harryyy27/aac-src ./src
  - docker tag harryyy27/aac-src registry.heroku.com/$HEROKU_APP/src
  - docker build -t harryyy27/aac-nginx ./nginx
  - docker tag harryyy27/aac-nginx registry.heroku.com/$HEROKU_APP/nginx
# Log in to docker CLI
  - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_ID" --password-stdin
  - curl https://cli-assets.heroku.com/install.sh | sh
  - echo "$HEROKU_API" | docker login -u "$HEROKU_USERNAME" --password-stdin registry.heroku.com
deploy:
  skip_cleanup: true
  provider: script
  script:
    docker ps -a;
    docker push harryyy27/aac-client;
    docker push registry.heroku.com/$HEROKU_APP/client;
    docker push harryyy27/aac-src;
    docker push registry.heroku.com/$HEROKU_APP/src;
    docker push harryyy27/aac-nginx;
    docker push registry.heroku.com/$HEROKU_APP/nginx;
    heroku container:release client src nginx --app $HEROKU_APP;
  on:
    branch: master

但是,我想知道为什么我的分支 != master 在 before_install 和脚本阶段不起作用。 运行在合并我的拉取请求后,这两个阶段甚至在主分支上也是如此。

(我知道这个 travis.yml 的其他问题,我已将它们作为单独的问题提出)

已解决此问题,但设置不同。见下文。我认为必须使用 jobs/include 对象设置阶段,如下所示

查看新内容travis.yml

sudo: required
language: generic

services:
  - docker

stages:
  - dev
  - prod

jobs:
  include:
    - stage: dev
      if: NOT(branch=master)
      scripts:
        - docker build -t harryyy27/allies_art_club/frontend -f ./client/Dockerfile.dev ./client
        - docker build -t harryyy27/allies_art_club/backend -f ./src/Dockerfile.dev ./src
        - docker run -e CI=true harryyy27/allies_art_club/frontend npm test
        - docker run -e CI=true harryyy27/allies_art_club/backend npm test
    - stage: prod
      if: branch=master
      before_deploy:
        - docker build -t harryyy27/aac-client ./client
        - docker tag harryyy27/aac-client registry.heroku.com/$HEROKU_APP/client
        - docker build -t harryyy27/aac-src ./src
        - docker tag harryyy27/aac-src registry.heroku.com/$HEROKU_APP/src
        - docker build -t harryyy27/aac-nginx ./nginx
        - docker tag harryyy27/aac-nginx registry.heroku.com/$HEROKU_APP/nginx
      # Log in to docker CLI
        - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_ID" --password-stdin
        - curl https://cli-assets.heroku.com/install.sh | sh
        - echo "$HEROKU_API" | docker login -u "$HEROKU_USERNAME" --password-stdin registry.heroku.com
      deploy:
        skip_cleanup: true
        provider: script
        script:
          docker ps -a;
          docker push harryyy27/aac-client;
          docker push registry.heroku.com/$HEROKU_APP/client;
          docker push harryyy27/aac-src;
          docker push registry.heroku.com/$HEROKU_APP/src;
          docker push harryyy27/aac-nginx;
          docker push registry.heroku.com/$HEROKU_APP/nginx;
          heroku container:release client src nginx --app $HEROKU_APP;

***注意我必须添加语言以避免 Rakefile 错误。最好在这里使用泛型,因为使用 node_js 会提示 travis 寻找 package.json 并且会出现“make test”错误