我正在自动化 Web 应用程序的测试和部署。我有以下阶段需要运行:
- 测试
- 部署(开发(
- 部署(生产(
打开 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-test
和dev-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