web-dev-qa-db-ja.com

TeamCity:ビルドが成功するとPush to Git Repo

TeamCityは成功したビルドをgitリポジトリにプッシュできますか?

これを行うためのTeamCityの特定のビルドステップがわかりません。
TeamCityのバージョン7.1.1を使用しています

ありがとう、ヘンリック

更新:

回答ありがとうございます。少し複雑だと思います。成功したビルドのタグを、TeamCityがビルドのデータをフェッチするグローバルリポジトリにプッシュバックするだけでよいことがわかりました。そこから変更をプルして、最後のコミットが成功したかどうかを確認できます。

TeamCityがこの種のワークフローに簡単なオプションを提供してくれたら嬉しいです!

すべての開発者が、ビルドが成功したときにのみ更新されるリポジトリからプルできるとしたら、それは素晴らしいことです。それとも、ここで間違っているのでしょうか。

16
Henrik

TeamCityにシェルスクリプトを実行させ、その後git Pushを呼び出すことができます(適切な引数を使用して、たとえばgit Push <repository>を使用して別のリポジトリにプッシュします)。 gitがプッシュ操作に対話型認証を必要としないことを確認してください。

関連する例(git Pushを使用してHerokuにデプロイする)は次の場所にあります: http://blog.carbonfive.com/2010/08/06/deploying-to-heroku-from-teamcity/

6
praseodym

8以降にアップグレードする場合は、1つ以上の「自動マージ」ビルド機能を作成できます。これにより、リモートリポジトリにプッシュされます。名前がわかりにくいため、最初は見つかりませんでしたが、名前が異なる多くの異なるVCSをサポートする必要があることは理にかなっています。

5

やっとできました!

Teamcityプロジェクトにビルドパラメータを追加する必要があります。

name= env.PATH
value= C:\Program Files (x86)\Git\cmd

次に、カスタムスクリプトを使用して新しいコマンドラインビルドステップを追加します。

call git Push "C:\Gruene Git Repos\TeamCityApp" master

「呼びかける」という言葉は重要です!

助けてくれてありがとう!ヘンリック

4
Henrik

簡単な答え

しばらくの間、TeamCityはVCSラベリングをサポートしていましたが、これにより、VCSルートユーザー(書き込み権限がある場合)は、バージョンまたはTeamCityが知っているその他のもので構築されたコミットハッシュにタグを付けることができます(TeamCityのパラメーター参照のリスト全体を参照してください) wiki)。

さておき

別の回答で述べられているように、TeamCityで利用可能な自動マージ機能は、指定されたブランチのリスト(ワイルドカードが有効)から要求されたブランチへのマージを自動的に実行し、監視およびビルドして、成功した場合にのみマージします。

自動マージ機能は優れている可能性がありますが、テストカバレッジが十分でない場合、開発者がテストのないものを壊して、コードに問題が発生する可能性があるため、危険な場合もあります。これを防ぐ1つの方法は、プロジェクトをビルドするたびに+2テストを作成/実行することを要求することです(TeamCityで構成可能)。これらの警告は、自動マージ機能を発表した以前にリンクされた記事に記載されています。

関連する解決策

マージに直接関係しない同様の問題が発生しましたが、VCSラベリング(ひどい名前)を使用する場合にTeamCityが追加する「軽量タグ」(少なくともGitの場合)を超えてジョブからいくつかの変更をプッシュする必要があります。

私たちがやったことは:

  1. タイプ「EnvironmentVariable」のパラメーター(ビルドエージェントに表示されますが、他のタイプは表示されません)を使用し、「Spec」を設定してタイプ「Password」のフィールドを作成します。これにより、入力されたテキストがいずれの構成にも表示されなくなります。 UIまたはジョブログ出力。
  2. ジョブ構成のパラメーターとしてユーザー名とパスワードを入力しました
  3. 「エージェント側」リポジトリのgitリモートURLを確認するスクリプトを作成し、URLにユーザー名とパスワードをインラインで含む新しいリモートを追加しました( http:// gituser:[email protected]/path/ to/repo.git )新しいブランチに変更をプッシュするため。
    • 次に、スクリプトの最後でリモートを削除して、システムにアクセスするユーザーが資格情報を取得できないようにします。もちろん、資格情報は特定のリポジトリにのみアクセスするようにかなり厳密にスコープされていますが、最小特権のルールに従うことをお勧めします。
2
dragon788

私の解決策はおそらく愚かですが、単純です。手順は次のとおりです。

  1. Herokugitリポジトリからherokuを複製すると、herokuアプリフォルダーが作成されます。

    heroku git:clone -a {app-name}

  2. 更新する必要のあるファイルをherokuにコピーします

    xcopy client "{app-name}/client" /e/i/h/y

    xcopy server "{app-name}/server" /e/i/h/y

    xcopy imports "{app-name}/imports" /e/i/h/y

  3. gitadd。

    cd {app-name} && git add .

  4. git commit

    cd {app-name} && git commit --message 'ok'

  5. Herokuにプッシュ

    cd {app-name} && git Push heroku master

0
ScottLee