このセットアップは、AdobeAEMをビルドしてデプロイするために使用されます。
マスタービルドジョブは、gitリポジトリからプルし、ビルドしてパッケージ化し、テストを実行してから、アップストリームジョブからビルドされたパッケージを使用する必要があるダウンストリームジョブを起動します。
問題は、ダウンストリームジョブが次のメッセージで失敗することです。
Unable to access upstream artifacts area /var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/builds/2014-10-22_11-33-46/archive. Does source project archive artifacts?
ダウンストリームジョブによってトリガーされたCopyArtifactsプラグインが、間違った場所でアーティファクトを探しているようです。正しい場所は
/var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/workspace/PROJECTNAME-*/**/*.jar,/var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/workspace/PROJECTNAME-*/**/*.Zip
しかし、それから、それは
Java.io.IOException: Expecting Ant GLOB pattern, but saw '/var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/workspace/PROJECTNAME-*/**/*.jar,/var/lib/jenkins/jobs/PROJECTNAME-Master-Branch/workspace/PROJECTNAME-*/**/*.Zip'. See http://ant.Apache.org/manual/Types/fileset.html for syntax
ダウンストリームジョブは別のプロジェクトからアーティファクトをコピーし、ビルドは「このジョブをトリガーしたアップストリームビルド」または「最新の完了したビルドのワークスペースからコピー」のいずれかでした。そして、どれも機能しません。
何か案は?
アーティファクトを最初にアーカイブせずに使用しようとしています。
絶対パスを使用しようとしていますが、絶対パスは$WORKSPACE
および/または「アーカイブの場所」からの相対パスである必要があります。
ジェンキンスに関連する「アーティファクト」の概念を誤解しています。
アーティファクトは、ビルド後アーティファクトのアーカイブビルド後のアクションの助けを借りて特別に保存されるファイルです。
ビルドが実行されると、次の範囲内で実行されます。$WORKSPACE
、これは通常、ファイルシステム上に存在します$JENKINS_HOME/jobs/$JOB_NAME/workspace
その中には、SCMチェックアウトフォルダー、一時ビルドファイル、最終ビルドファイル、バイナリなどを含めることができます。
$WORKSPACE
の内容はvolatileです。ビルド時間枠外(およびダウンストリームジョブareビルド時間枠外)では、決してこれに依存しないでください。 $WORKSPACE
の内容は、マスター/スレーブノードごとに異なる可能性があり、管理者またはSCMの更新/クリーンアップ/チェックアウトによっていつでも削除される可能性があります。
全体としてone$WORKSPACE
しかないことを理解することも重要ですJob。
ただし、ビルド履歴に注意してください。そのリストには、ビルド番号(#)と日付のタイムスタンプで参照されるいくつかのエントリがあります。これらは以下に保存されます:$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID
$BUILD_ID
は、2014-10-22_11-33-46
のように、ビルドの日付とタイムスタンプです。
$WORKSPACE
には、currentまたはlastに関連する情報が含まれています(問題は、「current」か「current」かを確認できないことです。 「最後の」)ビルド;builds
フォルダーには、過去の(保持された)すべてのビルド実行の記録が含まれています(これが左側のビルド履歴リストを構成します)、ビルドごと。
デフォルトでは、Jenkins自体に必要なもの(build.xmlコピー、変更ログ情報、コンソールログ)のみが含まれます。 URL http://$JENKINS_URL/job/$JOB_NAME/[nn]/
に移動すると、[nn]
はジョブのビルド/実行番号(#)の数値であり、ファイルシステムのbuilds
フォルダーからこの情報を読み取ります。
ビルドのアーティファクトを保持するには(次のビルドによって上書きされないようにする、ワースクペースを消去する、または単に古いビルドにアクセスするため)、アーティファクトをアーカイブする(ビルド後のアクションと同じ同じタイトル)。アーティファクトをアーカイブするときは、$WORKSPACE
内のどのファイルを保存するかを指定します。 Jenkinsがアーカイブを行うと、それらのファイル([パスを[$WORKSPACE
]に対して保持]を保持)を次の場所に配置します。$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/
。
このようにして、$WORKSPACE
の「最新/最後」だけでなく、以前のビルド用に複数のアーティファクトのセットを保持できます。
完全を期すために、http://$JENKINS_URL/job/$JOB_NAME/lastSuccessfulBuild
や/lastFailedBuild
などのJenkinsの「パーマリンク」は、実際にはファイルシステム上で保存されているbuilds/$BUILD_ID
フォルダの1つへのシンボリックリンクであることに言及します。
最後に、ジョブ構成の"古いビルドを破棄"チェックマークを使用して、ビルドの実行数と保持されるアーティファクトの数(個別に構成可能)を制御します。デフォルトではすべてが保持されますが、アーティファクトの保持を開始する場合は、ハードディスクの容量を考慮する必要があります。
したがって、上記の情報とエラーメッセージを見ると、Copy Artifactsプラグインがビルドの/archive/
セクションでアーティファクトを正しく検索していることがわかります。
また、アーティファクトのコピープラグインはnotコピー元のビルドを選択するときに、「現在のビルド」を選択できることにも注意してください。パーマリンク(「最後の成功」や「最後のビルド」など)と特定のビルド番号があり、これらはすべて$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/
の下に保存されたビルドに変換されます。
「このジョブをトリガーしたアップストリームビルド」でさえ、特定の$BUILD_ID
にリンクします。
Archiving Artifactsの構成は$WORKSPACE
に関連しています。
アーティファクトのコピーの構成は、「アーカイブの場所」、つまり$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive/
を基準にしています。
「アーティファクトのコピー」は「アーカイブの場所」に相対的であり、「アーカイブの場所」は$WORKSPACE
に相対的であるため、すべての集中的な目的で、両方の構成の相対パスは同じであり、 $WORKSPACE
$WORKSPACE
のルートにファイルがある場合は、次のようになります。PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.Zip
Upstream Build that triggered this job
をアーティファクトのコピー選択に使用します。**
または空白で、アーカイブされたすべてのアーティファクトをコピーするか、PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.Zip
(アーカイブセクションと同じ)アーカイブしたくない場合は、$WORKSPACE
をCopy from workspace of latest completed build
とともに直接使用できますが、ただし、ダウンストリーム中に2番目のアップストリームビルドを実行できないようにする必要がありますビルドが実行されている場合、前に説明したように、$WORKSPACE
は揮発性であるため、部分ビルドから部分ファイルを取得するリスクがあります。
$WORKSPACE
に相対的なパスを使用します。PROJECTNAME-*/**/*.jar,PROJECTNAME-*/**/*.Zip
異なるジョブ間でWORKSPACE全体を本当にコピーしたい場合は、次のいずれかを使用してください。
修正は次のように簡単です:disable or removeCompress Artifacts plugin andrebootジェンキンス。
この回避策は、長年のバグレポートから推測されました: "Copy Artifacts Plugin"はArtifactManagerをサポートする必要があります 。
解決策は、ビルダーの構成に関するものです。
根本的な原因は、ダウンストリームジョブの構成にあります。コピーするビルドに「最新の完了したビルドのワークスペースからコピー」を選択すると、コピーするアーティファクトのパスがプロジェクト名などの相対パスに設定されます-/ /。jar、projectname-//。Zipすると、ビルドが成功します。
さらに、親ジョブ構成では、ダウンストリームジョブをCopyArtifactに許可する必要があり、プロジェクトでコピーアーティファクトを許可するには、ダウンストリームジョブを指定する必要があります。
編集:今、あなたがその間に応答したことがわかります。素晴らしい答えであり、基本的に私が持っていた質問のいくつかをクリアします。
オプション1に関する不明確な点の1つは、ファイルのアーカイブが発生することですafter親ジョブが完了します。
Waiting for the completion of projectname-Deploy
projectname-Deploy #19 completed. Result was SUCCESS
Waiting for the completion of projectname-Deploy
projectname-Deploy #20 completed. Result was SUCCESS
Build step 'Trigger/call builds on other projects' changed build result to SUCCESS
Strings match run condition: string 1=[lab2b], string 2=[both]
Run condition [Strings match] preventing perform for step [BuilderChain]
Archiving artifacts
オプション2にアプローチを変更すると、うまくいきましたが、最初のオプションも理解したいと思います。