我想以编程方式从Java程序启动Maven版本。 This webpage显示了如何做到这一点。这就是我所做的:
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建议"只要查看一下表单,你就可以制作一个cURL请求",这就是我做的事情远。该发布至少开始。
我现在不知道如何逃避一切。浏览器将空格显示为" +",但如果我以这种方式发送数据则不起作用。事实上,既不是" "," +"也不是"%20"作为一个空间。
我仍然在构建中获得Unable to commit files
,因此我非常确定用户名/密码/注释前缀有问题。即使登录已发送,Jenkins本身也会返回登录页面("需要身份验证")。
在Jenkins上触发Maven发布的正确方法是什么?
答案 0 :(得分:4)
好的,旧方法中缺少的参数是:
writer.write("specifyScmCredentials=on&");
writer.write("specifyScmCommentPrefix=on&");
答案 1 :(得分:0)
这里想到的陈述是“并非所有詹金斯的工作都是平等的”。
您发布的代码只是使用参数releaseVersion和developmentVersion调用名为MyProject的Jenkins作业。
然而,代码与MyProject的作用无关。它可能是一个旨在构建Maven项目,Gradle项目或.NET项目的工作。
你想做什么(调用Maven发布插件)是Jenkins工作本身的责任。
查看MyProject的配置,特别是调用运行发布插件的Maven构建步骤。
有用的链接
答案 2 :(得分:0)
还有一件值得一提的事情是,您可以在其中传递自定义参数
http://jenkins/job/MyProject/m2release/submit?json={}
个请求。为此,您必须定义查询参数json
->例如
json={"parameter": {"name":"CUSTOM_PARAM_1", "value":"CUSTOM_PARAM_1_VALUE"}}
在执行时,它将被视为参数化作业,并且您将把参数与
一起使用MVN_RELEASE_VERSION=X
MVN_DEV_VERSION=X-SNAPSHOT
MVN_ISDRYRUN=false
CUSTOM_PARAM_1=CUSTOM_PARAM_1_VALUE