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
左側が推奨プラグインのインストール。右側が自分でプラグインを選択する項目。今回は左側の推奨プラグインインストールで進める。
jenkinsの管理ユーザーを作成する。入力後、[Save and Finish]ボタンを押下。
以下の画面で設定完了。[Start using Jenkins]ボタンを押下。
(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の管理]→[プラグインの管理]を選択。
インストール済みのタブを選択し、[GitHub Plugin]が存在することを確認する。(存在しない場合は別途インストール)
jenkinsにCobertura Pluginをインストールする。jenkinsのプラグインマネージャー画面で、[利用可能]タブを選択する。
[Cobertura Plugin]にチェックし、[再起動せずにインストール]ボタンを押下。
適当なジョブ名を入力し、[フリースタイル・プロジェクトのビルド]を選択し、[OK]ボタン押下。
[プロジェクト名]、[説明]に任意の内容を入力。[GitHub project]にチェックし、[Project url]にGitHub上のリポジトリURLを入力する。
ソースコード管理に以下を入力する。
・[Repositories]の[Repository URL]:GitHubリポジトリのURLを入力
・[Branch Specifier]:基本的に[**](全ブランチ)を入力(必要なら対象ブランチを入力)
・[リポジトリ・ブラウザ:[githubweb]を入力
・URLにGitHubのリポジトリのURLを入力
最後に[Repositories]の[Credentials]にある[追加]ボタン押下。
GitHubの認証情報を入力する。
・[種類]:ID/パスワードの認証であれば[ユーザー名とパスワード]とし、公開鍵認証であれば[SSHユーザー名と秘密鍵]を選択
・[スコープ]:(認証情報を子要素に適用するか否か)[システム]なら単体、[グローバル]なら子要素にも認証が引き継がれる。どちらでもよいが、とりあえず[グローバル]選択
情報を入力し終えたら、[追加]ボタン押下。
![]() |
![]() |
※注意:秘密鍵を指定する場合、ppk形式でないと認証できない
ビルド・トリガの[Build when a change is pushed to GitHub]にチェックし、[保存]ボタン押下。(ひとまずpush時のビルドのみ行うこととする)
[シェルスクリプト]に[/usr/local/python/bin/python manage.py test アプリ名 –settings=mysite.settings_test]と入力する。
※pythonコマンドをフルパス指定したのはjenkins用に環境変数を設定していないため、環境に合わせて随時変更する
ビルドの[ビルド後の処理の追加]から[JUnitテスト結果の集計]を選択。
[Cobertura XMLレポート パターン]に[coverage.xml]を記入する。
ビルドの[ビルド後の処理の追加]から[JUnitテスト結果の集計]を選択。
[テスト結果XML]に[nosetests.xml]と記入し、[保存]ボタン押下。
※警告は無視
Githubのwebhook(コミット時に動作する仕組み)を設定する。ブラウザでGitHubサイトにアクセスし、jenkinsで管理したいリポジトリのページを開き、[Settings]タブを選択。
[Add service]ボタンを押下し、テキストボックスに[Jenkins]と入力する。その後、青い背景色の[Jenkins(GitHub plubin)]を選択する。
[Jenkins hook url]に[http:// jenkinsサーバのIP:8080/jenkins/github-webhook/]を入力し、[Add service]ボタン押下。
テスト用の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上でカバレッジが表示される。
![]() |
![]() |
ここまででDjangoのテスト環境(jenkins – GitHub連携)が構築できました。
お疲れ様でした。