Jenkins Configuration as Code:移行-Migration


この記事は、Jenkins Configuration as Codeに関する6回シリーズの最終回です。

Jenkins configuration as codeを使用すると、Jenkinsマスターの設定を簡潔で宣言的なYAMLファイルとして作成し、コードとして管理できます。なかなか便利そうですが、どうやって始めればよいのでしょうか?

移行の方法

エンドユーザーがまず考えるのは、一からすべてを学習する必要のないツールを採用したいということです。すでに何百ものプラグインが設定されたJenkinsマスターを運用している場合、そこからJCasCの採​​用は大きな移行の負担を意味します。

まっさらのJenkinsマスターから始めるユーザーでも、具体的なサンプルなしに最初のJenkins YAMLファイルを書くということは、おそらくしないでしょう。これまでのJenkins configuration as codeシリーズの記事をご覧になっていない方のために言うと、Jenkins configuration as codeは、参考用のリファレンスとスキーマを生成します。しかし、これもまだ難しい方法ではあります。

サンプルとデモ

そういう方のために、GitHubリポジトリには、さまざまなプラグインやユースケース用のサンプル設定を含むデモフォルダーが用意されています(新しいサンプルの提供も歓迎します!)。要件に合ったサンプルをつまみ食いし、YAML構文とJenkinsの設定に慣れるのに役立ちます。

しかし、さらに簡単な方法もあります。

ライブインスタンスからのエクスポート

YAML-to-Jenkins設定のエンジン開発中に、私たちは多くの場合は逆の処理、つまりJenkinsインスタンスからYAMLコンテンツを生成することも可能であるのに気が付きました。

実際、Jenkins configuration as codeがYAML入力を使って模倣しているWebユーザーインターフェイス(UI)のデータバインディングも、同じ原理に基づいています。つまり、Web UIのデータモデルの文字列表現を取得し、サブミットボタンが押されたとき、そのデータをJavaモデルに変換します。そして、設定ページに戻ったときには、JavaモデルをWebフォーム要素として表示します。

そこで、私たちはエクスポート機能を導入しました。

このボタンは、Jenkinsインスタンスの設定を反映したYAMLコンテンツを生成します。

この機能を実装する上での大きな課題は、巨大なYAMLダンプを作成しないよう、デフォルト状態ではない要素だけをエクスポートすることでした。これにより、Web UIを使っていくつかの変更を加えたとき、YAMLエクスポートで実際にどのような変更が行われたかを知ることができます。

これは、目的のYAML構文を調べ、Jenkins configuration as codeを数分で準備する非常に簡単な方法です。

制限事項

Jenkinsの内部的な不具合のために、エクスポートをそのまま使用してJenkinsマスターの複製を作成することはできません。YAMLストリームには、データのエクスポート失敗に関する警告が含まれている可能性があります。それでも、ユーザー独自のYAML設定ファイルを書くためのベースとして使うことはできます。

では、この次は?

この記事は、 Jenkins configuration as codeシリーズの最終回です。このシリーズが、Jenkins configuration as codeプロジェクトとそのメリットを発見し、試してみるのに役立つことを願っています。

Jenkins Configuration for Codeプラグインの詳細については、プロジェクトのGitHubリポジトリをご覧ください。コミュニティやコントリビューターとチャットするには、私たちのgitterチャネルに参加してください。

シリーズの他の回

Jenkins Configuration as Code:最初の一歩(ママ見て、すごいでしょ)

Jenkins Configuration as Code:機密データの扱い

Configuration as Code:プラグインをどう扱うか

Jenkins Configuration as Code:もっとスピードを!

Jenkins Configuration as Code:ドキュメント

(この記事は、CloudBees社 Blog 「Jenkins Configuration as Code: Migration」2018年9月12日 Nicolas De Loof 投稿の翻訳記事です。)