「BDD」の用語で表すには:
バックグラウンド:
与えられたGHレポに貢献していますプルリクエストを作成するとき
その後、Travisは最新のコミットをビルドする必要があります既存のプルリクエストにプッシュするとき
その後、Travisは最新のコミットをビルドする必要がありますプルリクエストをマスターにマージするとき
その後、トラビスはマスターを構築する必要があります
次のように、Travis-CIの「ビルドプッシュ」および「ビルドPR」設定に混乱しました。
これは Travis-CI docs および GH issue#3241 でさらに説明されています。
上記の基準を満たす構成を知っている人はいますか?
最終的に別のGH問題( #2111 )を見つけました。これにより、PRとプッシュの両方を有効にしようとするアイデアが得られましたが、特定のブランチへのプッシュを制限するホワイトリストがありました。これは私のワークフローの基準を満たしているようです。私がやったことは次のとおりです。
.travis.yml
から ホワイトリストmaster
ブランチ (つまり、マスターへのビルドプッシュのみ):ブランチ: のみ: -マスター
PR .travis.yml
change 、およびそれを確認するための空のコミットを含む別のPR forkでも機能します 。
確認 マスターからのマージコミットビルドの成功 。
受け入れられた回答で説明されているホワイトリストアプローチには、いくつかの重要な制限があります。特に、PRを開かずに任意のブランチを非冗長に構築することはサポートしていません。
より良い解決策を求める問題 を開きました。
master
ブランチだけでなく、他のいくつかのブランチもテストする場合は、次のワークフローを使用できます。
branches:except
ディレクティブを.travis.yml
に追加します。
branches:
except:
- /^pr\..*/
この構成では:
feature-A
へのコミットはビルドをトリガーしますpr.feature-A
へのコミットはビルドをトリガーしませんpr.feature-A
が開かれたプルリクエストで使用されている場合、ビルドがトリガーされますwip.feature-A
、このブランチへのコミットはビルドをトリガーしますmaster
にマージする準備ができたら、wip.feature-A
からpr.feature-A
に名前を変更し、プルリクエストを開くことができます。pr.feature-A
にプッシュするだけです上記のすべてのステップで、1つのビルドのみがトリガーされます。
allPRを構築すると仮定すると、次のようなものがトリックを行います。設定ページでブランチとPRビルドの両方を有効にし、この行を_travis.yml
_の最初の行として配置します。
if: (type = Push AND branch IN (master, dev)) OR (type = pull_request AND NOT branch =~ /no-ci/)
これにより、すべてのプッシュでプッシュビルドが試行され、オープンPRに対するすべてのプッシュでPRビルドが試行されますが、条件を満たさないものは除外されます。これを少し変更する必要があるかもしれません-名前のどこかにno-ciを含むブランチを構築しないという条項は明らかにオプションであり、ビルドを常に実行したい2つのブランチがない場合があります。
詳細については、Travisのサイトで conditions および conditional builds をご覧ください。