ビルド後のイベントについて
ビルドが完了した場合に何か動作をする場合に使用します。
想定環境
・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再起動なので、ちょっと遅いです(-_-;)
以上です。