【GeneXus】Jenkins連携 その2

長くなったから続き。

前回↓
【GeneXus】Jenkins連携

今回はWAR作成して、所定のディレクトリにコピーする。
あとはSSHでサーバーにファイル転送。

ブログ用なので全部パス等はそのまま書いてますが変数にできるところは変数にしたほうが便利です。

デプロイメントユニット作成

名前とかは適当で。今回はメインプログラムの画面を1個入れました。

gxdproj作成

これも自動で作成できます。
前回まで使ってたジョブを編集していきます。

ここでGeneXusのバグっぽいのがある。
パラメータが足りなくて、エラーになるのでデフォルトのmsbuildファイルが使えないので
コピーして編集して使います。
C:\Program Files (x86)\GeneXus\GeneXus16JP\Deploy.msbuild

C:\Program Files (x86)\GeneXus\GeneXus16JP\DeployCustom.msbuild

以下の中身を修正
PropertyGroup に以下の2個を追加し、ターゲット:OpenKB の中を修正。
・DbaseServerUsername
・DbaseServerPassword

DeployCustom.msbuild

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="CreateDeploy" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

	~~ 省略 ~~

	<PropertyGroup>
		~~ 省略 ~~
		
		<!-- Working KB Properties 追加-->
		<DbaseServerUsername></DbaseServerUsername>
		<DbaseServerPassword></DbaseServerPassword>

	</PropertyGroup>

	~~ 省略 ~~

	<Target Name="OpenKB">
		<Error Condition="'$(KBPath)'==''" Text="KBPath cannot be null" />
		<Message Text="OpenKnowledgeBase Directory=$(KBPath)" />
		<!-- ↓変更 -->
		<OpenKnowledgeBase
			DatabaseUser="$(DbaseServerUsername)"
			DatabasePassword="$(DbaseServerPassword)"
			Directory="$(KBPath)"/>
	</Target>

	~~ 省略 ~~

</Project>

ビルドの追加で「MSBuildの実行」を選択
以下を設定する。

パラメーターは以下を設定
/p:KBPath=”C:\Models\JENKINS_TESTKB_20210407_7″
/p:ProjectName=”MainWebApp”
/p:TARGET_JRE=”9″
/p:ObjectNames=”MainWeb”
/p:DbaseServerUsername=”sa”
/p:DbaseServerPassword=”saのパスワード”

KBPath:KBのパス
ProjectName:WAR、APPの名前になる文字列
TARGET_JRE:対象のJavaバージョン
ObjectNames:↑で作成したデプロイメントユニットの名前
DbaseServerUsername:KBをオープンするためのSQLサーバーのユーザー
DbaseServerPassword::KBをオープンするためのSQLサーバーのパスワード

WAR作成

C:\Program Files (x86)\GeneXus\GeneXus16JP\Deploy\Java\Genexus.Java.Server.targets
を編集

421、422行目の EchoOff=”true” を削除。

↑で作成したgxdprojファイルがmsbuildファイルなので、それを指定し実行する。
ビルドの追加で「MSBuildの実行」を選択
以下を設定する。

WARのコピー

今回は同じPCに入ってるTomcatのフォルダにコピーするようにします。

ビルドの手順を追加し「Windows バッチコマンドの実行」を選択し以下を設定。

xcopy /Y "C:\Models\JENKINS_TESTKB_20210407_7\JavaModel\Deploy\Local\MainWebApp.war" "C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps"

xcopy /Y "C:\Models\JENKINS_TESTKB_20210407_7\JavaModel\Deploy\Local\MainWebApp.war" %WORKSPACE%

※追記:WARをサーバーにコピーする必要があるので、ワークスペースにもコピーする

実行

この段階で実行してローカルにWARがコピーされ、展開されるか確認します。

ブラウザを起動して正しくデプロイされていることが確認できればOKです。

SSHでWARをコピー(サーバーへ)

プラグインを使用します。プラグインの追加方法は適当にググってください。
「Publish Over SSH」
https://plugins.jenkins.io/publish-over-ssh

Jenkinsの管理 > システムの設定 > Publish over SSH
配布先のサーバーの情報やログイン情報を設定します。

プロジェクトに転送の設定をします。
ビルドの手順を追加で「Send files or execute commands over SSH」を追加します。

SSHコマンド実行(サーバーでデプロイ、tomcat再起動)

プラグインを使用します。
「SSH」
https://plugins.jenkins.io/ssh

今回はサンプルなので、TOMCATを停止して、WARをコピーして、TOMCATを起動するところまで。
他にもやりたいコマンドがあれば勝手に追加してw

Jenkinsの管理 > システムの設定 からSSHの設定をします。

# TOMCAT停止
sudo systemctl stop tomcat

# WARファイルコピー
mv MainWebApp.war /opt/apache-tomcat-9.0.16/webapps/

# TOMCAT起動
sudo systemctl start tomcat

実行して確認

ここまで設定したら全部を実行して、サーバーにデプロイされたか確認します。

まとめ

結構便利な機能でプラグインや、wikiも他の情報と違ってまともなので
開発現場では是非使って行きたいですね。

もっと情報をオープンにして、なんでも楽にできたら俺の仕事も減るんだよ!

おまけ

Slack

「Slack Notification」
https://plugins.jenkins.io/slack
業務でSlackとか使ってるなら、以下のプラグインがおすすめです。
ビルドの開始とか成功、失敗いろいろ通知してくれます。

ユーザー管理

「Role-based Authorization Strategy」
https://plugins.jenkins.io/role-strategy
デフォルトのユーザー管理もありますが、プラグイン使うとプロジェクトごとにできたりするので便利です。

PowerShellの使用

あると便利なPowerShell起動用プラグイン
「PowerShell」
https://plugins.jenkins.io/ssh

Jenkinsのポート変更

ポートを変更したい場合は以下の方法で変更できます。
C:\Program Files (x86)\Jenkins\jenkins.xml

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8082 --webroot="%BASE%\war"</arguments>

でサービスの再起動。

いつまでも下書きだと邪魔なので投稿ってことで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください