我目前的工作流程是在Travis CI上測試的github PRs和Builds,用tox測試pytest並報告codeclimate的覆蓋率。基於env變量的Tox運行命令
travis.yml
os:
- linux
sudo: false
language: python
python:
- "3.3"
- "3.4"
- "3.5"
- "pypy3"
- "pypy3.3-5.2-alpha1"
- "nightly"
install: pip install tox-travis
script: tox
tox.ini
[tox]
envlist = py33, py34, py35, pypy3, docs, flake8, nightly, pypy3.3-5.2-alpha1
[tox:travis]
3.5 = py35, docs, flake8
[testenv]
deps = -rrequirements.txt
platform =
win: windows
linux: linux
commands =
py.test --cov=pyCardDeck --durations=10 tests
[testenv:py35]
commands =
py.test --cov=pyCardDeck --durations=10 tests
codeclimate-test-reporter --file .coverage
passenv =
CODECLIMATE_REPO_TOKEN
TRAVIS_BRANCH
TRAVIS_JOB_ID
TRAVIS_PULL_REQUEST
CI_NAME
然而,特拉維斯沒有經過我的環境變量引入請求,這讓我覆蓋率報告會失敗。特拉維斯文檔示出了該解決方案爲:
script:
- 'if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then bash ./travis/run_on_pull_requests; fi'
- 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./travis/run_on_non_pull_requests; fi'
然而,在TOX這並不作爲TOX是使用子蟒模塊和不承認,如果作爲一個命令(天然地)工作。
如何針對構建運行codeclimate-test-reporter而不是基於TRAVIS_PULL_REQUEST變量的pull請求運行?我是否必須創建自己的腳本並調用它?有更聰明的解決方案嗎?
'tox.ini'文件不理解流量控制(這是可以理解的,它們是'.ini'文件)。使用邏輯創建自定義腳本是一種選擇。第二種選擇是將與CI相關的功能移至'.travis.yml'。在一天結束時,'tox.ini'應該包含可能且應該在每個開發本地機器上運行的邏輯。 ['pylint'](https://github.com/PyCQA/pylint/blob/master/tox.ini)就是這樣做的。 'coveralls' venv在tox中聲明,但是由'.travis.yml'中的條目觸發。 –
我想通過bash來控制流程,您需要tox將'shell = True'傳遞給子流程。這是硬編碼,並深埋:https://github.com/tox-dev/tox/blob/85cce631a1bab5fe056ed2cbbcab49ebaf51b259/tox/session.py#L226 – RecursivelyIronic
可以像'/ bin/bash -c'工作嗎? – iScrE4m