web-dev-qa-db-ja.com

JenkinsワークスペースからSVNにファイルをコミットする

Subversionリポジトリに保存されたプロジェクトがあり、それをJenkinsでコンパイルします。ビルドを実行すると、Jenkinsがプロジェクトをワークスペースディレクトリにプルします。 JenkinsワークスペースからSubversionに1つの変更されたファイルをコミットする必要があります。どうすればできますか?

答えてくれてありがとう...

11
h0nzan

詳細をもう少し教えてもらえますか?このファイルは正確に何であり、なぜJenkinsビルドの一部としてコミットする必要があるのですか?何を構築していますか(Java?C++?.NET?)、どのように構築していますか?

通常、sourceファイル以外はバージョン管理下に置かないでください。つまり、ビルドできる場合は、バージョン管理に含めるべきではありません。多くの人はビルドしたコードをバージョン管理システムにコミットしたいと思っていますが、これは通常大きな間違いです。バイナリファイルははるかに大きく、めったに差分がありません。これにより、90%コンパイルされたコードのソースリポジトリが作成されます-ほとんどすべてが廃止されています。これは、廃止されたコードを(簡単に)削除する方法がないSubversionで特に問題になります。

Jenkinsには、ビルドしたファイルを簡単にアクセスできるようにアーカイブできる機能があります。いつも使っています。コードをビルドし、プログラムはJenkinsでダウンロードできます。さらに良いことに、Jenkinsは古いビルドを削除します(最後のXビルドを保存するか、X日未満のビルドのみを保存できます)。また、リリース候補ビルドがある場合は、そのビルドをlockして、削除されないようにすることができます。


それでも、これを主張する場合は、実行できることがいくつかあり、注意が必要なことがいくつかあります。

  1. 各変更を自動的にビルドするJenkinsセットアップがあり、バージョン管理システムで変更をコミットすると、Jenkinsはそれを確認して新しいビルドを開始します。次に、Jenkinsは変更を保存し、変更を確認して、別のビルドを実行します。ビルドを実行する必要がある場合は、ファイルまたはディレクトリをJenkinsの考慮事項から除外してください。これは、チェックアウトのURLを指定するときに指定できます。

  2. ほとんどのバージョン管理システムとは異なり、Subversionはクライアントに依存しないように作られました。クライアント用の実際のAPIがあります。 Jenkinsでは標準のSubversionコマンドラインクライアントは必要ないため、インストールされていることを確認してください。 JV組み込みのSVNKitクライアントと互換性のあるクライアントをインストールしてください。 Subversion 1.6、1.7、および1.8はすべて異なるクライアント形式を取るため、これは特に当てはまります。

  3. Jenkinsのビルドに複数のビルドステップを追加できます。新しいシェルスクリプトまたはバッチスクリプトステップを追加し、svn commit -m "comment of some sort"ステップ。最初の2つのポイントを処理したら、簡単に実行できます。ただし、これを行う理由を慎重に検討してください。

前に述べたように、99.9999%の確率で、Jenkinsを使用して、それが構築した変更をコミットするべきではありません。 0.0001%の理由がどこかにあると確信していますが、今まで見たことがありません。ビルドされたファイルを他のプロジェクトから普遍的にアクセスできるようにする場合は、Jenkinの機能を使用してビルドされたファイルをアーカイブします。

Jenkinsがビルドしている製品が別のビルドに必要な場合は、 アーティファクトプラグインのコピー を使用してビルドアーティファクトを別のジョブにコピーし、そのジョブを起動できます。さらに、リリースリポジトリシステムを使用してください。 Javaでは、NexusやArtifactoryなどのMavenリリースリポジトリを使用できます。アーティファクトを使用してそのリポジトリにデプロイするには、Ivy、Maven、またはGradleを使用できます。 .NETを構築している場合は、Nugetを参照してください。

5
David W.

この答えを見てください: Jenkins svn commit post-build

新しいビルドステップ(またはビルド後のステップ)でコミットできるはずです。

ただし、JenkinsワークスペースのSVNレイアウトには注意してください。 Subversionプラグインは、SVNKitを使用してSVNコマンドを処理します。ワークスペースでSVNレイアウト1.6を使用している可能性があります。

SVNクライアントがマシン上でより新しい場合、SVNコミットは次のエラーで失敗します:org.Apache.Subversion.javahl.ClientException:作業コピーをアップグレードする必要がありますsvn:作業コピー 'C:.... is古すぎる(フォーマット10、Subversion 1.6で作成)

2
Bruno Lavit

あなたは慎重に使うことができます:

svn commit -username someuser -password %injected_password% 

Build Environmentにパスワードを挿入するために、このコマンドは環境変数としてビルドにパスワードを挿入します

要注意:そのパスワードはジョブトリガーバッチに表示される可能性があります。

1
Ato