2016-07-05 4 views
2

私は非常に大きな.Netプロジェクトのために現在のビルドシステムを改良しています。このプロジェクトには、178のVisual Studio Solutionsと800以上のcsprojファイルがあります。Gitlab-CI:特定のフォルダが更新された場合にのみビルドされます

私たちは現在TeamCityを使用していますが、チーム数が膨大になり、メンテナンスが非常に困難になっています。ある時点で私はGitlabに移行しました(私が到着する前)、私はGitlab-CIを使って実行可能なソリューションを得ようとしています。

私はGitlab-CIを使ってすべてのコンポーネントをビルド、テスト、パッケージすることができましたが、すべてが1つのジョブで実行されているので、それほど美しいものではありません。 Gitlab-CIのすべての成果物を管理するのは非常に難しい(そして遅い)ため、私たちはこれを今のように行うことにしました。しかし、私は別のSOの質問のためにそれを残すでしょう... ;-)

今日私の質問は、特定のフォルダに変更があった場合にジョブを実行するように.gitlab-ci.ymlファイルを設定できますか? 変更がCoreまたはコンフィグに影響を与えるマスターにしてマージされている場合 . ├── Build ├── Config ├── Core ├── Database ├── Services └── Websites

、その後、ツリー全体が構築され、すべてがこれらのコンポーネントに依存するため、テストする必要があります:

は、この(簡体字)ディレクトリツリーを考えてみましょう。 ただし、サービスが変更された場合は、サービス以外のものを構築してテストする必要はありません。

同様に、データベースが変更された場合、データベースとサービスのみがビルドされる場合、これは複雑すぎる可能性があります。

+0

、コンポーネント専用の枝を使用していますか? – Martin

+0

@mgansler私はgitブランチを意味すると思いますか?この段階では、すべてが1つのリポジトリにあります。通常、チームはメインのレポをフォークし、後でその変更をマージします。 –

+0

はい、私はgitブランチを意味しました。各コンポーネントに専用のブランチを導入する場合は、gitlab-ciの 'only'を使用できます:http://docs.gitlab.com/ce/ci/yaml/README.html#only-and-except – Martin

答えて

1

あなたの質問にちょうどつまずいた。

これは単なるアイデアですが、ビルドスクリプト内でgit log -n 1 --pretty=format:%h Databasegit log -n 1 --pretty=format:%hを比較し、これが異なる場合にのみ再構築することができます。

git log -n 1には、あなたのレポまたは特定のディレクトリ/ファイルの最後のコミットに関する情報が表示されます。

commit <full sha hash of current commit> 
Author: Author Name <[email protected]> 
Date: Fri Mar 10 11:08:42 2017 +0100 

    commit message 

しばらく--pretty=format:%h意志だけ出力短縮ハッシュ

git log -n 1 --pretty=format:%h 
1234567 

git log -n 1 --pretty=format:%h Database 
7654321 
関連する問題