特定のビルドを配信する

JenkinsBeginner
オンラインで実践に進む

はじめに

Walk Weekender は、Riverwalk Saturday の来場者用パックのエディションを確定しました。その後に作られたドラフトもビルドには成功しています。配信ジョブは、パックを作り直したり、消去済みのワークスペースに依存したりせず、既存の Jenkins の実行から、確定したパックを取得する必要があります。

この実習では、ダウンロードできるイベント資料パックを保存するで学んだアーカイブ、ワークスペースのクリーンアップ、フィンガープリントの概念に加え、Jenkins の基本的な画面操作と ZIP の展開を前提としています。この単元は独立した状態で始まります。ソースのビルド履歴、現在公開されている旧版のパック、配信ジョブはすでに用意されています。前の実習のファイルや、稼働中の VM は必要ありません。

実際の来場者用ファイルの確認には Pack Desk、ジョブの確認と設定には Jenkins を使います。これらは準備済みの 1 台の VM 上で動く 2 つのサービスです。Copy Artifact プラグインはすでに利用できます。用意された公開処理の送信先は、この依頼をチェックする小さなローカルの練習用受信サービスです。本番用のアーティファクトレジストリや承認サービスではありません。ここでは、すでに確定した実行を選択します。承認プロセスを実装するわけではありません。所要時間は著者による見積もりで、初心者による実測値ではありません。

依頼内容とコピーされたパックを比較する

このステップでは、確定したソースの実行を特定してから、配信ジョブが別のエディションをコピーする様子を観察します。Pack Desk から始めてください。

Requested edition: RW-02 を読みます。イベントは Riverwalk Saturday、ソースジョブは create-riverwalk-pack です。Open the current pack を選びます。現在のエディションは RW-01 で、集合時刻は 10:30 です。依頼されたパックでこの旧版を置き換え、別の Parkside パックは引き続き利用できる状態にする必要があります。ブラウザーの Back 操作でデスクに戻ります。

Jenkins に切り替え、create-riverwalk-pack を開き、Builds の下にある番号付きビルドを確認します。ビルド番号は 1 つのジョブ内の番号です。番号だけで、すべてのジョブを通じてアーティファクトを一意に識別できるわけではありません。各ビルドの Console Output を開き、作成された来場者向けエディションと最終結果を読みます。履歴には次のビルドがあります。

ビルド 来場者向けエディション 結果 今回の依頼における意味
#1 Parkside Paper Trail / PP-01 SUCCESS 別のイベント
#2 Riverwalk Saturday / RW-02 SUCCESS 既存の確定済みパック
#3 Riverwalk Saturday / RW-03-DRAFT SUCCESS より新しいドラフトで、依頼されたものではない
#4 Riverwalk Saturday / RW-02 FAILURE ZIP は保存されているが、実行は失敗

パンくずリストのリンクでビルド #2 を開き、Build Artifacts の event-pack.zip をダウンロードして、アーカイブ全体を展開します。概要ページと案内には RW-02 と 10:00 が示されています。コンソールの最後にはワークスペースのクリーンアップがあります。アーカイブはビルドに属しているため、配信ジョブはクリーンアップの後でも取得できます。

この既存のソース履歴を残してください。ソースジョブやそのビルドの設定変更、再実行、削除、名前変更は行わないでください。作業範囲は deliver-riverwalk-pack の Pipeline と、そのビルドパラメーターだけです。用意されたファイル、公開処理、アーカイブ処理、クリーンアップを維持し、別の Parkside パックはそのまま残してください。

パンくずリストの Dashboard を使い、deliver-riverwalk-pack を開いて、Configure、Pipeline セクションの順に選びます。まだ変更せず、Copy archive ステージを読んでください。

copyArtifacts projectName: params.SOURCE_JOB,
    selector: lastSuccessful(),
    filter: 'event-pack.zip',
    fingerprintArtifacts: true

copyArtifacts は、別の Jenkins ジョブから保存済みアーティファクトを取得します。projectName はそのジョブを選択し、params.SOURCE_JOB はこの配信の実行時に入力した値を読み取ります。filter はアーカイブ内のファイルを選びます。セレクターは、ソースのどの番号付き実行を使うかを決めます。lastSuccessful() の選択対象は変動します。これはコピーが行われる時点で最後に成功した実行を意味し、依頼されたエディションを意味するものではありません。fingerprintArtifacts: true は、ジョブ間で追跡できるようにファイルの使用状況を記録します。

用意された Archive delivery ステージは、コピーした ZIP を配信ビルドに保存します。Deliver pack は、そのコピーしたバイト内容をそのままローカルのデスクに送ります。最後の post クリーンアップは、配信のワークスペースを消去します。これらの部分は変更せずに残してください。編集せずに Save を選びます。

Build with Parameters を選びます。フォームの読み込みが完了するまで待ちます。SOURCE_JOB を create-riverwalk-pack、SOURCE_BUILD を 2 に設定し、Build を選びます。これらの値は意図したソースを表しますが、現在のセレクターは依然として SOURCE_BUILD を無視します。

この配信ビルドが FAILURE で終了するまで待ち、Console Output を開きます。ソースビルド 3 からの Copied 1 artifact に続き、The package bytes differ from the selected source archive. が表示されるはずです。公開処理の受信サービスは HTTP 422 を返します。サービスには到達しましたが、選ばれたパッケージは拒否されました。これは接続失敗とは異なります。シェルのステップがゼロ以外の結果を返すため、ビルドは失敗します。

この配信ビルドの Build Artifacts で event-pack.zip を開き、別のフォルダーに展開して概要ページを読みます。ソースで最後に成功した実行はビルド #3 なので、中身は RW-03-DRAFT です。ZIP が保存されていることと、ソースの実行が緑色であることだけでは、依頼されたエディションを特定するには不十分です。

