Travis:针对不同分支的不同`script`?

set*_*voy 23 travis-ci

我想使用Travis-CI和Github基于分支机构进行部署.

即 - 如果我们使用develop- 然后/deploy.rb使用DEV env主机名执行构建,如果master- 然后./deploy.rb使用PROD主机名,依此类推.

我发现只有一个想法 - 检查$TRAVIS_BRANC变量然后执行脚本,如:

language: php
install:
  - true
script:
  - test $TRAVIS_BRANCH = "develop" && ./ci/deploy.rb envdev.tld 
  - test $TRAVIS_BRANCH = "master" && ./ci/deploy.rb envprod.tld
Run Code Online (Sandbox Code Playgroud)

但对我来说,这个解决方案看起来有点奇怪.还有其他可能的事情吗?

任何提示/链接赞赏.

Hol*_*ust 25

Travis-CI总是根据.travis.yml您正在推动的分支创建构建.作为一种解决方案,您可以.travis.yml在不同的分支中维护不同的文件.

如果您经常在分支之间进行合并,则可能会导致分支之间的无意更改(如果将.travis.yml一个分支的更改合并到另一个分支).如果这是一个问题,您的解决方案可能更安全.

为了确保只构建特定的分支(例如developmaster),您可以将您的分支列入白名单.travis.yml.

使用现有解决方案时,您可以简化travis.yml脚本.将选择正确的部署目标的逻辑移动到ci/deploy.rb脚本中可能是有意义的(甚至可以添加一个单独的包装脚本,您可以从中调用.travis.yml).这样,如果您更改部署目标,那么您只有script一行.travis.yml甚至不需要更改.

或者,为了确保您的现有结构没有失败的测试,您甚至可以使用以下内容:

script:
  - if [ "$TRAVIS_BRANCH" = "develop" ]; then ./ci/deploy.rb envdev.tld; fi
  - if [ "$TRAVIS_BRANCH" = "master" ]; then ./ci/deploy.rb envprod.tld; fi
Run Code Online (Sandbox Code Playgroud)