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:まだリリースまではしてない