AmazonLinuxにJenkinsを導入

# AmazonLinuxにJenkins導入

## 継続的インテグレーション（CI）

継続的インテグレーション、CI（英: continuous integration）とは、主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣のことである。

エクストリーム・プログラミング (XP) のプラクティスの一つで、狭義にはビルドやテスト、インスペクションなどを継続的に実行していくことを意味する[1]。

(Wikipedia)

## Jenkinsとは

Javaで書かれたCIツール。

ソフトウェアのビルドやCronで起動するジョブ等の繰り返しのジョブの実行を監視してくれる。


## 構築方法

### 確認  

  セキュリティグループでJenkinsで使用するポートを開けておく
  
  ```
  カスタムTCPルール TCP 8080 IPアドレス
  ```
  
  AmazonLinuxではデフォルトでJavaがはいっている模様
  
  ```
  root@hoge:~# java -version
  java version "1.7.0_85"
  OpenJDK Runtime Environment (amzn-2.6.1.3.61.amzn1-x86_64 u85-b01)
  OpenJDK 64-Bit Server VM (build 24.85-b03, mixed mode)
  ```  
### Jenkinsインストール

  ```
  # sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
  # sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
  # sudo yum install jenkins
  ```
  
  ```
  ============================================================================================================================================================================================================
   Package                                          Arch                                            Version                                            Repository                                        Size
  ============================================================================================================================================================================================================
  Installing:
   jenkins                                          noarch                                          1.644-1.1                                          jenkins                                           61 M
  
  Transaction Summary
  ============================================================================================================================================================================================================
  Install  1 Package
  ```
  
  バージョンとして1.644が入ります（2016/1/18 現在）
  
  ```
  root@hoge# service jenkins start
  Starting Jenkins                                           [  OK  ]
  root@hoge:/tmp# service jenkins status
  jenkins (pid  19989) is running...
  root@hoge:/tmp# chkconfig jenkins on
  ```
  
### Jenkins設定
  
  ・LDAP関連の設定
  　⇒ LDAPの設定がうまくできず断念
  
  ・Hostの設定
  Jenkinsの通常のHostだと、
  
  ```
  http://IPアドレス:8080
  ```
  
  で、変更したとしても
  
  ```
  http://ドメイン/jenkins
  ```
  
  で、気持ち悪いからNginxでプロキシさせて設定した
  
  Nginxでjenkins.hoge.comの設定を書く
  
  ```jenkins.conf
  server {
    server_name     jenkins.hoge.com;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;
    location / {
      proxy_pass http://127.0.0.1:8080;
    }
  }
  ```
  
  AWSであればRoute53にDNSを登録する
  
  ```
  Aレコード jenkins.hoge.com IPアドレス
  ```
  
  確認しよう！
  
  ```
  # dig jenkins.hoge.com
  http://jenkins.hoge.com
  ```
  
  ・Basic認証の設定
  
  Jenkinsには最初に通る認証がないので、Basic認証を追加する
  
  http://jenkins.hoge.com にアクセスしたらBasic認証が起動するようにする
  
  http://www.htaccesstools.com/htpasswd-generator/
  
  ここでとりあえず、htpasswdを生成する
  
  ```
  # vim /etc/nginx/.htpasswd
  ⇒ ここに先ほど生成したものを書く
  ```
  
  jenkins.confに以下を記載する
  
  ```
  server {
    server_name     jenkins.hoge.com;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Real-IP $remote_addr;
    # locationをいじる
    location / {
      auth_basic "Restricted";
      auth_basic_user_file /etc/nginx/.htpasswd;
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header Authorization "";
    }
  }
  ```
  
  特に忘れては行けないのは
  
  proxy_set_header Authorization "”;
  
  で、headerにAuth情報をセットしてやらないとプロキシしているので、Jenkinsでは認証がまだな状態になってしまう、、

## 何につかうのか？？

1. 自動テスト
2. Chefレポジトリの品質を保つ
3. 有効期限が迫っているツールの自動更新
  - Let's Encrypt の更新
4. 自動Deploy
5. 情報自動収集