- 追加された行はこの色です。
- 削除された行はこの色です。
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
**Jenkinsのソース検索 [#g070d50c]
[[GitHub>https://github.com/jenkinsci/jenkins/search]] にアクセスして
「検索文字列」 repo:jenkinsci/jenkins [検索文字]といれて検索を行えばOK
** ビルダーが追加したアクションのアイコンを指定する。 [#r4d697cc]
XXBuilderクラスないで
action = new XXAction(build);
build.addAction(action);
などとしてアクションを追加すると、そのビルド画面の左メニューにアイコンが表示されます。
#ref(menu.png)
このアイコンを独自のモノにするには、
@Override
public String getIconFileName() {
return "/plugin/project-management/images/24x24/user_suit.png"; <- project-management はプラグイン名。
}
などとしてファイル名を絶対パスで指定します。
この場所はプロジェクト上は
#ref(icon.png)
あたりに解釈されるので、ココにファイルを配置してビルドすればOKです。
[[Jenkins users - Plugin image location>http://jenkins-ci.361315.n4.nabble.com/Plugin-image-location-td362688.html]]
**アクションの画面でのリンク [#g3e2a4b9]
index.jelly 内のリンク設定:
<a href="documents/hogehoge.tsv">hogehoge.tsv</a>
だった場合、クリックするとアクションクラスの
public void doDynamic(StaplerRequest req, StaplerResponse res)
throws IOException, ServletException {
}
メソッドがコールされます。引数は通常のサーブレットのReq/Resのインタフェースになっています。
なので下記のようにResponseにデータを流し込んで
String filePath = req.getRestOfPath(); filePathは documents/hogehoge.tsv
File file = new File(owner.getRootDir(), filePath); ← rootDirはビルドのディレクトリ
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.getRestOfPath()); /[contextpath]/documents/hogehoge.tsv
などとして指定した画面へリダイレクトしたりすることができます。
**ビルドのトリガーとなったコミット情報にアクセスする。 [#l96c8684]
public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener)
ないで、以下のようにアクセスすることができます。
if (build.getChangeSet() instanceof SubversionChangeLogSet) {
SubversionChangeLogSet changeSet = (SubversionChangeLogSet) build
.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]\n",
path.getKind(), path.getValue(), path.getPath(),
path.getEditType().getName());
}
}
}
実行結果:
A test.dat
At revision 347
[unknown][/trunk/test/test.dat][/trunk/test/test.dat][add]
ビルドのトリガーとなったコミット情報((というか、そのビルドでUpdateされたコミット情報))へアクセスすることができました。
あ 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, String subject,
String message) throws UnsupportedEncodingException,
MessagingException {
MimeMessage mimeMessage = new MimeMessage(Mailer.descriptor()
.createSession());
InternetAddress[] to = new InternetAddress[addresses.length];
for (int i = 0; i < addresses.length; i++) {
to[i] = new InternetAddress(addresses[i], true);
}
mimeMessage.setRecipients(Message.RecipientType.TO, to);
mimeMessage.setSubject(subject, "ISO-2022-JP");
mimeMessage.setText(message, "ISO-2022-JP");
Transport.send(mimeMessage);
}
基本的にはコレだけでJenkinsにあらかじめ設定されているメール送信設定を用いてメールを送ることができます。
あとは
public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener)
内で、以下のようにメール送信ができます。
listener.getLogger().printf("宛先: %s \n", addresses);
listener.getLogger().printf("題名: %s \n", subject);
listener.getLogger().printf("メッセージ: %s \n", message);
String[] addressArray = StringUtils.stripAll(StringUtils.split(
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;}