【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コマンドの実行をしてくれます。
②: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コマンドを実行させます。
私は、他にもコマンドのロギングとかやりたかったので
一連の処理をシェルスクリプトにし、リリース先サーバに置いて
リモート実行させました。
④:ファイルオーナー、パーミッションの変更
③で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するとか、他にも色々あるんですがね…
取り合えず、一旦ここまで!