Jenkins#2 ビルド・デプロイ実行
Jenkinsにてビルド・デプロイ実行する方法を説明する。
目次
ビルド・デプロイ
1.概要
今回実現すること
Jenkinsにて以下の作業を1つのジョブ実行にて実現する
- チェックアウト
- ビルド
- tomcatにデプロイする
1.チェックアウト
SVN上にコミットされたソースコードをチェックアウトする。
ソースコードはjavaで、tomcatにデプロイするwarファイルを生成する構成とする。
2.ビルド
チェックアウトしたソースコードをビルドし、warファイルを生成する。
ビルドにはAntを使用する。
3.デプロイ
生成したwarファイルを別サーバ上のtomcatにデプロイする。
デプロイにはtomcatの機能 web application managerを使用する。
処理概要
2.構築環境について
構築の概要
前述の「Jenkins環境構築」の手順の続きとする。
Linux系OS(CentOS6.8)稼働中のサーバーマシンにJenkins稼動環境を構築する。
インストール対象
◎ ant
3.インストール
Antのインストール
JenkinsからAntを利用できるようにするため、インストールを行う。
「Jenkinsの管理」押下
Jenkinsの管理を押下。
「Global Tool Configuration」押下
Global Tool Configurationを押下。
Antの項目設定
Antの項目にて以下の要領で設定し、saveを押下する。
JenkinsとJDKの関連付け
Global Tool Configuration画面のJDKの項目にて任意の名前と、JDKのパスを設定する。
JenkinsとTomcatの関連付け
システムの設定押下
Jenkinsの管理→システムの設定を押下する。
環境変数の設定
グローバルプロパティの項目にて、環境変数のチェックボックスにチェックを入れ、以下の要領で設定する。
Tomcat側設定
Tomcatインストールについては前章にて扱っている為、ここでは割愛する。
ユーザとロール設定
web application managerにログインする為のユーザと、ロールの設定を追加する。
${TOMCAT_HOME}/conf/tomcat-users.xml
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="admin-gui,manager-gui,manager-script" />
IPフィルターの解除
web application managerはデフォルトでIPフィルターが掛かっている為、これを解除する。
${TOMCAT_HOME}/webapps/manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
tomcat再起動
tomcatを再起動する。
${TOMCAT_HOME}/bin/shutdown.sh
${TOMCAT_HOME}/bin/startup.sh
ブラウザ確認
ブラウザでアクセスする。
IDとパスワードのダイアログが表示されるので、どちらも「admin」と入力する。
以下の要領で出力されれば成功。
OK - バーチャルホスト [localhost] のアプリケーション一覧です
/:running:0:ROOT
/examples:running:0:examples
/HelloApp:running:0:HelloApp
/host-manager:running:0:host-manager
/manager:running:0:manager
/docs:running:0:docs
4.チェックアウト
サンプルJavaプロジェクト
APサーバにデプロイするJavaプロジェクトを以下の通り用意し、SVNコミットしておく。
◎ jp.co.afrontier.HelloWorld.java
package jp.co.afrontier;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/sample")
public class HelloWorld extends HttpServlet{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
request.setAttribute("msg", "Hello World!");
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/Hello.jsp");
dispatcher.forward(request,response);
}
}
◎ WebContent/WEB-INF/jsp/Hello.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>title</title>
</head>
<body>
<%= new java.util.Date() %>
<%= request.getAttribute("msg") %>
</body>
</html>
◎ WebContent/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>HelloApp</display-name>
</web-app>
Jenkinsにてチェックアウトする
新規ジョブ作成
新規ジョブを作成する。
パイプラインスクリプト定義部にある「Pipeline Syntax」リンクを押下する。
スクリプト生成
この画面ではスクリプト生成を行うことができる。
Sample Stepにて「checkout」、SCMにて「Subversion」を選択する。
するとSVNチェックアウト時に必要な要素の入力を求められる。
まずCredentialsにて「追加」ボタンを押下する。
ユーザ/パスワード登録
この画面にてSVNユーザ及びパスワードを登録する。
入力が完了したら「追加」ボタンを押下する。
生成スクリプトの確認
Credentialsのプルダウンにて追加したユーザが選択可能となる為、選択する。
また、RepositoryURLにチェックアウトするモジュールのパスを記載する。
「Generate Pipeline Script」ボタンを押下すると、すぐ下のテキストエリアにスクリプトが生成される。
テキストエリア内のテキストをコピーする。
パイプラインスクリプトの保存
パイプラインスクリプトに以下の要領で記載し(2行目はコピーしたテキスト)、保存を押下する。
ビルド実行
ビルド実行を行う。
ログ確認
ログを確認すると、作業ディレクトリが出力されている為、確認する。
モジュールのチェックアウト確認
実際にサーバに入り作業ディレクトリを参照すると、モジュールがチェックアウトされていることが確認できる。
# pwd
/root/.jenkins/workspace/02.Checkout
# ll
合計 24
drwxr-x---. 5 root root 4096 9月 16 03:35 2018 WebContent
drwxr-x---. 3 root root 4096 9月 16 03:35 2018 build
-rw-r-----. 1 root root 1133 9月 16 03:35 2018 build.xml
drwxr-x---. 3 root root 4096 9月 16 03:35 2018 dist
drwxr-x---. 4 root root 4096 9月 16 03:35 2018 src
5.ビルド
サンプルJavaプロジェクト
APサーバにデプロイするJavaプロジェクトを以下の通り用意し、SVNコミットしておく。
build.xml作成
◎ build.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<project name="HelloApp" default="build" basedir=".">
<property environment="env"/>
<target name="build">
<echo message="hello" />
<!-- 作業ディレクトリをクリア -->
<delete dir="./dist" />
<!-- 作業ディレクトリを作成-->
<mkdir dir="./dist" />
<mkdir dir="./dist/classes" />
<!-- ライブラリのパスを定義 -->
<path id="tomcat_lib">
<fileset dir="${env.TOMCAT_HOME}/lib/">
<include name="*.jar"/>
</fileset>
</path>
<!-- コンパイル -->
<javac srcdir="src" destdir="dist/classes" classpathref="tomcat_lib" />
<!-- warファイル化 -->
<war destfile="./dist/hello.war" webxml="./WebContent/WEB-INF/web.xml">
<fileset dir="./WebContent">
<include name="**/*.jsp" />
<include name="**/*.html" />
<include name="**/*.css" />
<exclude name="**/web.xml" />
</fileset>
<classes dir="./dist/classes" />
</war>
<!-- 作業ファイルを削除 -->
<delete dir="./dist/classes" />
</target>
</project>
Jenkinsにてbuild.xmlを実行し、ビルドする
Pipeline Syntax画面の設定
Pipeline Syntax画面にて、「withAnt」を選択。
Ant Version、JDKのプルダウンにてあらかじめ設定してある値を選択する。
ジョブ定義画面の設定
ジョブ定義画面に戻り、チェックアウト後にAntが動くようにスクリプトを記載する。
「// some block」の箇所には antを呼び出すコードを記載する。
ログ確認
ログを確認すると、warファイルが生成された旨が確認できる。
ディレクトリ確認
実際にサーバに入り作業ディレクトリを参照すると、warファイルが生成されていることが確認できる。
# ls /root/.jenkins/workspace/03.build/dist/hello.war
/root/.jenkins/workspace/03.build/dist/hello.war
6.デプロイ
Jenkins環境作成
◎ tomcatDeploy.xml
<?xml version="1.0" encoding='utf-8'?>
<project name="tomcatDeploy" default="tomcatDeploy" basedir=".">
<property environment="env"/>
<path id="catalina-ant-classpath">
<fileset dir="${env.TOMCAT_HOME}/lib/">
<include name="catalina-ant.jar"/>
</fileset>
</path>
<taskdef name="list" classname="org.apache.catalina.ant.ListTask" classpathref="catalina-ant-classpath" />
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" classpathref="catalina-ant-classpath" />
<taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" classpathref="catalina-ant-classpath" />
<property name="warfile" value="./dist/hello.war"/>
<property name="contextpath" value="/HelloApp"/>
<target name="tomcatDeploy">
<list
url="http://192.168.3.21:8080/manager/text"
username="admin"
password="admin"
/>
<!--
<undeploy
url="http://192.168.3.20:8080/manager/text"
username="admin"
password="admin"
path="${contextpath}"
/>
-->
<echo message="deploy war:${warfile}" />
<deploy
url="http://192.168.3.21:8080/manager/text"
username="admin"
password="admin"
war="file:${warfile}"
path="${contextpath}"
update="true"
/>
<list
url="http://192.168.3.21:8080/manager/text"
username="admin"
password="admin"
/>
</target>
</project>
スクリプト修正
tomcatDeploy.xmlを呼び出すようにスクリプトを修正し、保存、実行する。
ログ確認
ログを確認すると、デプロイが成功した旨が出力されている。
デプロイ確認
Webサーバにアクセスするとデプロイされていることが確認できる。