Pack Desk に切り替えて再読み込みし、現在のパックをもう一度開きます。引き続き RW-01 と 10:30 が表示されている必要があります。拒否された試行によって、有効な来場者用資料が置き換わってはいけません。ブラウザーの Back 操作でデスクに戻ります。

確定した実行を配信して追跡する

このステップでは、確定した実行を明示的に指定してコピーし、配信された来場者用ファイルと Jenkins 上の追跡情報を検証します。Jenkins の deliver-riverwalk-pack ジョブページから始めてください。

Configure、Pipeline の順に選びます。Script で、次の部分だけを変更します。

selector: lastSuccessful(),

変更後は次のとおりです。

selector: specific(params.SOURCE_BUILD),

specific(...) は、ソースのビルド番号を明示的に指定して選択します。params.SOURCE_BUILD はビルドフォームで入力した文字列を読み取り、SOURCE_JOB と組み合わせて、既存の 1 回の実行を特定します。コンマは残してください。後に続く filter の設定は、同じ copyArtifacts 操作に属しています。用意された RECEIVER_URL の値、ほかのすべてのステージ、最後のクリーンアップを維持してください。

Script で、Copy archive の下にあるセレクターの行を探します。コードの読み込みが完了するまで待ち、必要に応じてエディター内をスクロールしてください。lastSuccessful をダブルクリックして関数名だけを選択し、specific と入力します。空の丸括弧は残ります。キャレットが specific の直後にある状態で Right Arrow キーを 1 回押して () の内側に移動し、params.SOURCE_BUILD と入力します。保存する前に、上記のセレクターの行全体と照合してください。誤ってほかのテキストまで置き換えた場合は、保存する前に Windows/Linux では Ctrl+Z、macOS では Command+Z で元に戻し、やり直します。Save を選びます。

もう一度 Build with Parameters を実行します。フォームの読み込みが完了するまで待ち、SOURCE_JOB に create-riverwalk-pack、SOURCE_BUILD に 2 を入力し、Build を選びます。SUCCESS になるまで待ちます。コンソールには、アーティファクトのコピー、アーカイブとフィンガープリントの処理、delivered を含む応答、最後のワークスペースのクリーンアップが表示されるはずです。

Jenkins で Groovy の構文エラーが表示された場合は、Configure に戻り、セレクターの行、丸括弧、コンマを上記の正確な置き換え内容と照合してください。保存し、同じ値で再実行します。コンソールにプロジェクト、ビルド、アーティファクトが見つからないと表示された場合は、フォームの 2 つの値とソースビルド #2 を確認します。新しい実行を作るためにソースジョブを再実行してはいけません。The selected source run does not satisfy this delivery request. という応答は、ジョブまたはビルド番号が誤っていることを意味します。The package bytes differ from the selected source archive. は、コピーした ZIP が、そのパラメーターで指定されたソースの実行と一致しないことを意味します。いずれも、デスクに到達した後の業務上の拒否です。

成功した配信ビルドの状態ページを開き、See Fingerprints を選びます。Recorded Fingerprints で、event-pack.zip の行の Original owner は create-riverwalk-pack のビルド #2 へのリンクでなければなりません。event-pack.zip のリンクを選んで詳細を開きます。そのファイルを最初に登録したビルドを示すリンクは、同じソースの実行を指しているはずです。また、Usage には、成功した deliver-riverwalk-pack の実行が含まれている必要があります。これらは、同じファイルの出所と使用状況に関する Jenkins の記録です。誰がエディションを承認したかを証明するものでも、公開者の暗号学的署名を提供するものでもありません。

元のソースビルドと配信ジョブを結び付ける Jenkins のフィンガープリント

上部付近にある、ファイルを最初に登録したビルドへのリンクと、Usage の下にある 2 つのジョブを確認してください。あなたの配信ビルドの番号は、この例と異なることがあります。

この成功した配信ビルドから event-pack.zip をダウンロードします。新しいフォルダーに展開して index.html を開き、Riverwalk Saturday、RW-02、10:00 を確認します。Explore the route を開き、3 か所すべての立ち寄り地点と、描画されたルート画像を確認してください。CSV には Download all route stops、ローカルのテキストには Read the visitor notes を選びます。案内は、新たにダウンロードされる代わりに、ブラウザー内で直接開くことがあります。元のテキストファイルは、展開したフォルダーにすでにあります。build.json を含む 8 つのファイルを同じフォルダーに保ってください。このファイルの job と number は、create-riverwalk-pack と 2 を示しています。

Pack Desk に切り替えて再読み込みします。現在のパックは RW-02 になっている必要があります。開いて、ルート、CSV、案内をもう一度確認します。ブラウザーの Back 操作で戻り、Download the current ZIP を選びます。このダウンロードは、新しく作り直した代替品ではなく、完全な元のソースアーカイブでなければなりません。受信サービスは、現在のパックを変更する前に、実際のバイト内容を比較します。

最後に、デスクのナビゲーションから Parkside pack を選び、Parkside Paper Trail が引き続き開き、そのルートと案内も利用できることを確認してください。ソースのビルド履歴と、用意されたすべてのファイルは、そのまま維持する必要があります。さらに Pipeline を編集した場合は、完了をチェックする前に、保存した Pipeline を再実行してください。

まとめ

ワークスペースが消去された後でも、既存の Jenkins ビルドから確定した来場者用パックを取得できました。選択対象が変動するセレクターでは、ビルドに成功したドラフトが選ばれる理由を確認し、ジョブとビルド番号を明示的に指定して、Jenkins のフィンガープリントを通じて元のアーカイブを別の配信ジョブまで追跡しました。デスクでは、元の来場者用ファイルが欠けることなく提供され、別のイベントのパックも引き続き利用できます。