Java/Jenkins/プラグイン開発
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
プロジェクトでJenkinsを使ってますが、勉強も兼ねてJenkins...
//ここにコンテンツを記述します。
#contents
まずは [[Plugin tutorial - 日本語 - Jenkins Wiki>https://...
**やってみる [#cbc98b72]
環境は Macに [[Mac OS X に maven3 (3.0.5) をインストール...
***事前の設定 [#q1e08a3e]
# view ~/.m2/settings.xml
下記のように作成しておきます。
# cat ~/.m2/settings.xml
<settings>
<pluginGroups>
<pluginGroup>org.jenkins-ci.tools</pluginGroup>
</pluginGroups>
<profiles>
<!-- Give access to Jenkins plugins -->
<profile>
<id>jenkins</id>
<activation>
<activeByDefault>true</activeByDefault>
<!-- change this to false, if you don't like to h...
</activation>
<repositories>
<repository>
<id>repo.jenkins-ci.org</id>
<url>http://repo.jenkins-ci.org/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>repo.jenkins-ci.org</id>
<url>http://repo.jenkins-ci.org/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</settings>
*** プロジェクトの作成 [#c13d53c2]
# mvn -cpu hpi:create
プロジェクト名などを聞かれる。
groupId: nu.mine.kino.jenkins.plugins
artifactId: project-management
こうなるように答えました。
# cd project-management/
# mvn -DdownloadSources=true -DdownloadJavadocs=true ecl...
Eclipseで利用可能になりました。このDownloadのオプションで...
# mvn package
/project-management/target/project-management.hpi という...
***ローカルのリポジトリにインストール [#e9b84366]
# mvn install
*** 動かしてみる。 [#wf780ce2]
# export MAVEN_OPTS="-Xdebug -Xrunjdwp:transport=dt_sock...
# mvn hpi:run
Windowsでは
set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,ser...
ローカルでJenkinsが起動します。http://localhost:8080/jenk...
Hello World的なプラグインがインストールされているのが分か...
#ref(Jenkins_設定.png)
プラグイン全体に関する設定画面 にHello World Builderとい...
#ref(プロジェクトの設定.png)
各プラグインの画面にも設定が追加されている。
#ref(ビルドのコンソール結果.png)
ビルドを実行した結果でプラグインが動いているのが分かる。
**プロジェクトの構成 [#l3860c2b]
プロジェクトの構成はこんな感じになっています。
#ref(project_setting.png)
***HelloWorldBuilder [#e900c1c7]
HelloWorldBuilder は Builderを拡張しているクラスで、Jenki...
それで追加するとビルド時にこのクラスのメソッドが呼び出さ...
実際呼び出されるメソッドは、
@Override
public boolean perform(AbstractBuild build, Launcher ...
// This is where you 'build' the project.
// Since this is a dummy, we just say 'hello worl...
// This also shows how you can consult the global...
if (getDescriptor().getUseFrench())
listener.getLogger().println("Bonjour, "+name...
else
listener.getLogger().println("Hello, "+name+"...
return true;
}
これです。
***config.jelly [#hbbcec35]
config.jelly は ビルド に追加したときに画面に表示されるUI...
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" x...
<!--
This jelly script is used for per-project configurat...
See global.jelly for a general discussion about jell...
-->
<!--
Creates a text field that shows the value of the "na...
When submitted, it will be passed to the correspondi...
-->
<f:entry title="Name" field="name">
<f:textbox />
</f:entry>
</j:jelly>
ここでセットされた値は HelloWorldBuilder のコンストラクタ
// Fields in config.jelly must match the parameter names...
@DataBoundConstructor
public HelloWorldBuilder(String name) {
this.name = name;
}
に渡されるようになっています。
***global.jelly [#q178448f]
global.jelly は 「Jenkinsの管理 > システムの設定」に表示...
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" x...
<!--
This Jelly script is used to produce the global conf...
Jenkins uses a set of tag libraries to provide unifo...
To determine where this tag is defined, first check ...
and then look under $JENKINS/views/. For example, <f...
in $JENKINS/views/lib/form/section.jelly.
It's also often useful to just check other similar s...
tags they use. Views are always organized according ...
so it should be straightforward to find them.
-->
<f:section title="Hello World Builder">
<f:entry title="French" field="useFrench"
description="Check if we should say hello in Frenc...
<f:checkbox />
</f:entry>
</f:section>
</j:jelly>
ここでセットされた値は、自動生成された
@Extension // This indicates to Jenkins that this is an ...
public static final class DescriptorImpl extends BuildS...
@Override
public boolean configure(StaplerRequest req, JSON...
// To persist global configuration information,
// set that to properties and call save().
useFrench = formData.getBoolean("useFrench");
// ^Can also use req.bindJSON(this, formData);
// (easier when there are many fields; need ...
save();
return super.configure(req,formData);
}
}
ここからアクセス可能なようです。
**いじってみる [#c870c7a0]
*** システムの設定画面に、テキストボックスを追加してみる...
システムの設定に表示される設定画面に、新たにテキストボッ...
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" x...
<f:section title="Hello World Builder">
<f:entry title="French" field="useFrench"
description="Check if we should say hello in Frenc...
<f:checkbox />
</f:entry>
<!-- 追加 -->
<f:entry title="Text Data" field="textData">
<f:textbox />
</f:entry>
<!-- 追加 -->
</f:section>
</j:jelly>
Jenkinsを再起動したところ、、、、、
#ref(text.png)
追加されました!!!
さて、この設定画面に追加されたテキストボックスの値ですが...
private String text;
public boolean configure(StaplerRequest req, JSONObject ...
text = formData.getString("textData");
save();
return super.configure(req,formData);
}
などとアクセス可能なのでした。また、設定画面を開いた際に...
public String getTextData(){
return text;
}
がコールされ、textの情報が画面に反映されます。
***まとめると [#kbaf9625]
まとめると、画面( global.jelly )に「field="textData"」と...
formData.getString("textData");
で画面上のデータにアクセスし(してデータをsaveしておいて)...
public String getTextData(){
return text;
}
という名前でさっき保存したデータを返すようにしておく、と...
そしてジョブからそのデータを使用する場合は、プログラム上...
@Override
public boolean perform(AbstractBuild build, Launcher lau...
listener.getLogger().print( getDescriptor().getTextDat...
return true;
}
などと指定すればOKですね。
***ジョブの設定画面に、テキストボックスを追加してみる。 [...
次は、各ジョブごとの設定画面に、テキストボックス(テキスト...
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" x...
xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/...
<f:entry title="Name" field="name">
<f:textbox />
</f:entry>
<!-- 追加 -->
<f:entry title="List" field="dataList">
<f:textarea />
</f:entry>
<!-- 追加 -->
</j:jelly>
Jenkinsを再起動したところ、、、、、
#ref(configtext.png)
追加されました!!!
ちなみにこの*.jellyに書くタグは
[[Jelly Taglib references>https://jenkins-ci.org/maven-si...
さてこの追加された画面の情報をどのようにプラグインが保存...
@DataBoundConstructor
public HelloWorldBuilder(String name) {
this.name = name;
}
このアノテーションされたコンストラクタに渡されるのでした...
@DataBoundConstructor
public HelloWorldBuilder(String name, String dataList) {
this.name = name;
this.dataList = dataList;
}
private final String name;
private final String dataList;
また global.jelly 同様、画面を開いた際に field="dataList"...
public String getDataList() {
return dataList;
}
以上で、ジョブの設定画面の情報はJenkinsによってストアされ...
@Override
public boolean perform(AbstractBuild build, Launcher lau...
listener.getLogger().print(dataList);
return true;
}
とアクセス可能です。
**関連リンク [#lce0dfb1]
-[[Welcome to Jenkins CI! | Jenkins CI>http://jenkins-ci....
-[[Plugin tutorial - 日本語 - Jenkins Wiki>https://wiki.j...
-[[Hudsonプラグイン開発 - wyukawa’s blog>http://d.hatena....
-[[継続的インテグレーションツール Hudson のプラグインを作...
-[[Plugins - Jenkins - Jenkins Wiki>https://wiki.jenkins-...
-[[Extension points - Jenkins - Jenkins Wiki>https://wiki...
-[[JSTL Core <fmt:formatDate> Tag>http://www.tutorialspoi...
-[[Jelly Taglib references>https://jenkins-ci.org/maven-s...
-[[Extend Jenkins - Jenkins - Jenkins Wiki>https://wiki.j...
-[[Basic guide to Jelly usage in Jenkins - Jenkins - Jenk...
-[[Hyperlinks in HTML - Jenkins - Jenkins Wiki>https://wi...
-[[Jelly form controls - Jenkins - Jenkins Wiki>https://w...
-[[Jenkinsプラグインを作成する際のJellyテンプレートでのハ...
-[[Hudsonを利用してファイルI/Fを実現したい(5) - 履歴>http...
-[[Jenkinsを拡張してファイルI/Fを実現したい - 履歴>http:/...
-[[jenkins_plugin_samples>https://github.com/yasu-s/jenki...
----
この記事は
#vote(おもしろかった[3],そうでもない[0])
- HelloWorldBuilderはどのようにJenkinsに「登録」されるの...
- ヒープの設定もする場合。。 export MAVEN_OPTS="-Xdebug -...
- みんな数値のフォーマッティングはどうやってんのかな、、...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
プロジェクトでJenkinsを使ってますが、勉強も兼ねてJenkins...
//ここにコンテンツを記述します。
#contents
まずは [[Plugin tutorial - 日本語 - Jenkins Wiki>https://...
**やってみる [#cbc98b72]
環境は Macに [[Mac OS X に maven3 (3.0.5) をインストール...
***事前の設定 [#q1e08a3e]
# view ~/.m2/settings.xml
下記のように作成しておきます。
# cat ~/.m2/settings.xml
<settings>
<pluginGroups>
<pluginGroup>org.jenkins-ci.tools</pluginGroup>
</pluginGroups>
<profiles>
<!-- Give access to Jenkins plugins -->
<profile>
<id>jenkins</id>
<activation>
<activeByDefault>true</activeByDefault>
<!-- change this to false, if you don't like to h...
</activation>
<repositories>
<repository>
<id>repo.jenkins-ci.org</id>
<url>http://repo.jenkins-ci.org/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>repo.jenkins-ci.org</id>
<url>http://repo.jenkins-ci.org/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</settings>
*** プロジェクトの作成 [#c13d53c2]
# mvn -cpu hpi:create
プロジェクト名などを聞かれる。
groupId: nu.mine.kino.jenkins.plugins
artifactId: project-management
こうなるように答えました。
# cd project-management/
# mvn -DdownloadSources=true -DdownloadJavadocs=true ecl...
Eclipseで利用可能になりました。このDownloadのオプションで...
# mvn package
/project-management/target/project-management.hpi という...
***ローカルのリポジトリにインストール [#e9b84366]
# mvn install
*** 動かしてみる。 [#wf780ce2]
# export MAVEN_OPTS="-Xdebug -Xrunjdwp:transport=dt_sock...
# mvn hpi:run
Windowsでは
set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,ser...
ローカルでJenkinsが起動します。http://localhost:8080/jenk...
Hello World的なプラグインがインストールされているのが分か...
#ref(Jenkins_設定.png)
プラグイン全体に関する設定画面 にHello World Builderとい...
#ref(プロジェクトの設定.png)
各プラグインの画面にも設定が追加されている。
#ref(ビルドのコンソール結果.png)
ビルドを実行した結果でプラグインが動いているのが分かる。
**プロジェクトの構成 [#l3860c2b]
プロジェクトの構成はこんな感じになっています。
#ref(project_setting.png)
***HelloWorldBuilder [#e900c1c7]
HelloWorldBuilder は Builderを拡張しているクラスで、Jenki...
それで追加するとビルド時にこのクラスのメソッドが呼び出さ...
実際呼び出されるメソッドは、
@Override
public boolean perform(AbstractBuild build, Launcher ...
// This is where you 'build' the project.
// Since this is a dummy, we just say 'hello worl...
// This also shows how you can consult the global...
if (getDescriptor().getUseFrench())
listener.getLogger().println("Bonjour, "+name...
else
listener.getLogger().println("Hello, "+name+"...
return true;
}
これです。
***config.jelly [#hbbcec35]
config.jelly は ビルド に追加したときに画面に表示されるUI...
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" x...
<!--
This jelly script is used for per-project configurat...
See global.jelly for a general discussion about jell...
-->
<!--
Creates a text field that shows the value of the "na...
When submitted, it will be passed to the correspondi...
-->
<f:entry title="Name" field="name">
<f:textbox />
</f:entry>
</j:jelly>
ここでセットされた値は HelloWorldBuilder のコンストラクタ
// Fields in config.jelly must match the parameter names...
@DataBoundConstructor
public HelloWorldBuilder(String name) {
this.name = name;
}
に渡されるようになっています。
***global.jelly [#q178448f]
global.jelly は 「Jenkinsの管理 > システムの設定」に表示...
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" x...
<!--
This Jelly script is used to produce the global conf...
Jenkins uses a set of tag libraries to provide unifo...
To determine where this tag is defined, first check ...
and then look under $JENKINS/views/. For example, <f...
in $JENKINS/views/lib/form/section.jelly.
It's also often useful to just check other similar s...
tags they use. Views are always organized according ...
so it should be straightforward to find them.
-->
<f:section title="Hello World Builder">
<f:entry title="French" field="useFrench"
description="Check if we should say hello in Frenc...
<f:checkbox />
</f:entry>
</f:section>
</j:jelly>
ここでセットされた値は、自動生成された
@Extension // This indicates to Jenkins that this is an ...
public static final class DescriptorImpl extends BuildS...
@Override
public boolean configure(StaplerRequest req, JSON...
// To persist global configuration information,
// set that to properties and call save().
useFrench = formData.getBoolean("useFrench");
// ^Can also use req.bindJSON(this, formData);
// (easier when there are many fields; need ...
save();
return super.configure(req,formData);
}
}
ここからアクセス可能なようです。
**いじってみる [#c870c7a0]
*** システムの設定画面に、テキストボックスを追加してみる...
システムの設定に表示される設定画面に、新たにテキストボッ...
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" x...
<f:section title="Hello World Builder">
<f:entry title="French" field="useFrench"
description="Check if we should say hello in Frenc...
<f:checkbox />
</f:entry>
<!-- 追加 -->
<f:entry title="Text Data" field="textData">
<f:textbox />
</f:entry>
<!-- 追加 -->
</f:section>
</j:jelly>
Jenkinsを再起動したところ、、、、、
#ref(text.png)
追加されました!!!
さて、この設定画面に追加されたテキストボックスの値ですが...
private String text;
public boolean configure(StaplerRequest req, JSONObject ...
text = formData.getString("textData");
save();
return super.configure(req,formData);
}
などとアクセス可能なのでした。また、設定画面を開いた際に...
public String getTextData(){
return text;
}
がコールされ、textの情報が画面に反映されます。
***まとめると [#kbaf9625]
まとめると、画面( global.jelly )に「field="textData"」と...
formData.getString("textData");
で画面上のデータにアクセスし(してデータをsaveしておいて)...
public String getTextData(){
return text;
}
という名前でさっき保存したデータを返すようにしておく、と...
そしてジョブからそのデータを使用する場合は、プログラム上...
@Override
public boolean perform(AbstractBuild build, Launcher lau...
listener.getLogger().print( getDescriptor().getTextDat...
return true;
}
などと指定すればOKですね。
***ジョブの設定画面に、テキストボックスを追加してみる。 [...
次は、各ジョブごとの設定画面に、テキストボックス(テキスト...
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" x...
xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/...
<f:entry title="Name" field="name">
<f:textbox />
</f:entry>
<!-- 追加 -->
<f:entry title="List" field="dataList">
<f:textarea />
</f:entry>
<!-- 追加 -->
</j:jelly>
Jenkinsを再起動したところ、、、、、
#ref(configtext.png)
追加されました!!!
ちなみにこの*.jellyに書くタグは
[[Jelly Taglib references>https://jenkins-ci.org/maven-si...
さてこの追加された画面の情報をどのようにプラグインが保存...
@DataBoundConstructor
public HelloWorldBuilder(String name) {
this.name = name;
}
このアノテーションされたコンストラクタに渡されるのでした...
@DataBoundConstructor
public HelloWorldBuilder(String name, String dataList) {
this.name = name;
this.dataList = dataList;
}
private final String name;
private final String dataList;
また global.jelly 同様、画面を開いた際に field="dataList"...
public String getDataList() {
return dataList;
}
以上で、ジョブの設定画面の情報はJenkinsによってストアされ...
@Override
public boolean perform(AbstractBuild build, Launcher lau...
listener.getLogger().print(dataList);
return true;
}
とアクセス可能です。
**関連リンク [#lce0dfb1]
-[[Welcome to Jenkins CI! | Jenkins CI>http://jenkins-ci....
-[[Plugin tutorial - 日本語 - Jenkins Wiki>https://wiki.j...
-[[Hudsonプラグイン開発 - wyukawa’s blog>http://d.hatena....
-[[継続的インテグレーションツール Hudson のプラグインを作...
-[[Plugins - Jenkins - Jenkins Wiki>https://wiki.jenkins-...
-[[Extension points - Jenkins - Jenkins Wiki>https://wiki...
-[[JSTL Core <fmt:formatDate> Tag>http://www.tutorialspoi...
-[[Jelly Taglib references>https://jenkins-ci.org/maven-s...
-[[Extend Jenkins - Jenkins - Jenkins Wiki>https://wiki.j...
-[[Basic guide to Jelly usage in Jenkins - Jenkins - Jenk...
-[[Hyperlinks in HTML - Jenkins - Jenkins Wiki>https://wi...
-[[Jelly form controls - Jenkins - Jenkins Wiki>https://w...
-[[Jenkinsプラグインを作成する際のJellyテンプレートでのハ...
-[[Hudsonを利用してファイルI/Fを実現したい(5) - 履歴>http...
-[[Jenkinsを拡張してファイルI/Fを実現したい - 履歴>http:/...
-[[jenkins_plugin_samples>https://github.com/yasu-s/jenki...
----
この記事は
#vote(おもしろかった[3],そうでもない[0])
- HelloWorldBuilderはどのようにJenkinsに「登録」されるの...
- ヒープの設定もする場合。。 export MAVEN_OPTS="-Xdebug -...
- みんな数値のフォーマッティングはどうやってんのかな、、...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: