Java/Jenkins/プラグイン開発のTIPS集
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
**config.jellyでデフォルト値を設定する。 [#k5232b10]
[[Basic guide to Jelly usage in Jenkins - Jenkins - Jenki...
<f:entry title="${%Port}" field="port">
<f:textbox default="80" />
</f:entry>
このように直接値を指定したり、
<f:entry title="メール送信先" field="addresses" descrip...
<f:textarea default="${descriptor.defaultSamples()}"/>
</f:entry>
このようにdescriptor#defaultSamples() メソッドを呼び出す...
public String defaultSamples() {
StringBuffer buf = new StringBuffer();
buf.append("hoge@example.com");
buf.append("\n");
buf.append("fuga@example.com");
buf.append("\n");
return new String(buf);
}
などと記述すればOKです。
**スクリプトコンソールをうまく使う。 [#x6152f95]
たとえば自分が開発したビルダーをセットしているプロジェク...
こんな時はスクリプトコンソールを使うことで、プラグイン内...
import nu.mine.kino.jenkins.plugins.projectmanagement.ut...
import nu.mine.kino.jenkins.plugins.projectmanagement.EV...
import hudson.util.DescribableList;
List items = Jenkins.getInstance().getItems();
for (TopLevelItem item : items) {
if (item instanceof FreeStyleProject) {
DescribableList buildersList = ((FreeStyleProjec...
.getBuildersList();
EVMToolsBuilder builder = buildersList // ...
.get(EVMToolsBuilder.class);
if (builder != null) {
println item.name
}
}
}
実際はGroovyなのですが、どーしてもJavaになってしまうのは...
こんな感じでコードを書いていくことが可能です。
**プラグイン開発で使用する、Jenkins起動時のMAVEN_OPTS [#d...
export MAVEN_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket...
Windowsだと
set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,ser...
こうかな?
**プラグイン開発で出てくる、ビルド関連のパス(FilePath/Fil...
System.out.println(build.getModuleRoot()); //FilePath ワ...
System.out.println(build.getRootDir()); //File このビル...
System.out.println(build.getWorkspace()); //FilePath
System.out.println(build.getArtifactsDir()); ←@Deprecate...
の結果ですが、ビルドはローカル(マスター)で実行されるかス...
-ローカル(マスター)の結果(Windows)
TESTというジョブを走らせた場合。
D:\workspace_palette\project-management\work\jobs\TEST\w...
D:\workspace_palette\project-management\.\work\jobs\TEST...
D:\workspace_palette\project-management\work\jobs\TEST\w...
D:\workspace_palette\project-management\.\work\jobs\TEST...
-スレーブの結果(Linux)
TESTというジョブを走らせた場合。スレーブのトップディレク...
/opt/jenkins/
に設定してあります。結果は以下
/opt/jenkins/workspace/TEST
D:\workspace_palette\project-management\.\work\jobs\TEST...
/opt/jenkins/workspace/TEST
D:\workspace_palette\project-management\.\work\jobs\TEST...
**Jenkinsのソース検索 [#g070d50c]
[[GitHub>https://github.com/jenkinsci/jenkins/search]] に...
「検索文字列」 repo:jenkinsci/jenkins [検索文字]といれて...
** ビルダーが追加したアクションのアイコンを指定する。 [#r...
XXBuilderクラスないで
action = new XXAction(build);
build.addAction(action);
などとしてアクションを追加すると、そのビルド画面の左メニ...
#ref(menu.png)
このアイコンを独自のモノにするには、
@Override
public String getIconFileName() {
return "/plugin/project-management/images/24x24/user_s...
}
などとしてファイル名を絶対パスで指定します。
この場所はプロジェクト上は
#ref(icon.png)
あたりに解釈されるので、ココにファイルを配置してビルドす...
[[Jenkins users - Plugin image location>http://jenkins-ci...
**アクションの画面でのリンク [#g3e2a4b9]
index.jelly 内のリンク設定:
<a href="documents/hogehoge.tsv">hogehoge.tsv</a>
だった場合、クリックするとアクションクラスの
public void doDynamic(StaplerRequest req, StaplerRespons...
throws IOException, ServletException {
}
メソッドがコールされます。引数は通常のサーブレットのReq/R...
なので下記のようにResponseにデータを流し込んで
String filePath = req.getRestOfPath(); filePathは docum...
File file = new File(owner.getRootDir(), filePath); ← r...
FileInputStream in = null;
ServletOutputStream out = res.getOutputStream();
try {
in = new FileInputStream(file);
int i;
while ((i = in.read()) != -1) {
out.write(i);
}
} finally {
out.close();
in.close();
}
ビルドしたディレクトリにあるファイルを引っぱってきて直接...
res.sendRedirect2(req.getContextPath() + req.getRestOfPa...
などとして指定した画面へリダイレクトしたりすることができ...
**ビルドのトリガーとなったコミット情報にアクセスする。 [#...
public boolean perform(AbstractBuild build, Launcher lau...
ないで、以下のようにアクセスすることができます。
if (build.getChangeSet() instanceof SubversionChangeLogS...
SubversionChangeLogSet changeSet = (SubversionChange...
.getChangeSet();
List<LogEntry> logs = changeSet.getLogs(); // 一回...
for (LogEntry logEntry : logs) {
List<Path> paths = logEntry.getPaths(); // ...
for (Path path : paths) {
listener.getLogger().printf("[%s][%s][%s][%s...
path.getKind(), path.getValue(), pat...
path.getEditType().getName());
}
}
}
実行結果:
A test.dat
At revision 347
[unknown][/trunk/test/test.dat][/trunk/test/test.dat][add]
ビルドのトリガーとなったコミット情報((というか、そのビル...
あ pom.xml に
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>subversion</artifactId>
<version>1.45</version>
</dependency>
の追加が必要です。。
**Jenkinsの設定を使ってE-Mailを送信する。 [#z5f9f65a]
まずこんな感じにメールを送信するメソッドを定義します。
public static void sendMail(String[] addresses, Strin...
String message) throws UnsupportedEncodingExc...
MessagingException {
MimeMessage mimeMessage = new MimeMessage(Mailer....
.createSession());
InternetAddress[] to = new InternetAddress[addres...
String adminAddress = JenkinsLocationConfiguratio...
.getAdminAddress();
for (int i = 0; i < addresses.length; i++) {
to[i] = new InternetAddress(addresses[i], tru...
}
mimeMessage.setSender(new InternetAddress(adminAd...
mimeMessage.setRecipients(Message.RecipientType.T...
mimeMessage.setSubject(subject, "ISO-2022-JP");
mimeMessage.setText(message, "ISO-2022-JP");
Transport.send(mimeMessage);
}
基本的にはコレだけでJenkinsにあらかじめ設定されているメー...
あとは
public boolean perform(AbstractBuild build, Launcher lau...
内で、以下のようにメール送信ができます。
listener.getLogger().printf("宛先: %s \n", addresses);
listener.getLogger().printf("題名: %s \n", subject);
listener.getLogger().printf("メッセージ: %s \n", messag...
String[] addressArray = StringUtils.stripAll(StringUtil...
addresses, ',' ));
try {
sendMail(addressArray, subject, message);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
あ、pom.xml に
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>mailer</artifactId>
<version>1.5</version>
</dependency>
の追加が必要です。。
----
この記事は
#vote(おもしろかった,そうでもない)
- こうみると、ワークスペースはスレーブにも存在するが、ビ...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
**config.jellyでデフォルト値を設定する。 [#k5232b10]
[[Basic guide to Jelly usage in Jenkins - Jenkins - Jenki...
<f:entry title="${%Port}" field="port">
<f:textbox default="80" />
</f:entry>
このように直接値を指定したり、
<f:entry title="メール送信先" field="addresses" descrip...
<f:textarea default="${descriptor.defaultSamples()}"/>
</f:entry>
このようにdescriptor#defaultSamples() メソッドを呼び出す...
public String defaultSamples() {
StringBuffer buf = new StringBuffer();
buf.append("hoge@example.com");
buf.append("\n");
buf.append("fuga@example.com");
buf.append("\n");
return new String(buf);
}
などと記述すればOKです。
**スクリプトコンソールをうまく使う。 [#x6152f95]
たとえば自分が開発したビルダーをセットしているプロジェク...
こんな時はスクリプトコンソールを使うことで、プラグイン内...
import nu.mine.kino.jenkins.plugins.projectmanagement.ut...
import nu.mine.kino.jenkins.plugins.projectmanagement.EV...
import hudson.util.DescribableList;
List items = Jenkins.getInstance().getItems();
for (TopLevelItem item : items) {
if (item instanceof FreeStyleProject) {
DescribableList buildersList = ((FreeStyleProjec...
.getBuildersList();
EVMToolsBuilder builder = buildersList // ...
.get(EVMToolsBuilder.class);
if (builder != null) {
println item.name
}
}
}
実際はGroovyなのですが、どーしてもJavaになってしまうのは...
こんな感じでコードを書いていくことが可能です。
**プラグイン開発で使用する、Jenkins起動時のMAVEN_OPTS [#d...
export MAVEN_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket...
Windowsだと
set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,ser...
こうかな?
**プラグイン開発で出てくる、ビルド関連のパス(FilePath/Fil...
System.out.println(build.getModuleRoot()); //FilePath ワ...
System.out.println(build.getRootDir()); //File このビル...
System.out.println(build.getWorkspace()); //FilePath
System.out.println(build.getArtifactsDir()); ←@Deprecate...
の結果ですが、ビルドはローカル(マスター)で実行されるかス...
-ローカル(マスター)の結果(Windows)
TESTというジョブを走らせた場合。
D:\workspace_palette\project-management\work\jobs\TEST\w...
D:\workspace_palette\project-management\.\work\jobs\TEST...
D:\workspace_palette\project-management\work\jobs\TEST\w...
D:\workspace_palette\project-management\.\work\jobs\TEST...
-スレーブの結果(Linux)
TESTというジョブを走らせた場合。スレーブのトップディレク...
/opt/jenkins/
に設定してあります。結果は以下
/opt/jenkins/workspace/TEST
D:\workspace_palette\project-management\.\work\jobs\TEST...
/opt/jenkins/workspace/TEST
D:\workspace_palette\project-management\.\work\jobs\TEST...
**Jenkinsのソース検索 [#g070d50c]
[[GitHub>https://github.com/jenkinsci/jenkins/search]] に...
「検索文字列」 repo:jenkinsci/jenkins [検索文字]といれて...
** ビルダーが追加したアクションのアイコンを指定する。 [#r...
XXBuilderクラスないで
action = new XXAction(build);
build.addAction(action);
などとしてアクションを追加すると、そのビルド画面の左メニ...
#ref(menu.png)
このアイコンを独自のモノにするには、
@Override
public String getIconFileName() {
return "/plugin/project-management/images/24x24/user_s...
}
などとしてファイル名を絶対パスで指定します。
この場所はプロジェクト上は
#ref(icon.png)
あたりに解釈されるので、ココにファイルを配置してビルドす...
[[Jenkins users - Plugin image location>http://jenkins-ci...
**アクションの画面でのリンク [#g3e2a4b9]
index.jelly 内のリンク設定:
<a href="documents/hogehoge.tsv">hogehoge.tsv</a>
だった場合、クリックするとアクションクラスの
public void doDynamic(StaplerRequest req, StaplerRespons...
throws IOException, ServletException {
}
メソッドがコールされます。引数は通常のサーブレットのReq/R...
なので下記のようにResponseにデータを流し込んで
String filePath = req.getRestOfPath(); filePathは docum...
File file = new File(owner.getRootDir(), filePath); ← r...
FileInputStream in = null;
ServletOutputStream out = res.getOutputStream();
try {
in = new FileInputStream(file);
int i;
while ((i = in.read()) != -1) {
out.write(i);
}
} finally {
out.close();
in.close();
}
ビルドしたディレクトリにあるファイルを引っぱってきて直接...
res.sendRedirect2(req.getContextPath() + req.getRestOfPa...
などとして指定した画面へリダイレクトしたりすることができ...
**ビルドのトリガーとなったコミット情報にアクセスする。 [#...
public boolean perform(AbstractBuild build, Launcher lau...
ないで、以下のようにアクセスすることができます。
if (build.getChangeSet() instanceof SubversionChangeLogS...
SubversionChangeLogSet changeSet = (SubversionChange...
.getChangeSet();
List<LogEntry> logs = changeSet.getLogs(); // 一回...
for (LogEntry logEntry : logs) {
List<Path> paths = logEntry.getPaths(); // ...
for (Path path : paths) {
listener.getLogger().printf("[%s][%s][%s][%s...
path.getKind(), path.getValue(), pat...
path.getEditType().getName());
}
}
}
実行結果:
A test.dat
At revision 347
[unknown][/trunk/test/test.dat][/trunk/test/test.dat][add]
ビルドのトリガーとなったコミット情報((というか、そのビル...
あ pom.xml に
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>subversion</artifactId>
<version>1.45</version>
</dependency>
の追加が必要です。。
**Jenkinsの設定を使ってE-Mailを送信する。 [#z5f9f65a]
まずこんな感じにメールを送信するメソッドを定義します。
public static void sendMail(String[] addresses, Strin...
String message) throws UnsupportedEncodingExc...
MessagingException {
MimeMessage mimeMessage = new MimeMessage(Mailer....
.createSession());
InternetAddress[] to = new InternetAddress[addres...
String adminAddress = JenkinsLocationConfiguratio...
.getAdminAddress();
for (int i = 0; i < addresses.length; i++) {
to[i] = new InternetAddress(addresses[i], tru...
}
mimeMessage.setSender(new InternetAddress(adminAd...
mimeMessage.setRecipients(Message.RecipientType.T...
mimeMessage.setSubject(subject, "ISO-2022-JP");
mimeMessage.setText(message, "ISO-2022-JP");
Transport.send(mimeMessage);
}
基本的にはコレだけでJenkinsにあらかじめ設定されているメー...
あとは
public boolean perform(AbstractBuild build, Launcher lau...
内で、以下のようにメール送信ができます。
listener.getLogger().printf("宛先: %s \n", addresses);
listener.getLogger().printf("題名: %s \n", subject);
listener.getLogger().printf("メッセージ: %s \n", messag...
String[] addressArray = StringUtils.stripAll(StringUtil...
addresses, ',' ));
try {
sendMail(addressArray, subject, message);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
あ、pom.xml に
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>mailer</artifactId>
<version>1.5</version>
</dependency>
の追加が必要です。。
----
この記事は
#vote(おもしろかった,そうでもない)
- こうみると、ワークスペースはスレーブにも存在するが、ビ...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: