2

私はジェンキンスで複数のジョブを実行しています。それらはすべて同じレポで動作しますが、ファイルは異なりますが、プッシュ時に競合状態でエラーが発生することがあります。

これは、2 つ (またはそれ以上) のジョブが同時に実行された場合に発生します。彼らは github リポジトリからプルし、その後、各ジョブで異なるファイルが変更されます。プッシュするときと、別のジョブがプッシュされる前に別のジョブがプッシュされ、プッシュの問題が発生します。この競合状態を修正しようとしています。コミットする前に「git pull」を実行しています。その後、別のジョブがその間にリポジトリを更新した場合に備えて、もう一度「git pull」を実行します。その後、「git push」を実行しますが、別のジョブが前にプッシュされることもあります。これをプッシュすると、プッシュが失敗する可能性があります

単一のファイルをプッシュするように git に指示する方法はありますか? (私は信じていませんが、私が間違っているかもしれません)または誰かがこのシナリオに遭遇し、この競合状態を回避する良い方法を持っていますか?

これは私が通常得るエラーです:

git push 
Error reading response length from authentication socket.
To git@github.com:<my repo>.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:<my repo>.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

ありがとうございました!

4

1 に答える 1

1

まず第一に、CI システムをコミットして git リポジトリにプッシュしている場合、おそらく何か間違ったことをしている可能性があります。しかし、あなたにはそれをする本当に本当に正当な理由があるのか​​もしれません。

この問題を回避する唯一の方法は、コミットしてプッシュするジョブが同時に実行されないようにすることです。https://wiki.jenkins-ci.org/display/JENKINS/Throttle+Concurrent+Builds+Pluginのようなプラグインを使用するか、エグゼキューターを 1 つだけ持つスレーブを作成し、そのようなジョブをそのスレーブでのみ実行するように制限することで、これを行うことができます.

于 2012-07-06T22:48:47.087 に答える