jenkins-capistranoでプラグインインストールのサポートしたよー

ついでにjenkins-capistrano-0.0.6としてリリースしてみました。

リリースノート

  • ビューの管理機能
  • プラグインの管理機能(実験機能)

ビューの作成機能はサクッと出来たもののプラグインについては色々と悩みどころがあってここ2,3日考えていたんですが、まだ安定版にもしてないしとりあえず出しちまえと思って出してみました*1。使い方についてはREADME(view, plugin)を参照してくださいな。

今後について

思ってることをつらつらと。

今回サポートしたプラグインの管理機能はJenkins1.483でサポートされたAPIを利用して作っているんですが、この素晴らしいAPIは全てのconfig.xmlに書かれたpluginのバージョンを元にインストールするという方法がサポートされてます。つまり、この機能を利用すればconfig/jenkins配下に置かれたjob,node,viewを元に自動でプラグインがインストール出来るように作れるってことなんですよね。夢がひろがりんぐ。

ただ、現状だとnodeの追加はjenkins.rbをベースにした形でconfig.xmlではなくFormのサブミッションで作成しているのでサポートしきれません。しかも恐らく*2nodeの追加はconfig.xmlのPOSTでは作れない*3のでちょっと手数を踏んで実装するか、jenkins.model.Jenkins#createNodeを実装して対応するか・・・。でもそれだと過去バージョン使ってる人は使えないなーとか。色々悩み中です。

という訳で実装方法はともかくも今後のロードマップは以下な感じで考えてます。こうしたらいいんじゃない?とかこういうのが欲しいとかあればTwitterなりでアイデアくださいまし。

  • config_nodesタスクのconfig.xml形式をサポート
    • 既存のjsonフォーマットからのmigration込み
  • 指定のJenkinsからjob,node,viewのconfig.xmlをダウンロードする機能
  • 1.483以前のJenkinsのXMLを最新の形式にする機能のサポート(プラグインの自動インストールに必要)
  • プラグインの指定インストールも現状のままのサポート

そんな訳で今後もよろしくお願いします〜。

*1:実装が死ぬほどやっつけなのはご容赦ください

*2:nodeを空で追加してからPOSTなら出来る

*3:更新は可能

jenkins-capistranoでviewの作成をサポートしてみた

今まではジョブの作成、更新、無効化とslaveの作成までをサポートしていたのだけど、Viewも一緒に作成出来ればなぁと思ってJenkinsのコミットログをRESTでgrepしてみたら出来るっぽかったので対応してみた*1

使い方

構成はこんな感じ

  config
  ├── deploy.rb
  └── jenkins
       └── views
           ├── view1.xml
           ├── view2.xml
           └── view3.xml

deploy.rb

set :application, "your-awesome-app"
set :scm, :git
set :repository,  "https://github.com/your/repository.git"

set :jenkins_host, 'http://localhost:8080'
# set :jenkins_username, '' # default empty
# set :jenkins_password, '' # default empty
# set :jenkins_view_config_dir, 'config/jenkins/views'

before 'deploy', 'jenkins:config_views'

viewの設定はconfig.xmlで管理するので以下な感じ。xmlのファイル名はviewの名前と合わせておいてくださいまし。

<listView>
  <name>view1</name>
  <filterExecutors>false</filterExecutors>
  <filterQueue>false</filterQueue>
  <properties class="hudson.model.View$PropertyList"/>
  <jobNames class="tree-set">
    <comparator class="hudson.util.CaseInsensitiveComparator" reference="../../../hudson.plugins.view.dashboard.Dashboard/jobNames/comparator"/>
  </jobNames>
  <jobFilters/>
  <columns>
    <hudson.views.StatusColumn/>
    <hudson.views.WeatherColumn/>
    <hudson.views.JobColumn/>
    <hudson.views.LastSuccessColumn/>
    <hudson.views.LastFailureColumn/>
    <hudson.views.LastDurationColumn/>
    <hudson.views.BuildButtonColumn/>
  </columns>
  <includeRegex>job.*</includeRegex>
</listView>

こんなXML作れねーよ!と思う人は慌てるなかれ、最初は画面から作ってしまって$JENKINS_HOME/config.xmlのviewsセクションのXMLをコピペすればいけまする。
ただし以下の部分はpostした時にJenkinsに怒られちゃうので削除してくださいまし。基本どのViewでも対応できるはず。

<owner class="hudson" reference="../../.."/>

これで複雑に構成されたjenkinsでも一発で復元できますねっ!!

ちなみにpluginのインストールもサポートする予定ではいてやっつけ実装のものがfeature/manage-plugin-supportブランチにおいてあります。こちらに関してはpluginインストール完了待ちの実装だったり、完了後の再起動だったりとかどうしようかなぁと思い中なのでも少し時間かかりそーです。

ちなみにJenkinsとPluginのインストールはpuppet-jenkinschef-jenkinsでやってしまう方がいいかなと思っていますが、もう少しライトウェイトに使いたい方のお役には立てるかなと思ってるので頑張る予定です。

皆様のご意見、ご感想お待ちしております!

Chef: The Definitive Guideウェブオペレーション ―サイト運用管理の実践テクニック (THEORY/IN/PRACTICE)Amazon Web Services クラウドデザインパターン実装ガイド

*1:まだリリースまではしてない