Я довольно новичок в 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
так что задание запускается только для коммитов в ветку 'master'.
Для этого я добавил следующие конфиги в BuildTriggers / Generic Webhook Trigger.
Теперь работа вообще не запускается. Если я использую регулярное выражение для передачи какого-либо значения, это работает.
Я также проверяю регулярное выражение и значение на веб-странице в Интернете, и оно кажется правильным.
Поскольку это корпоративный jenkins, у меня нет разрешения просматривать главные журналы jenkins, чтобы видеть, что доставляется, пока я делаю запрос.
************************ UPDATE ********************** ***
Проблема (а) решена сейчас. Тот же URL сделал свое дело. Разница только в том, как я устанавливаю URL. сначала я набрал в пароле @ и github автоматически преобразовал его в% 40. на этот раз я набрал% 40 вместо @. это сработало. Проблема (b) еще не решена, хотя концентратор git способен инициировать запрос. Я считаю, что это как-то связано с регулярным выражением