AWS上にBitnamiのAMIを使ってお手軽にJenkinsサーバーを立てる

# はじめに

## 目的

CIはもちろん、バッチ処理のスケジュール実行用にJenkinsサーバーをサクッと作る。慣れれば20分掛けずに作れるはず。

## 本記事でできること

* GitHub上のプライベートリポジトリのJenkins上でのビルド
* GradleプロジェクトのJenkins上でのビルド

## Bitnamiとは

ソフトウェアの環境構築をいい感じに設定したパッケージを配布してくれている。
パッケージの形式はコンテナやクラウド環境用のイメージやオンプレ用など様々。

>We make it possible for anyone to quickly deploy software on the platform of their choice, from native installers to cloud images to containers.

詳しく知りたければ以下を参照。

https://bitnami.com/learn_more

## 参考情報

以下のパッケージを使う。執筆時点(2017/06/28)での最新バージョンは「2.46.2-0 on Ubuntu 14.04.3」。

Jenkins powered by Bitnami
https://aws.amazon.com/marketplace/pp/B00NNZUF3Q

ドキュメント
https://docs.bitnami.com/aws/apps/jenkins/

ドキュメント > ID/PASSWORD
https://bitnami.com/stack/jenkins/cloud/aws

コミュニティ(わからないことがあればここで検索)
https://community.bitnami.com/c/jenkins

# 手順

## AMIからEC2インスタンスを作成

1.AWS Marketplace上の下記URLに遷移後、画面右の「Continue」を選択  
   
Jenkins powered by Bitnami
https://aws.amazon.com/marketplace/pp/B00NNZUF3Q

この際、AWSに未ログインの場合はログインを促されるのでログインする。

2.「Launch on EC2:Jenkins powered by Bitnami」画面の「Manual Launch」を選択

Manual Launchを選択するのは慣れ親しんだAWS Console から作成するため(個人的理由)

3.Launch>AMI IDs>Asia Pacific (Tokyo)の 「Launch with EC2 Console」を選択

4.EC2インスタンス作成

省略するが、基本的にデフォルト設定でOK。ここで作成したキーペアを使って、あとでsshログインする。  
80番ポートと22番ポートを開放する。なんらかのIP制限を掛ける。

## Jenkinsにログイン ~ 初期設定

インスタンス起動後、インスタンスに割り当てられたIPの80番ポートにブラウザからアクセスする。  
Jenkinsのログイン画面が表示されるのでIDとパスワードを入力。 

```
ID: user
PASSWORD: (EC2インスタンスのシステムログより確認する。以下のURLを参照する。)
```

(参考) How To Find Application Credentials?
https://docs.bitnami.com/aws/faq/#find_credentials

ログイン後、特にこだわりがなければ画面に従い、オススメされるプラグインをインストールする。

## サーバー時刻を日本標準時(JST)に変更

1.サーバーにsshログイン

ユーザーはbitnami。公開キーとアドレスは適宜入力する。

```bash
ssh -i path/to/keypair.pem bitnami@IPAddress
```

2.下記コマンドで日本標準時(JST)に変更

```bash
echo "Asia/Tokyo" | sudo tee /etc/timezone
sudo dpkg-reconfigure --frontend noninteractive tzdata
```

(参考) Ubuntu Time Management
https://help.ubuntu.com/community/UbuntuTime

3.Jenkinsを再起動

```bash
sudo /opt/bitnami/ctlscript.sh restart
```

(参考) How To Start Or Stop The Services?
https://docs.bitnami.com/aws/apps/jenkins/

## GitHub連携

以下のドキュメントを参考に実施する。

How To Start With Git And Jenkins?
https://docs.bitnami.com/aws/apps/jenkins/#how-to-start-with-git-and-jenkins

事前にsshの認証キーの生成と、生成後にGithubアカウントに対応させる必要があるので、以下を参考に実施する。

### sshの認証キー生成

bitnamiユーザーで以下のコマンドを実行し、tomcatユーザー用のsshの認証キーを生成する。

```bash
ssh-keygen -t rsa
```

この際、生成場所を聞かれるので /home/tomcat/.ssh/id_rsa にする。あとは未入力でEnter。

### GitHubアカウントにsshの認証キー追加する

/home/tomcat/.ssh/id_rsa.pem の中身をまるごと、以下を参考にGithubアカウントに追加する。

Adding a new SSH key to your GitHub account
https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

## /opt/bitnami/.gradle のパーミッションを変更

bitnamiのバグにより、gradleで使用するディレクトリのパーミッションの設定に誤りがある。  
以下のように /opt/bitnami/.gradle のオーナーをtomcatに変更する。

```
sudo chwon tomcat:tomcat /opt/bitnami/.gradle
```

https://community.bitnami.com/t/gradle-user-home-opt-bitnami-gradle/40717


## ビルド用JDKのインストール

Jenkinsの管理 > Global Tool Configuration > JDK より、任意のJDKをインストールする。
Oracleのアカウントが必要なので、持っていなければ無料なので作る。
  
<img width="922" alt="スクリーンショット 2017-06-29 0.28.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/67773/bf656b90-0984-7020-8bca-495273522f20.png">

ここでインストールしたJDKがジョブのビルド時に使われる。複数インストールした場合、各ジョブの設定画面で使用するJDKを選択できる。

## 確認

GitHub上のプライベートリポジトリ内のGradleプロジェクトをビルドできることを確認します。すでに作成済みの場合は、以下の手順を実施してビルドが成功することを確認してください。

1.「新規ジョブ作成」を選択

2.入力欄に適当なジョブ名を入力し、「フリースタイル・プロジェクトのビルド」を選択し、OKボタンを押す

3.ジョブ設定画面にて以下の内容を入力後、保存ボタンを押す

**ソースコード管理 >リポジトリURL**

* 対象のリポジトリURLを以下の形式で入力する

```
git@github.com:USERNAME/REPONAME.git
```

**ビルド　 > Invoke Gradle script > Use Gradle Wrapper**

* 「Make gradlew executable」 にチェック
    
* Tasksに実行するGradleタスクを設定する (例)「build」

4.「ビルド実行」ボタンを押し、ビルドが成功することを確認する