【CloudBees CI奮闘記】第6章:バックアップを取得する


Jenkinsは世界中で人気があるフリーでオープンソースの自動化サーバーです。そのため気軽に運用を開始することができ、Jenkinsの豊富な機能やプラグインを用いることで環境を発展させていくことが可能です。その一方でJenkinsの運用を進めていくうちに課題も発生してくることがあります。
CloudBees CI奮闘記として、Jenkinsを利用していると発生し得る課題の紹介をしながら、それらを解消するエンタープライズ機能を強化した有償版JenkinsであるCloudBees CIの紹介を行っていきます。
本ブログでは、CloudBees CIと区別するためにhttps://www.jenkins.io/のJenkinsをOSS Jenkinsと記載します。区別する必要がない場合、Jenkinsと記載します。

そもそも「CloudBees CIとは?」といったことや、Jenkinsの利用上の課題についてはこちらのブログより確認ください。

はじめに

登場人物

吉田:転職したてのエンジニア。前職では積極的にCIやCDに取り組みながら開発をしていた。CI奮闘記では服部に色々アドバイスを行った。

服部:元々CIやJenkinsについては言葉は聞いたことがある程度であったが、吉田からのサポートをうけつつCI環境の導入担当として日々奮闘している。CI奮闘記では自部署にJenkinsを導入した。

バックアップ

さっきOperations Centerを確認したんだけど、Client Controllerの利用数も増えてきているようね。

前回導入したパイプラインテンプレートの効果も出ていそうです。パイプラインスクリプトの作成が難しいと思っていた人たちも積極的に活用してくれるようになりました。

導入した甲斐があったわね。あ、そういえばClient Controllerのバックアップはどうしているのかしら。

あ。そういえば特に何もしていませんね。JENKINS_HOMEを取得すればいいんですよね。

それでもいいんだけど、CloudBees CIにバックアップができる機能があるので使ってみましょう。

バックアップの重要性

Jenkinsにはジョブの成果物やテストレポートなど様々なデータが保存されています。また、フリースタイルジョブやパイプラインコードをJenkins上に保存している場合、Jenkinsが失われた際の復旧コストは甚大なものになるでしょう。
今回はOSS Jenkinsで実現可能なバックアップの取得方法/復元方法と、CloudBees CIならではのバックアップの取得方法/復元方法を紹介します。

基本的な手順

JENKINS_HOMEについて

Jenkinsの設定ファイルはJENKINS_HOMEに配置されます。
利用中のJENKINS_HOMEの場所は、Jenkinsダッシュボード > Jenkinsの管理 > system > ホームディレクトリで確認できます。

JENKINS_HOMEの内容

それぞれのファイルやサブディレクトリに含まれている内容については、以下のリンクを参照ください。

Explaining $JENKINS_HOME

JENKINS_HOME以下の全てのファイルやサブディレクトリを保存することでバックアップが完了します。
ただし、war ディレクトリはインストール時に展開されるwarファイル、pluginsディレクトリ以下のサブディレクトリは再起動時に自動的に配置されるファイルであり、バックアップとして保持せずとも簡単に復元が可能です。また、jobsディレクトリ以下にはジョブの成果物が保存されているため、場合によってはディレクトリのサイズが巨大になっていることも考えられます。バックアップ対象の保存容量を気にされる場合、Explaining $JENKINS_HOMEのリンク先の内容を確認し、取捨選択されるとよいでしょう。

バックアップの手順

  • JENKINS_HOMEのバックアップ対象を決定する。
  • バックアップの頻度を決定する。
  • バックアップをスケジュールする方法を決定する。
  • バックアップとして取得したJENKINS_HOMEを適切な場所に保存する。

上記手順でバックアップは完了します。JENKINS_HOMEのバックアップはJenkinsが動作中でもできますが、ジョブが実行中の場合、jobsディレクトリ以下の情報の破損等も考えられます。可能であればJenkinsのジョブが実行されていないタイミングやJenkinsの停止中にバックアップを取ることを推奨します。

バックアップからの復元

  • 移行先の環境でJenkinsをインストールし、セットアップを完了させる。
  • 移行先のJenkinsを停止させる。
  • 移行先のJENKINS_HOMEの内容を、バックアップとして取得したJENKINS_HOMEで差し替える。
  • 移行先のJenkinsを起動する。

上記手順でバックアップからの復元は完了します。定期的に取得したバックアップから復元ができるかの確認を行うことを推奨します。

参考情報

Jenkinsのプラグインページに「Backup」というプラグインがあります。こちらのプラグインはリリースが12年前になり、それ以来更新やメンテナンスされていません。問題が起きる可能性もあるため、上記の方法でのバックアップを推奨します。

CloudBees CIでの手順

CloudBees CIではCloudBees Backup pluginを利用し、バックアップを取得できます。こちらはジョブとして定義が可能です。方法について説明します。

新規ジョブ作成からジョブの種類を確認すると、「Backup and Restore」というジョブタイプがあります。こちらを利用します。

バックアップの手順


ビルド手順の追加から、Take backupを選択すると、バックアップ対象、バックアップの保存先、バックアップの保存ポリシー、バックアップの形式を選択できます。

バックアップ対象
バックアップの保存先
バックアップの保存ポリシー
バックアップの形式

試しにバックアップの保存先にローカルフォルダを指定し、ジョブを実行します。

問題なくバックアップの取得が完了しました。
通常のフリースタイルジョブのように、「定期的に実行」といったビルド・トリガの設定も可能です。ノードマシン上のcronやタスクスケジューラーの設定をすることなくバックアップの定期実行の設定も可能です。

バックアップからの復元

バックアップの取得同様、「Backup and Restore」のジョブタイプを選択し、ビルド手順の追加から、Restore from backupを選択すると、バックアップからの復元が可能です。

実行するとCloudBees CIの画面上からバックアップの復元が可能です。

CloudBees CIでの活用

CloudBees Backup pluginはバックアップ用のジョブを作成できます。
作成したジョブは「CloudBees Configuration as Code export and update」を利用し、yamlファイルとして定義が可能です。

CloudBees Configuration as Code export and updateからitems.yamlを作成し、「Backup and Restore」のジョブの設定ファイルをyamlファイルとして出力します。このyamlファイルを読み込むことでジョブの作成が完了します。

「Backup and Restore」ジョブ以外のジョブや設定もyamlファイルに保存できます。Client Controllerを利用する際の初期設定をまとめたyamlファイルをSCMなどに保存しておくと、利用者はそれを読み込むだけで、すぐにClient Controllerの利用を始めることができます。

CloudBees Backup pluginとCloudBees Configuration as Code export and updateを活用すればClient Controllerを作成と同時にバックアップの設定もできそうね。

例えば保存先や定期実行といったバックアップの設定が、Client Controller上で完結するという点もよいですね。早速Client Controller作成時に組み込んでみます!

まとめ

今回はCloudBees Backup pluginを紹介しました。

  • 機能名CloudBees Backup plugin
  • 概要:バックアップの作成、復元をジョブとして定義できる。ノードに対してのcronの設定等なしに定期実行の設定も可能。
  • 具体的な活用例:CloudBees Configuration as Code export and updateと組み合わせ、バックアップ用ジョブを即座に作成できる。

今回紹介した機能以外にも、共通管理や大規模なJenkinsの効率的な管理に便利な機能があります。
ぜひCloudBees CIを導入し、管理がしやすく、安定稼働するJenkins環境を手に入れてください。

CloudBees CI奮闘記一覧

Jenkinsのよくある課題とCIツール比較

Jenkinsのよくある課題とCIツール比較