web-dev-qa-db-ja.com

トラビス:ブランチごとに異なる「スクリプト」?

Travis-CIとGithubを使用して、ブランチに基づくデプロイメントをセットアップしたいと思います。

つまり-developからビルドした場合-exec /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

しかし、この解決策は私にとっては少し奇妙に見えます。それを実現する他の可能性はありますか?

どんなヒント/リンクもありがたいです。

25
setevoy

Travis-CIは常に、プッシュするブランチの.travis.ymlに基づいてビルドを作成します。したがって、ソリューションとして、異なるブランチで異なる.travis.ymlファイルを維持できます。

ただし、ブランチ間で定期的にマージすると、ブランチ間で不注意な変更が発生する可能性があります(一方のブランチの.travis.ymlの変更を別のブランチにマージすると)。これが問題である場合、ソリューションはおそらくより安全です。

特定のブランチ(例:developmaster)のみがビルドされるようにするには、 whitelist.travis.ymlのブランチを作成します。

既存のソリューションを使用する場合は、travis.ymlスクリプトを簡略化できます。正しいデプロイターゲットを選択するロジックをci/deploy.rbスクリプトに移動することはおそらく意味があります(または、.travis.ymlから呼び出す別のラッパースクリプトを追加することもできます)。これにより、.travis.ymlに含まれるscript行は1つだけになり、デプロイメントターゲットを変更しても変更する必要はありません。

または、既存の構造で失敗するテストがないことを確認するには、次のようなものを使用することもできます。

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

現在、最善の解決策は stages を使用することであると思われます。あなたは次のようなものを持つことができます:

stages:
  - name: deploy
    # require the branch name to be master (note for PRs this is the base branch name)
    if: branch = master

ステージの詳細については Travisのドキュメント を参照してください。

0
xji

とてもシンプルなのでこれはずっと良い解決策だと思います。

専用の本番ブランチ(マスター)とステージング/テストブランチ(開発)があるとします。

TravisCIアカウントで、環境変数を設定できます。特定の変数を特定のブランチでのみ使用できるようにすることができます。

したがって、たとえば、.travis.yml、 あなたが書く: firebase deploy --project "$DEPLOY_TARGET"

そしてDEPLOY_TARGET(Web設定領域でvarの前にドル記号は必要ありません!)をブランチごとに異なる環境変数として使用します。この特定の例はFirebaseホスティングで機能しますが、ブランチ環境変数に基づいて動作するスクリプトで例を一般化することができます。

したがって、$BRANCH_SPECIFIC_VARを環境変数として指定し、必要な各ブランチを指定してから、構成ファイルからその変数にアクセスします。

これがお役に立てば幸いです。

0
George43g