Запуск Дженкинса с помощью универсального веб-хита github - PullRequest
0 голосов
/ 25 июня 2018

Я довольно новичок в Jenkins, и это моя первая попытка настройки конвейерных заданий. Я создал работу конвейера в Дженкинс. Теперь я должен запускать эту работу, когда есть ветка коммита master моего репозитория github. Делая это, я полностью застрял в нескольких вопросах. Любая помощь будет высоко оценена.

а) Первая проблема при отправке триггера с GitHub. Наш Дженкинс использует защищенное соединение (https). Как предлагалось в некоторых других темах, я попытался добавить «userName: пароль» перед именем хоста. Таким образом, URL в GitHub выглядит как

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

Мой пароль содержит «@», поэтому я заменил его на «% 40». Я получил следующую ошибку

Мы не смогли доставить эту полезную нагрузку: не удалось разрешить имя хоста

б) Так как я не мог продолжить работу с 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);
}

Наличие заголовка ' Authorization ' помогло мне обойти проблему защищенного соединения. payload.json - это файл JSON, который я создал с содержимым, скопированным с github webhook Recent Deliveries. Без каких-либо фильтров работа запускается. Теперь мне нужно отфильтровать с помощью тега ref в payload.json

enter image description here

так что задание запускается только для коммитов в ветку 'master'.

Для этого я добавил следующие конфиги в BuildTriggers / Generic Webhook Trigger.

enter image description here

enter image description here

Теперь работа вообще не запускается. Если я использую регулярное выражение для передачи какого-либо значения, это работает.

Я также проверяю регулярное выражение и значение на веб-странице в Интернете, и оно кажется правильным.

enter image description here

Поскольку это корпоративный jenkins, у меня нет разрешения просматривать главные журналы jenkins, чтобы видеть, что доставляется, пока я делаю запрос.

************************ UPDATE ********************** ***

Проблема (а) решена сейчас. Тот же URL сделал свое дело. Разница только в том, как я устанавливаю URL. сначала я набрал в пароле @ и github автоматически преобразовал его в% 40. на этот раз я набрал% 40 вместо @. это сработало. Проблема (b) еще не решена, хотя концентратор git способен инициировать запрос. Я считаю, что это как-то связано с регулярным выражением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...