CONTACT
お問い合わせ

Jenkins#2 ビルド・デプロイ実行

Jenkinsにてビルド・デプロイ実行する方法を説明する。

目次

ビルド・デプロイ

  1. 概要
  2. 構築環境について
  3. インストール
  4. チェックアウト
  5. ビルド
  6. デプロイ

1.概要

今回実現すること

Jenkinsにて以下の作業を1つのジョブ実行にて実現する

  1. チェックアウト
  2. ビルド
  3. 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サーバにアクセスするとデプロイされていることが確認できる。