タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【Jenkins】Payaraへのデプロイで CargoExceptionが発生

JavaEEのアプリケーションをPayaraへデプロイするのを「Jenkins」で行っていたのですが、数ヶ月前から急に「CargoException」が頻発するようになりました。

org.codehaus.cargo.util.CargoException: Deployment has failed: null

現状のデプロイ方法

現状はこちら。

  • Payara 4.1.1.163 (JDK8)
  • Jenkins ver. 2.195
    • Deploy to container 1.15

デプロイについては、Deploy to containerプラグインを使っていました。

下記のコードが、デプロイ部のパイプラインです。

stage('Deploy App') {
    steps {
        deploy adapters: [glassfish4(adminPort: '4848', 
            credentialsId: 'payara_admin', 
            home: '/opt/payara/163/payara41/bin/asadmin', 
            hostname: "${AP_SERVER_NAME}")], 
            contextPath: 'AppName', 
            onFailure: false, 
            war: 'target/AppName.war'
    }
}

コードを直したわけでもなく、原因がよくわかりません・・・。

今後のデプロイ方法

こいつは困ったぞ、と途方に暮れていたら、Payara(というかGlassfish)では、「autodeploy」ディレクトリーに warファイルを投げ込めば、自動的にデプロイしてくれる機能を思い出しました(寺田さん、ありがとう!)。

というわけで「Deploy App」ステージを、次のようにメンバーに書き直してもらいました。

stage('Deploy App') {
    steps {
        script {
            def remote = [:]
            remote.name = "${AP_NAME}"
            remote.host = "${AP_SERVER_NAME}"
            remote.port = "${SSH_PORT_NUM}"
            remote.allowAnyHosts = true
            withCredentials([usernamePassword(
                credentialsId: 'userName_ap_ssh', 
                passwordVariable: 'password', 
                usernameVariable: 'userName')]) {
                remote.user = userName
                remote.password = password
                sshCommand remote: remote, command: "hostname"
                sshPut remote: remote, from: 'target/AppName.war', into: '/tmp'
                sshCommand remote: remote, command: "chown payara:payara /tmp/AppName.war", sudo : true
                sshCommand remote: remote, command: "mv -f /tmp/AppName.war /opt/payara/163/payara41/glassfish/domains/domain1/autodeploy", sudo : true
            }
        }
    }
}

github.com

今度は、SSH Pipeline Steps(2.0.0)を使わさせていただきました!

権限まわりで苦労しているところはありますが、とりあえず安定化させることはできました。

変更後2週間になりますが、成功率100%です(実行数は10回くらいですが)。

まとめ

突然、予期せぬ例外が発生すると焦ってしまいますよね。

とはいえ、複数の選択肢を持っていると安心感が増します。

複数の選択肢を持っていることが、自由であるということ」とどなたかが言っていましたが、ホント、その通りだと思います。

今回の改変で、手段は変わりましたが、目的は実現できたので オッケー ということにしておきます。