jenkinsサーバー構築

Pocket

jenkinsサーバーを構築していきます。手順は以下。

 (1)jenkins構築
 (2)Django(Python)環境構築
 (3)ビルド・テスト環境構築

インストールしたソフトウェア環境は以下。
jenkinsサーバ上でDjangoアプリケーションをテストするため、Django(Python)動作環境も構築します。
【ソフトウェア環境】

項目 バージョン等
JDK 1.8.0
Tomcat 8.0.33
jenkins 2.1
GitHub Plugin 1.7.5
Cobertura Plugin 1.9.7
Python 2.7.11
Django 1.9

 (1)jenkins構築
jenkinsは以下3パターンで構築可能です。今回は3を利用しました。

手順 内容
1.JRE環境で実行 JRE環境でjettyを使ってjenkins.war実行
javaコマンドだけで起動・利用できる
2.CentOSにインストール yumコマンドでインストール、実行
3.Tomcat上で動作 Tomcat上にjenkins.warを配置して動かす

 1.時刻同期を行う
  CentOS7を使っているのでchronyで時刻同期をします。(後でntpで設定し直した記憶もあるので、うまくいかなかったら別途ntpで対応して下さい)。
 chronyをインストールします。

yum install chrony

 chronyの設定を編集します。

vi /etc/chrony.conf

 以下を入力し、保存します。

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

server 問い合わせ先の時刻サーバーのIPアドレス

 ※問い合わせ先はネットで検索等

 ntpdを停止、無効化。chronydを有効化、起動します。

systemctl stop ntpd.service
systemctl disable ntpd.service
systemctl enable chronyd
systemctl start chronyd.service

 2.JDKインストール
  Tomcatを動かすのにJDKをインストールします。
  以下のコマンドでJDKインストール済みか確認。コマンドが見つからなければJDKはインストールされていない。

java -version

yumでインストールできる最新のJDKを確認する。

yum search openjdk

  ※[Repodata is over 2 weeks old. Install yum-cron? On run: yum makecache fast]が表示された場合、[sudo yum clean all]と[sudo yum makecache fast]を実行しておく

  JDKインストール。

yum install java-1.8.0-openjdk
yum install java-1.8.0-openjdk-devel

  ※openjdkとopenjdk-develをインストール、今回は1.8.0を入れました

 JDKバージョン確認。

