2016-09-09 2 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을 단지 형태에서 모양과 당신은 컬 요청을 정교하게 할 수 있어야한다"제안, 그게 내가 멀리 얻을 무슨 짓을했는지. 출시는 적어도 시작됩니다.

나는 이제 모든 것을 벗어나는 방법을 모르겠습니다. 브라우저는 공백을 "+"로 표시하지만 데이터를 그렇게 보내면 작동하지 않습니다. 사실, "+"도 "% 20"도 공백으로 작동하지 않습니다.

여전히 빌드에서 Unable to commit files이 표시되므로 사용자 이름/비밀번호/댓글 접두어에 문제가있는 것으로 확신합니다. Jenkins 자체는 로그인이 전송 되더라도 로그인 페이지 ("인증 필요")를 반환합니다.

Jenkins에서 Maven 릴리스를 트리거하는 올바른 방법은 무엇입니까?

답변

4

좋아, 내 옛날 방식에서 누락 매개 변수가 있었다 :

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

여기에 나오는 진술은 "모든 젠킨스 직업이 동등하지는 않습니다"입니다.

게시 한 코드는 releaseVersion 및 developmentVersion 매개 변수가있는 MyProject라는 Jenkins 작업을 호출하기 만하면됩니다.

그러나 코드는 MyProject의 기능과 아무 관련이 없습니다. Maven 프로젝트 또는 Gradle 프로젝트 또는 .NET 프로젝트를 빌드하기 위해 설계된 작업 일 수 있습니다.

당신이하고 싶은 (Maven 릴리스 플러그인을 호출하는) 것은 Jenkins 작업 자체의 책임입니다.

릴리스 플러그인을 실행하는 Maven 빌드 단계를 특히 호출하는 MyProject의 구성을 살펴보십시오.

유용한 링크

+0

작업 전 이미 Maven 프로젝트입니다. 그리고 "release"가 매개 변수라면, 나는 그것을 설정할 수있을 것입니다. 그러나 그렇지 않습니다. 작업이 Maven 작업으로 선언되면 추가되는 임의의 작업입니다. –

관련 문제