如何在 PR 上运行测试,在与 Travis CI 合并时部署



我正在自动化 Web 应用程序的测试和部署。我有以下阶段需要运行:

  1. 测试
  2. 部署(开发(
  3. 部署(生产(

打开 PR 时,我只想进入第1 阶段。(测试(2.(部署、开发(来运行。然后,当 PR 合并到主控时,我只想进行第 3 阶段。(部署、生产(来运行。我不想要任何常规提交/推送的 CI/CD。

以下是我尝试定义.travis.yml的方式:

# install and other things omitted for brevity
stages:
- name: dev-test
if: type = pull_request
branch:
except: master
- name: dev-deploy
if: type = pull_request
branch:
except: master
- name: prod-deploy
if: type = pull_request
branch:
only: master
jobs:
include:
- stage: dev-test
script: python scripts/dev_test.py
- stage: dev-deploy
script: python scripts/dev_deploy.py
- stage: prod-deploy
script: python scripts/prod_deploy.py

现在,当打开 PR 时,所有三个阶段都会运行(不仅仅是dev-testdev-deploy(。我应该如何设置我的阶段来完成我想要的?

我通过完全不使用构建阶段来解决这个问题。相反,我只是通过 Travis 环境变量在.travis.yml年的script指令中验证 GitHub PR 的属性。

# install and other things omitted for brevity
script:
- if [[ $TRAVIS_EVENT_TYPE == "pull_request" ]] ; then python scripts/dev_test.py ; fi
- if [[ $TRAVIS_EVENT_TYPE == "pull_request" && $TRAVIS_PULL_REQUEST_BRANCH != "master" ]] ; then python scripts/dev_deploy.py ; fi
- if [[ $TRAVIS_EVENT_TYPE == "push" && $TRAVIS_BRANCH == "master" ]] ; then python scripts/prod_deploy.py ; fi

最新更新