使用github通用Web钩子触发Jenkins

时间:2018-06-25 09:24:12

标签: java regex jenkins github jenkins-pipeline

对于Jenkins来说我还很陌生,这是我第一次尝试配置管道作业。 我在詹金斯创建了一个管道工作。现在,只要有对我的github存储库的master分支的提交,就必须触发此作业。在执行此操作时,我完全会遇到几个问题。任何帮助将不胜感激。

<罢工> a)第一个问题是从github发送触发器时。 我们的詹金斯人使用安全连接(https)。正如其他一些线程所建议的那样,我尝试在主机名之前添加“ userName:password”。 所以github中的网址看起来像

https://username:password@jenkins.ourorg.com/generic-webhook-trigger/invoke

我的密码包含“ @”,因此我将其替换为“%40”。 我收到以下错误

  

我们无法提供此有效负载:无法解析主机名   

b)因为我无法继续使用github webhook,所以我想到了用Java程序来模拟它。

String type = "application/x-www-form-urlencoded";

JSONTokener tokener = new JSONTokener(new FileInputStream(new File("payload.json")));
JSONObject jsonObject = new JSONObject(tokener);
System.out.println(jsonObject);  


//getMockCertificate() returns an empty array of X509Certificate
HttpsURLConnection.setDefaultSSLSocketFactory(getMockCertificate().getSocketFactory());
URL url = new URL("https://jenkins.ourorg.com/generic-webhook-trigger/invoke");

String userCredentials = "userName:password";
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes()));
HttpsURLConnection httpsCon = (HttpsURLConnection) url.openConnection();
httpsCon.setRequestProperty ("Authorization", basicAuth);


httpsCon.setDoOutput(true);
httpsCon.setRequestMethod("POST");
httpsCon.setRequestProperty( "Content-Type", type );
httpsCon.setRequestProperty( "Content-Length", String.valueOf(jsonObject.toString().length()));

OutputStream os = httpsCon.getOutputStream();
os.write(jsonObject.toString().getBytes());

System.out.println(httpsCon.getResponseCode());
String line;
int a;

while((a = httpsCon.getInputStream().read()) != -1){
    System.out.print((char)a);
}

具有“ 授权”标题有助于我绕过安全连接问题。 payload.json 是我创建的JSON文件,其内容是从github webhook最近发送的邮件中复制的。没有任何过滤器,作业将被触发。 现在,我需要在payload.json

中使用“ ref ”标签进行过滤

enter image description here

以便作业仅针对提交到“ master”分支的触发器触发。

为此,我在BuildTriggers / Generic Webhook触发器下添加了以下配置。

enter image description here

enter image description here

现在完全没有触发作业。如果我使用正则表达式传递任何值,它将起作用。

我还对照在线网页检查了正则表达式和值,这似乎是正确的。

enter image description here

由于这是企业jenkins,因此我无权查看jenkins的主要日志以了解在发出请求时交付的内容。

  

************************更新********************** ***

问题(a)现在已解决。相同的URL起到了作用。唯一的不同是我设置URL的方式。最初,我在密码中输入@,然后github自动将其转换为%40。这次我键入%40而不是@。有效。尽管git hub能够触发请求,但Issue(b)仍在等待解决。我相信这与正则表达式

有关

0 个答案:

没有答案