2016-05-31 9 views
8

Chciałbym skonfigurować wdrożenie na podstawie oddziałów przy użyciu Travis-CI i Github.Travis: inny "skrypt" dla innej gałęzi?

tj. - jeśli zrobiliśmy kompilację z develop - następnie wykonaj /deploy.rb z nazwą hosta DEV env, jeśli master - następnie ./deploy.rb z nazwą hosta PROD i tak dalej.

Tylko jeden pomysł znalazłem - jest sprawdzenie $TRAVIS_BRANC zmienną, a następnie wykonać skrypt, jak:

language: php 
install: 
    - true 
script: 
    - test $TRAVIS_BRANCH = "develop" && ./ci/deploy.rb envdev.tld 
    - test $TRAVIS_BRANCH = "master" && ./ci/deploy.rb envprod.tld 

Ale to rozwiązanie wygląda trochę dziwne jak dla mnie. Jakieś inne możliwości, aby to zrealizować?

Wszelkie porady/linki doceniane.

Odpowiedz

10

Travis-CI zawsze tworzy kompilacje w oparciu o numer .travis.yml w oddziale, który przesyłasz. Jako rozwiązanie, można w ten sposób utrzymywać różne pliki .travis.yml w różnych gałęziach.

Jeśli regularnie scalasz gałęzie, może to jednak prowadzić do nieumyślnych zmian między oddziałami (jeśli scalisz zmiany .travis.yml jednej gałęzi z drugą). Jeśli to jest problem, twoje rozwiązanie jest prawdopodobnie bezpieczniejsze.

Aby upewnić się, że tylko konkretne branże (np develop i master) są wbudowane, można whitelist oddziały w .travis.yml.

Jednak przy użyciu istniejącego rozwiązania można uprościć skrypt travis.yml. Prawdopodobnie ma sens przeniesienie logiki w celu wybrania poprawnego celu wdrażania w twoim skrypcie ci/deploy.rb (lub nawet dodanie oddzielnego skryptu opakowania, który wywołujesz z poziomu .travis.yml). W ten sposób masz tylko jedną linię script w swoim .travis.yml, której nawet nie trzeba zmieniać, jeśli zmienisz cele wdrażania.

Alternatywnie, aby upewnić się, że nie upadających testy z istniejącą strukturą, można nawet użyć coś takiego:

script: 
    - if [ "$TRAVIS_BRANCH" = "develop" ]; then ./ci/deploy.rb envdev.tld; fi 
    - if [ "$TRAVIS_BRANCH" = "master" ]; then ./ci/deploy.rb envprod.tld; fi