Windows server 2012にJenkins環境を構築した際のメモ

# これは何？
* Windows Server 2012 R2にJenkinsの環境を構築した際のメモ
* ビルド／テストしたい環境は、Java(JRE1.8.0u20), Apache Ant(1.9.4), Git(1.9.4.mysgit.1)

# 作業時間メモ
今までJenkinsを構築したことはないレベルの人間で…

* windows serverのインストールからJenkinsのインストールなどなど含めて3~4時間？
* Jenkinsのビルドを複数つなげてごにょごにょしたりしたり遊んだのが8時間
* 自作Pluginを入れて遊んでみたのが8時間？

合計2日半くらい？

# installer と warをダウンロードする際の違いは？

* installer　はサービスとして登録までをしてくれる。デフォルトのファイルパスは、```c:\\Program Files(x86)\Jenkins``` だった。
* war の場合は、起動は簡単？サービスの登録とかは自分でやらないといけない。同一サーバに複数のJenkinsサーバをお手軽に建てたいときとかは便利かもしれない。

# git環境は？
* [git for windows](http://msysgit.github.io/)をinstallerを使ってインストール。
* インストール途中で、```Adjusting your PATH enviroment```で```Use git for the windows console.```を選んでおくと、Jenkinsと連携する際にShellにそのままコマンドを打てるので便利。
* gitのベア環境を作る際には、```git init --bare --share=true```で作ることができる。

# Jenkinsの設定は？
```Jenkinsの管理``` -> ```システムの管理```から

* JDKのパスの設定(JAVA_HOME)　ex) ```C:\Program Files\Java\jdk1.8.0_20```
* Antのパスの設定(ANT_HOME) ex)```C:\apache-ant-1.9.4```

だけやっておいた。Ant自体のPATH設定は、[ANT_HOME及びPATHの設定](http://www.javadrive.jp/ant/install/index2.html) を参照した。

# JenkinsのPluginは？
* [Git plugin](https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin) : gitとの連携のため。git.exeのPathを登録する必要があるっぽい？環境変数Pathに``git.exe``の場所を教えているけどダメみたい。```Jenkinsの管理``` -> ```システムの管理```　-> ```Gitの項目```　->　```Path to Git executable``` に```C:\Program Files (x86)\Git\cmd\git.exe```を追加でOK
* [Build Pipeline plugin](https://wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin)　:　ビルドの前後関係を可視化してくれるプラグイン。複雑になってきたときに便利かな？
* [Copy Artifact Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin)　:　ビルド結果の成果物を他のJobに転送できるプラグイン。ビルド(Job:A) -> ビルド成果物を他のリポジトリへpush(Job:B）みたいなことをするときに便利。
* [Power Shell plugin](https://wiki.jenkins-ci.org/display/JENKINS/PowerShell+Plugin) : せっかくWindows Serverなのでcmd.exeじゃなくて、Power Shellを使おう｡ちなみに、環境によって環境変数の呼び出し方が違うので注意。

```
PowerShell : $env:paramName
Windowsバッチ : %paramName%
シェル : $paramName

(参考)：http://hookturn.tumblr.com/post/75901385482
```

* [Parameterized Trigger Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin)　:　ビルド間のパラメータを引き継ぐというプラグイン。有名らしいのでggrks状態。参考にしたページを張っておく。
  * http://qiita.com/yasuhiroki/items/daff66ab18b315ae4298
  * http://hookturn.tumblr.com/post/75901385482


# Jobの設定関連

* ビルドの設定時に　ビルド手順の追加　で、windows環境では、```windowsバッチコマンドの実行```を選ぶ。```シェルの実行```はUNIXのシェルコマンドを叩きに行くのでエラーになる。
* Gitの設定時、リポジトリのパスをファイルパスを指定する時は、```file:///```で始める。
* （上の続き）ネットワークドライブを割り当てるパターン```file:///Z:\hogehoge```は読み込んでくれないが、サーバを直接指定するパターン ```file:///\\HOGER-Server\\hoge\\hoge.git```はいける。
* 日本語のJob名を入力しようとすると、Jenkinsが固まる。IEの問題の気もする。一旦置き。

# Plugin を自作する場合

* pluginの開発環境構築は、[公式ドキュメント](https://wiki.jenkins-ci.org/display/JA/Plugin+tutorial) 通りで特にハマりポイントは無い（2014/09/01現在）
* Jenkinsのバージョンが1.577の場合にテストが```java.io.IOException: Failed to clean up temp dirs```で落ちるよう。Windowsの環境依存な気もするけども、いったん見なかったことにしたい。ほんとによくないけどテストなしで実行できるようにする。参考：[Jenkins Plugin Build Error](http://stackoverflow.com/questions/20611211/jenkins-plugin-build-error)

```xml:pom.xml
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>InjectedTest.java</exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>
```

* pom.xmlでpluginで対象とするJenkinsのバージョンを指定する。本番環境と合わせるのが吉と思われる。

```xml:pom.xml
(略)
<parent>
    <groupId>org.jenkins-ci.plugins</groupId>
    <artifactId>plugin</artifactId>
    <version>1.577</version> <!--！！！ココ！！！ -->
</parent>
(略)
```