java -version

 3.Tomcatインストール
  jenkinsを動かすのにTomcatをインストールする。

  公式サイト(http://tomcat.apache.org/)で目的バージョンのTomcat(tar.gzファイル)のダウンロードURLを確認しておきます。

  tomcat(tar.gz)をダウンロード。

mkdir ~/Downloads
cd ~/Downloads -version
wget http://www-eu.apache.org/dist/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz

  ※wgetコマンドが見つからない場合、[yum install wget]でインストールする

  tomcatを展開、配置する。

tar xvzf apache-tomcat-8.0.33.tar.gz
sudo mv apache-tomcat-8.0.33 /opt

  tomcatユーザー作成、権限変更。

useradd –s /sbin/nologin tomcat
chown –R tomcat:tomcat /opt/apache-tomcat-8.0.33

  tomcatサービス登録。

vi /etc/systemd/system/tomcat.service

  以下を記述して保存。

[Unit]
Description=Apache Tomcat 8
After=network.target

[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/opt/apache-tomcat-8.0.33/tomcat.pid
RemainAfterExit=yes

ExecStart=/opt/apache-tomcat-8.0.33/bin/startup.sh
ExecStop=/opt/apache-tomcat-8.0.33/bin/shutdown.sh
ExecReStart=/opt/apache-tomcat-8.0.33/bin/shutdown.sh;/opt/apache-tomcat-8.0.33/bin/startup.sh

[Install]
WantedBy=multi-user.target

  ※tomcatのパスはバージョンに応じて変えます

  ファイルのパーミッションを変更。

chmod 755 /etc/systemd/system/tomcat.service

  自動起動設定を行う。

systemctl enable tomcat

  Tomcat起動・停止。

systemctl start tomcat
systemctl stop tomcat

  ファイアウォールの設定ファイルを作成する。(この手順はCentOS7のfirewalldのもの)

vi /etc/firewalld/services/tomcat.xml

  以下を記入し、保存する。

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Tomcat (HTTP)</short>
  <description>Tomcat HTTP Server.</description>
  <port protocol="tcp" port="8080"/>
</service>

  ファイアウォールにtomcatを登録、起動。

firewall-cmd --permanent --add-service=tomcat
systemctl restart firewalld.service

  ファイアウォールにtomcatが登録されたか確認。

firewall-cmd --list-all

 4.jenkinsインストール
  公式サイト(https://jenkins.io/index.html)にアクセスし、jenkins.warのファイルをダウンロードするURLを確認しておく。

  jenkinsダウンロード。

cd ~/Downloads
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war

  ※jenkins.warのURLに応じて変更

  jenkinsをTomcatホーム/webapps直下に配置する。

mv ~/Downloads/jenkins.war /opt/apache-tomcat-8.0.33/webapp

  tomcatを再起動する。

systemctl restart tomcat

  jenkinsの初期設定を行う。ブラウザからURL「http://jenkinsサーバーのIP:8080/jenkins」にアクセスする。ログ出力したパスワードの入力を求められるので、以下で確認して入力する。

cat /home/tomcat/.jenkins/secrets/initialAdminPassword

16_jenkins1

  左側が推奨プラグインのインストール。右側が自分でプラグインを選択する項目。今回は左側の推奨プラグインインストールで進める。
17_jenkins2

  推奨プラグインのインストールが進みます。
18_jenkins3

  jenkinsの管理ユーザーを作成する。入力後、[Save and Finish]ボタンを押下。
19_jenkins4

  以下の画面で設定完了。[Start using Jenkins]ボタンを押下。
20_jenkins5

  jenkinsの画面が表示されれば作業完了です。
21_jenkins6

(2)Django(Python)環境構築
 1.事前準備
  今回はDjangoのテストを行うので、以下のようにライブラリ等インストールしておきます。
  nose(単体テスト用)、coverage(結果表示用)ライブラリインストール。

pip install nose
pip install django-nose
pip install coverage

  Djangoに必要な各種ライブラリをインストール。

yum install zlib-devel bzip2-devel openssl-devel gdbm-devel ncurses-devel sqlite-devel readline-devel tk-devel

  次に、Python、Djangoをインストールします。まずはPythonから。
  現在の環境にインストールされているPythonを確認。

python -V

※デフォルトでは「/usr/bin/python」が実行された
 2.pythonインストール
  Pythonダウンロード、解凍。
  ブラウザでPythonの公式サイトにアクセスし、PythonのダウンロードURLを確認する。「Gzipped source tarball」で用意されたtgzのダウンロードURLをコピー。

cd ~
> mkdir Downloads
cd Downloads
curl –O PythonダウンロードURL
sudo tar zxvf Pythonファイル名

※今回はPython2.7.11で、URLは「https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz」

  Pythonコンパイル、インストール。

cd (解答したPythonフォルダ名)
./configure –prefix=/usr/local/python
make
make install

※.configureコマンドの–prefixオプションでインストール先を指定

  パスを通す。

vi ~/.bash_profile

  以下を記述して保存。

PATH=/usr/local/python/bin:$PATH

※既存の[PATH=$PATH:$HOME/bin]と[export PATH]の間に記述

  変更した設定を読み込む。

source ~/.bash_profile

  以下を実行し、ダウンロードしたPythonのバージョンが表示されればインストール完了。

python -V

 3.Djangoインストール
  次にDjangoをインストールしていきます。
  サイトにある[get-pip.py]リンクからURLを確認する(今回は「https://bootstrap.pypa.io/get-pip.py」)。

  pip用のインストールプログラムをダウンロード。

cd ~/Downloads
curl –O (get-pip.pyのURL)
python get-pip.py

  Djangoインストール。

pip install django==1.9

※違うバージョンのDjangoをインストールする場合、数値部分を変更

  対話式スクリプトを起動し、バージョンを確認。

python
>>> import django
>>> print django.get_version()

※スクリプトの終了はCtrl+d

(3)ビルド・テスト環境構築
  あらかじめjenkinsにプラグインを設定しておきます。自動テストするリポジトリごと、ジョブを設定しておきます。以後、テスト対象リポジトリが増えた場合は都度ジョブを設定する必要があります。
 1.プラグイン追加
  jenkinsにGitHub Pluginがインストールされているか確認する。ブラウザでjenkinsの画面を開き、[jenkinsの管理]→[プラグインの管理]を選択。
22_jenkins_test1

  インストール済みのタブを選択し、[GitHub Plugin]が存在することを確認する。(存在しない場合は別途インストール)
23_jenkins_test2

24_jenkins_test3

  jenkinsにCobertura Pluginをインストールする。jenkinsのプラグインマネージャー画面で、[利用可能]タブを選択する。
25_jenkins_test4

  [Cobertura Plugin]にチェックし、[再起動せずにインストール]ボタンを押下。
26_jenkins_test5

 2.ジョブ追加
  [新規ジョブ作成]を選択する。
27_jenkins_test6

  適当なジョブ名を入力し、[フリースタイル・プロジェクトのビルド]を選択し、[OK]ボタン押下。
28_jenkins_test7

  [プロジェクト名]、[説明]に任意の内容を入力。[GitHub project]にチェックし、[Project url]にGitHub上のリポジトリURLを入力する。
29_jenkins_test8

  ソースコード管理に以下を入力する。
   ・[Repositories]の[Repository URL]:GitHubリポジトリのURLを入力
   ・[Branch Specifier]:基本的に[**](全ブランチ)を入力(必要なら対象ブランチを入力)
   ・[リポジトリ・ブラウザ:[githubweb]を入力
   ・URLにGitHubのリポジトリのURLを入力
30_jenkins_test9

  最後に[Repositories]の[Credentials]にある[追加]ボタン押下。
  GitHubの認証情報を入力する。
   ・[種類]:ID/パスワードの認証であれば[ユーザー名とパスワード]とし、公開鍵認証であれば[SSHユーザー名と秘密鍵]を選択
   ・[スコープ]:(認証情報を子要素に適用するか否か)[システム]なら単体、[グローバル]なら子要素にも認証が引き継がれる。どちらでもよいが、とりあえず[グローバル]選択
  情報を入力し終えたら、[追加]ボタン押下。

31_jenkins_test10 32_jenkins_test11

※注意:秘密鍵を指定する場合、ppk形式でないと認証できない

  [Credentials]は作成したユーザーとする。
33_jenkins_test12

  ビルド・トリガの[Build when a change is pushed to GitHub]にチェックし、[保存]ボタン押下。(ひとまずpush時のビルドのみ行うこととする)
34_jenkins_test13

  ビルドの[ビルド手順の追加]から[シェルの実行]を選択。
35_jenkins_test14

 [シェルスクリプト]に[/usr/local/python/bin/python manage.py test アプリ名 –settings=mysite.settings_test]と入力する。
  ※pythonコマンドをフルパス指定したのはjenkins用に環境変数を設定していないため、環境に合わせて随時変更する
36_jenkins_test15

  ビルドの[ビルド後の処理の追加]から[JUnitテスト結果の集計]を選択。
37_jenkins_test16

  [Cobertura XMLレポート パターン]に[coverage.xml]を記入する。
38_jenkins_test17

  ビルドの[ビルド後の処理の追加]から[JUnitテスト結果の集計]を選択。
39_jenkins_test18

  [テスト結果XML]に[nosetests.xml]と記入し、[保存]ボタン押下。
40_jenkins_test19
※警告は無視

  Githubのwebhook(コミット時に動作する仕組み)を設定する。ブラウザでGitHubサイトにアクセスし、jenkinsで管理したいリポジトリのページを開き、[Settings]タブを選択。
41_jenkins_test20

  [Webhooks & services]を選択する。
42_jenkins_test21

  [Add service]ボタンを押下し、テキストボックスに[Jenkins]と入力する。その後、青い背景色の[Jenkins(GitHub plubin)]を選択する。
43_jenkins_test22

  [Jenkins hook url]に[http:// jenkinsサーバのIP:8080/jenkins/github-webhook/]を入力し、[Add service]ボタン押下。
44_jenkins_test23

  テスト用のsettingsファイルを設定する。GitHub上に登録しているDjangoアプリ用にdjango-noseの設定を行う。[プロジェクト名/アプリ名/settings.py]に以下を記入して保存。

INSTALLED_APPS = (
    ...,
    'django_nose',
)

※まだGitHub上にpushはしない

  GitHub上に登録しているDjangoアプリにテスト用settingsファイルを作成する。[プロジェクト名/アプリ名/settings_test.py]を作成し、以下を記入。

# -*- coding:utf-8 -*-
from polls.settings import *
import os

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
#カバレッジレポート(html)を出力するフォルダを指定
COVERAGE_REPORT_HTML_OUTPUT_DIR = '.cover'

# テスト実行時の引数の設定(noseの引数)
NOSE_ARGS = [
    '--with-xunit',
    '--with-coverage',
    '--cover-xml',
    '--cover-html',
    '--cover-package=polls', #テストを行うapp名を指定
]

#テスト用のDB環境の設定(settings.pyのDB環境と分けている)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'test.db'),
    }
}

※まだGitHub上にpushはしない

 3.動作確認
  先ほど作成した設定ふぁいるをGitHub上の該当リポジトリにpushする。これによって自動ビルド、自動テストが実行される。正常に実行されれば、以下のようにjenkins上でカバレッジが表示される。

45_jenkins_test24 46_jenkins_test25

ここまででDjangoのテスト環境(jenkins – GitHub連携)が構築できました。

お疲れ様でした。

広告

Pocket