【GeneXus】ビルド後のイベント(PowerShell)

ビルド後のイベントについて

ビルドが完了した場合に何か動作をする場合に使用します。

想定環境

・GeneXus 15以降?
・Java、Tomcat7

今回はビルドが完了したらweb.xmlを追記しTomcatが再起動するように
PowerShellスクリプトを作成し
GeneXusから実行するように設定します。

PowerShell

普通に使ってたりするだろうと思うけど、結構現場だと復旧してないPowerShell。。。

適当なディレクトリにTomcat.ps1としてファイルを保存。

Tomcat1.ps1

# Application Pathを設定
$path = "C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\TestKBJavaEnvironment\WEB-INF"
# web.xmlファイル読み込み
$fileName = $path + "\web.xml"
$file = New-Object System.IO.StreamReader($fileName, [System.Text.Encoding]::GetEncoding("utf-8"))
# 変数の初期化
$addflg = 1
# web.xml内の文言検索(何回も追記しないように対応)
while (($line = $file.ReadLine()) -ne $null)
{ if($line.IndexOf("hoge") -gt 0){ # $line.IndexOf("hoge") > 0 $addflg=0 break }
}
# ファイルを閉じる
$file.Close()
if($addflg -eq 0){ # hoge が追加済みの場合 echo "hoge 追加済み"
}else{ # hoge が追加されてなかった場合 # 新しいweb2.xmlを作成 $fileName2 = $path + "\web2.xml" $file = New-Object System.IO.StreamReader($fileName, [System.Text.Encoding]::GetEncoding("utf-8")) $file2 = New-Object System.IO.StreamWriter($fileName2, $false, [System.Text.Encoding]::GetEncoding("utf-8")) $i=0 # web.xmlを読み込み、web2.xmlを書き込んでいく while (($line = $file.ReadLine()) -ne $null) { $i += 1 # 10行目でservletタグを追加 if($i -eq 10){ $file2.WriteLine(" ") $file2.WriteLine("<servlet>") $file2.WriteLine(" <servlet-name>hoge</servlet-name>") $file2.WriteLine(" <servlet-class>hoge</servlet-class>") $file2.WriteLine("</servlet>") $file2.WriteLine("<servlet-mapping>") $file2.WriteLine(" <servlet-name>hoge</servlet-name>") $file2.WriteLine(" <url-pattern>/servlet/hoge</url-pattern>") $file2.WriteLine("</servlet-mapping>") } # web.xmlの内容を書き込み $file2.WriteLine($line) } # ファイルを閉じる $file.Close() $file2.Close() # web.xmlを削除して、web2.xmlをリネーム Remove-Item $fileName Rename-Item $fileName2 -newName "web.xml" echo "hoge 追加成功"
}
# 必要なサービス名を配列で用意。今回はTomcatだけ。
$services = @("Tomcat7")
# サービスを停止
foreach($service In Get-Service $services | Where-Object {$_.status -eq "Running"}){ Stop-Service $service
}
# サービスを開始
foreach($service In Get-Service $services | Where-Object {$_.status -eq "stopped"}){ Start-Service $service
}
# 現在のサービスの状況をコンソール出力
# サービスの状態が全て「running」になっていれば、サービスの起動が成功。
echo "`r`n Tomcat7 Service Status >>>"
Get-Service $services | Format-Table -Property DisplayName, Status
# ブラウザ起動
start "http://localhost:8080/TestKBJavaEnvironment/servlet/com.oqiita.wp_test"

GeneXus

GeneXusのメニューから ビルド > イベントをビルド を選択。
ビルド後イベント コマンドラインに以下のコマンドを設定

powershell -ExecutionPolicy RemoteSigned C:\TEMP\Tomcat.ps1

まとめ

重たいKBだと毎回手動でTomcat再起動とかしてめんどいのでビルドイベントに組み込むと楽。
でもビルドの度にTomcat再起動なので、ちょっと遅いです(-_-;)

以上です。

コメントを残す

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

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