【Jenkins】自動リリースへの旅路(2)~ビルド環境の構築2

※この記事でやりたかったこと、作業環境などは(1)の記事を参照下さい
https://note.com/yone3_note/n/nde31d1db29f5

【やったこと②:Jenkinsでビルド&リリースできるようにする】

さて、いよいよJenkinsジョブの作成です。
Jenkinsジョブでは以下のような流れでビルド&リリースしようと思います。

①:SVNから最新ソースをチェックアウト
②:Gradleでビルド(warファイル作成)
③:warファイルをリリース先サーバへrsyncする(リモートコピー)
④:ファイルオーナー、パーミッションの変更
⑤:tomcat再起動

①:SVNから最新ソースをチェックアウト

これは比較的簡単です。Jenkinsのジョブ設定画面で
チェックアウトしたいリポジトリのURLを入れるだけ。
後はJenkinsのプラグインでSVNコマンドの実行をしてくれます。

画像1

②:Gradleでビルド(warファイル作成)

予め、リリースしたいspringbootプロジェクトの、build.gradleファイルで
warファイルをビルドできるようにしておきます。

plugins {
	id 'org.springframework.boot' version '2.3.4.BUILD-SNAPSHOT'
	id 'io.spring.dependency-management' version '1.0.10.RELEASE'
	id 'java'
	id 'war'
}
war {
	enabled = true
	archiveName 'hogehoge.war'
}

pluginsにwarを入れておくことでwarファイル作成のビルド処理が
行われるようになります。ただ「gradle build」タスクでは
デフォルトでは「war」タスクが動かないようなので
上記のように有効にしてあげます。

また例えば、eclipseで作った「hogehoge」プロジェクトを
設定を特に変えずにいると「hogehoge-0.0.1-SNAPSHOT.war」という名前で
出力されると思いますが、上記のような設定内容にしておくと
warファイル名のみ変更できるようです。

③:warファイルをリリース先サーバへrsyncする(リモートコピー)

これ、Jenkinsを構築しているサーバとリリース先サーバが同一なら
単純にcpすれば良いだけなので苦労無いんですが
今回は、サーバを分けて運用したかったのでこんな面倒くさいことを
やってます(笑)

rsyncについてはググればいくらでも見つかると思うので
ここでは割愛しますが、要するに
(1) リリース先サーバからビルドサーバにrsyncできるようにSSH鍵を発行する
(2) リリース先サーバにSSHログインして、ビルドサーバに向けてrsyncする
という流れになります。

Jenkinsでは、リモートサーバにログインしてスクリプト処理を
行うことが可能なので、予め(1)でリリース先サーバ上にSSH鍵を
作っておき、リリース先サーバからビルドサーバに向けてrsyncコマンドを実行させます。

画像2

私は、他にもコマンドのロギングとかやりたかったので
一連の処理をシェルスクリプトにし、リリース先サーバに置いて
リモート実行させました。

④:ファイルオーナー、パーミッションの変更

③でrsyncする時のユーザによりますが、
私の場合はリリース先もビルドサーバも「jenkins」という
ユーザを作って、処理を全てそのユーザに任せてたので
rsyncした後のwarファイルのオーナーも「jenkins」に
なってしまっていました。
一方で、tomcatは「tomcat」と言うユーザを作って
そこで実行させていたので
(一応、念のため)ファイルオーナー・パーミッションを
変更しておきました。

ここではsudoを使って

sudo chown tomcat.tomcat ${releasePath}/hogehoge.war
sudo chmod 775 ${releasePath}/hogehoge.war

としています。これも私の場合は③の時に作った
シェルスクリプトにまとめました。

⑤:tomcat再起動

いよいよ最後です!
warを配置したので、tomcatを再起動します。
この辺は好みの問題ですが
③の前にtomcat stopして③でコピー、最後にtomcat startでも良いです。

systemctl tomcat restart

するだけですね。
tomcatをservice登録できていない方は

{tomcatの配置場所}/bin/shutdown.sh
{tomcatの配置場所}/bin/startup.sh

の2つのシェルを実行しましょう。

終わりに

ここまでできれば、アナタもJenkinsマスター!!
…と言えるかはわかりませんが
tomcatで動かすためのwarビルド~リリースまでを
自動化できるんじゃないかと思います。

もちろん、apacheやtomcatの環境は構築済みの
前提なので、SSL化したapacheからajpプロトコルで
tomcatにProxyPassするとか、他にも色々あるんですがね…

取り合えず、一旦ここまで!

いいなと思ったら応援しよう!