【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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください