2016-09-09 6 views
7

JavaプログラムからプログラムでMavenのリリースを開始したい。 This webpageは一般的にどのように行われているかを示しています。だから、私がやったことだ:リモートからトリガーMavenを解放

final URL url = new URL("http://jenkins/job/MyProject/m2release/submit"); 

    final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setRequestMethod("POST"); 
    urlConnection.setDoOutput(true); 

    final String userpass = "User:Password"; 
    final String authentication = "Basic " + DatatypeConverter.printBase64Binary(userpass.getBytes()); 
    urlConnection.setRequestProperty("Authorization", authentication); 

    try (final OutputStream os = urlConnection.getOutputStream(); 
      final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));) { 
     writer.write("releaseVersion=1.2.3&"); 
     writer.write("developmentVersion=1.2.4-SNAPSHOT&"); 
     // writer.write("isDryRun=on&"); // uncomment for dry run 
     writer.write("scmUsername=User&"); 
     writer.write("scmPassword=Password&"); 
     writer.write("scmCommentPrefix=[test]&"); 
     writer.write("json={\"releaseVersion\":\"1.2.3\",\"developmentVersion\":\"1.2.4-SNAPSHOT\",\"isDryRun\":false}&"); 
     writer.write("Submit=Schedule Maven Release Build"); 

     writer.flush(); 
    } 

    urlConnection.connect(); 

    try (BufferedReader reader = new BufferedReader(
      new InputStreamReader(urlConnection.getInputStream(), "UTF-8"))) { 
     for (String line; (line = reader.readLine()) != null;) { 
      System.out.println(line); 
     } 
    } 

This forumは「あなたがリリースを行うbeforちょうどフォームを見て、あなたはcURLのリクエストを作ることができるはず」ことを示唆している、それは私がそこまで得るためにやったことです。リリースは少なくとも開始されます。

私は今、すべてをエスケープする方法はありません。ブラウザはスペースを "+"として表示しますが、データをそのように送信すると機能しません。実際、 ""、 "+"、 "%20"のいずれもスペースとしては機能しません。

まだ私はUnable to commit filesをビルドしているので、ユーザー名/パスワード/コメントプレフィックスに問題があることは間違いないと思います。 Jenkins自体は、ログインが送信されていても、ログインページ(「認証が必要」)を返します。

JenkinsでMavenリリースをトリガする正しい方法は何ですか?

答えて

4

さて、私の古いアプローチに欠けているパラメータは以下の通りであった。

writer.write("specifyScmCredentials=on&"); 
writer.write("specifyScmCommentPrefix=on&"); 
0

ここで気になるのは、「すべてのJenkinsジョブが等しいわけではありません」です。

公開したコードは、releaseVersionおよびdevelopmentVersionパラメータを持つMyProjectというJenkinsジョブを呼び出すだけです。

ただし、コードはMyProjectの機能とは関係ありません。これは、Mavenプロジェクト、Gradleプロジェクト、または.NETプロジェクトを構築するために設計された仕事です。

あなたがしたい(Mavenリリースプラグインを呼び出す)のは、Jenkinsジョブ自体の責任です。

特に、リリースプラグインを実行するMavenビルドステップを呼び出すMyProjectの設定を見てください。

役立ちリンク

+0

仕事IすでにMavenプロジェクトです。そして、 "release"がパラメータだったならば、私はそれを設定することができます。しかし、そうではありません。これは、ジョブがMavenジョブとして宣言されると追加される任意のアクションです。 –

関連する問題