Jenkins の機能で、プロジェクトの設定を画面で保存する代わりに、
設定ファイルの内容を特定のURL に対して POST することで、
設定を反映させる機能があるかとおもいます。
------------------------------------------------
例:
http://localhost:8080/job/TestJob/config.xml
に対して以下の内容を POST で送信
<?xml version='1.0' encoding='UTF-8'?>
<project>
<actions/>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<canRoam>false</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers class="vector"/>
<concurrentBuild>false</concurrentBuild>
<builders/>
<publishers/>
<buildWrappers/>
</project>
------------------------------------------------
この機能で設定を反映しようとするとき、設定を追加または変更する場合はうまくいくのですが
設定の削除 ( = XML上でタグごとなくなる) が反映されません。
少し調べてみたところ、この機能に対応するのは
hudsol.model.AbstractItem#doConfigDotXml(StaplerRequest req,
StaplerResponse rsp)
のようです。
この中で、POSTされてきたXMLデータを XStream の unmarshal で
現在のプロジェクトインスタンスに反映する処理がありますが、この unmarshal は
XMLに書かれていないインスタンスフィールドはノータッチのため、
設定を削除したくとも、それを反映する方法がありません。
こういった場合のワークアラウンドはあるのでしょうか?
--
KOJIMA Takanori <takanor...@gmail.com>
コアでunmarshalを呼ぶ前に初期値をセットする以外の方法はないと思います。凄くerror proneですが。
新しいオブジェクトを作ってフィールドの値をコピーするようにすればいいかな...。
2012年2月24日1:08 KOJIMA Takanori <takanor...@gmail.com>:
--
Kohsuke Kawaguchi
> コアでunmarshalを呼ぶ前に初期値をセットする以外の方法はないと思います。凄くerror proneですが。
> 新しいオブジェクトを作ってフィールドの値をコピーするようにすればいいかな...。
ご意見ありがとうございます。
やはりそうした方法になりますか。
ついでなので、もうひとつ聞きたいことがあります。
dotConfigDotXml メソッドを使用した場合、SavableListener#fireOnChange が
呼ばれないため、SavableListener にぶら下がっているイベント検知機構は
動作しません。これは何か設計上の意図があってそうしているのでしょうか?
2012年2月24日8:29 Kohsuke Kawaguchi <k...@kohsuke.org>:
--
--
KOJIMA Takanori <takanor...@gmail.com>