2017-03-17 15 views
3

ビルドのステップとしてArtifact Pluginを使用して、ビルドしているプロジェクトの以前のビルドプロジェクトからlibフォルダにアーティファクト(* .dll)をコピーしています。ただし、これらのファイルは通常、コード・リポジトリーにはすでに存在しますが、コピー・アーティファクトのビルド・ステップで上書きします。これは可能ですか、既存のファイルを最初に削除する別のビルドステップを追加する必要がありますか?Jenkins and Artifact Plugin:対象プロジェクトの既存ファイルを上書きしますか?

+0

あなたはそれらを上書きできるようにすることができますが、これを試してみる方が速いでしょう。 –

+0

これはデフォルトの動作ですか、何かを変更する必要がありますか?私たちの場合は、アーティファクトが上書きされないためです。 – user6189

答えて

2

コピーアーティファクトプラグインが自分のSCMチェックアウト領域にファイルをコピーできることを確認できますが、書き込み権限が設定されていないとファイルを処理できないことがわかります。

1. jenkinsジョブコンソールのログを確認します。コピーメッセージが表示されますか? コピーアーティファクトの成功と失敗のメッセージの下の例を参照してください。

2.ビルドの工程順:ビルドステップ「別のプロジェクトからコピーアーティファクト」が SCMの更新と前に、あなたのメインのビルドステップの後に行われていることを確認します。 (明らかに私は知っているが、ただの場合)。

3.コピーした領域のディレクトリリストをビルドステップ(またはスクリプトを追加して追加)を追加して、アクセス許可とファイルの存在をデバッグします()。 'ls -alstr < dir>'

どのようなSCMを使用していますか?どのようにあなたはそれをチェックしていますか? 問題は、チェックアウト後にファイルまたはディレクトリの書き込み権限が原因であると思います。または、おそらくステップオーダーを作成します。

REF:Copy Artifact Plugin

コンソールログに成功のメッセージ:

Copied &lt;num> artifacts from "&lt;jobname>" build number &lt;jobnum>. 

コンソールログに失敗したメッセージ(パーミッションが000ファイルをchmodは):

FATAL: Failed to copy /var/lib/jenkins/jobs/jobname/builds/178/archive/file to /var/lib/jenkins/jobs/jobname/workspace/dir/file 
hudson.util.IOException2: Failed to copy /var/lib/jenkins/jobs/jobname/builds/178/archive/file to   /var/lib/jenkins/jobs/jobname/workspace/dir/file 
at hudson.plugins.copyartifact.FingerprintingCopyMethod.copyOne(FingerprintingCopyMethod.java:118) 
at hudson.plugins.copyartifact.FingerprintingCopyMethod.copyAll(FingerprintingCopyMethod.java:67) 
at hudson.plugins.copyartifact.CopyArtifact.perform(CopyArtifact.java:526) 
at hudson.plugins.copyartifact.CopyArtifact.perform(CopyArtifact.java:460) 
at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78) 
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) 
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:779) 
at hudson.model.Build$BuildExecution.build(Build.java:205) 
at hudson.model.Build$BuildExecution.doRun(Build.java:162) 
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:534) 
at hudson.model.Run.execute(Run.java:1741) 
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) 
at hudson.model.ResourceController.execute(ResourceController.java:98) 
at hudson.model.Executor.run(Executor.java:410) 
Caused by: java.io.FileNotFoundException: /var/lib/jenkins/jobs/jobname/workspace/dir/file (Permission denied) 
at java.io.FileOutputStream.open(Native Method) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:221) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:171) 
at hudson.FilePath.write(FilePath.java:1907) 
at hudson.plugins.copyartifact.FingerprintingCopyMethod.copyOne(FingerprintingCopyMethod.java:82) 
... 13 more 
0

はこれが可能か、すべきです既存のファイルを最初に削除する別のビルドステップを追加しますか?

明示的に削除してからコピーする必要はありません。設定が正しい場合は、既存のファイルを上書きします。 @ gaoitheの答えは、ビルドメッセージの表示がうまくいくものの、ターゲットファイルが置き換えられない場合、デバッグの方法を詳しく説明しています。サブディレクトリからアーチファクトが発生したときに、を間違って設定した疑いがあります。ここで

は例です:

  • 私はサブディレクトリの下にbase-image/redis/ withのgit shortlogのHEAD`をファイルdocker-entrypoint.shの内容を書き換え、それをアーカイブ:

config of archiving job

  • 間違ったターゲットディレクトリconfig:アーティファクトを別のジョブにコピーしますが、t彼は、ディレクトリbase-image/redis/にターゲット:実際にやろうとしたプラグインは、ターゲットディレクトリへのフルパスでターゲット成果物をコピーすることであるため、

config with wrong target directory

cat base-images/redis/docker-entrypoint.shの出力は変わらないと悲惨な現在のあるべきターゲットディレクトリ:base-image/redis/base-image/redis/docker-entrypoint.sh

  • 正しいターゲットディレクトリの設定:することになっていますctory ./

Correct target directory config

そして私は私が期待したものを得ることができます。

関連する問題