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
しかし、この解決策は私にとっては少し奇妙に見えます。それを実現する他の可能性はありますか?
どんなヒント/リンクもありがたいです。
Travis-CIは常に、プッシュするブランチの.travis.yml
に基づいてビルドを作成します。したがって、ソリューションとして、異なるブランチで異なる.travis.yml
ファイルを維持できます。
ただし、ブランチ間で定期的にマージすると、ブランチ間で不注意な変更が発生する可能性があります(一方のブランチの.travis.yml
の変更を別のブランチにマージすると)。これが問題である場合、ソリューションはおそらくより安全です。
特定のブランチ(例:develop
とmaster
)のみがビルドされるようにするには、 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
現在、最善の解決策は stages を使用することであると思われます。あなたは次のようなものを持つことができます:
stages:
- name: deploy
# require the branch name to be master (note for PRs this is the base branch name)
if: branch = master
ステージの詳細については Travisのドキュメント を参照してください。
とてもシンプルなのでこれはずっと良い解決策だと思います。
専用の本番ブランチ(マスター)とステージング/テストブランチ(開発)があるとします。
TravisCIアカウントで、環境変数を設定できます。特定の変数を特定のブランチでのみ使用できるようにすることができます。
したがって、たとえば、.travis.yml
、 あなたが書く: firebase deploy --project "$DEPLOY_TARGET"
そしてDEPLOY_TARGET
(Web設定領域でvarの前にドル記号は必要ありません!)をブランチごとに異なる環境変数として使用します。この特定の例はFirebaseホスティングで機能しますが、ブランチ環境変数に基づいて動作するスクリプトで例を一般化することができます。
したがって、$BRANCH_SPECIFIC_VAR
を環境変数として指定し、必要な各ブランチを指定してから、構成ファイルからその変数にアクセスします。
これがお役に立てば幸いです。