2016-10-25 3 views
0

Что я уже знаю: Используя Jenkins Rest API (используя путь командной строки Curl, Groovy, Python и т. Д.), Я могу успешно инициировать сборку Jenkins из моего локального машины или любого другого хоста локально. Есть много сообщений/блогов онлайн, которые дают хорошую информацию о том же. У анонимного пользователя есть общий доступ READ в безопасности Jenkins, и я использую идентификатор пользователя ключа API и ключ токена, чтобы успешно их запускать.Trigger Jenkins build REST Call - webhook - RFC 1918 - AWS Ec2

Мой вопрос Case:

  1. В моем случае, Дженкинс мастер/экземпляр запущен в AWS ec2 экземпляра.

  2. Веб-приложение моей компании предназначено для создания предупреждений (которые автоматически поднимаются автоматически, чтобы пользователь мог их видеть и находить причину этого предупреждения). Для этих предупреждений я получаю уведомления по электронной почте и сообщения Slack.

  3. В webapp пользователь может создавать различные предупреждения, например «память или свободный диск менее 900 М» и т. Д., Создавая запрос/условие для запуска этого предупреждения. Эта часть оповещения работает.

  4. Этот webapp также позволяет пользователю создавать веб-подключение. Веб-подключение может быть настроено на различные триггерные методы, такие как уведомление Slack с некоторой значимой информацией в пользовательском Slack #channel или создание оповещения Pagerduty или уведомление по электронной почте или вызов конечной точки вызова REST API.

  5. Предупреждение (пуля 3) может быть привязано/сконфигурировано к данному сетевому подключению (пуля 4).

Я понимаю, что webapp работает в другом VPC Amazon, чем VPC, где работает экземпляр Jenkins.

Что я пытаюсь сделать: создать простое оповещение в webapp, а затем создать веб-узел, где я вызову RESTful путь Jenkins и передать некоторые параметры, чтобы инициировать сборку/выполнение (что будет делать некоторые необходимое действие).

Поскольку VPC отличаются друг от друга - или - по какой-либо другой причине (может быть, webapp не поддерживает поддерживаемые RFC1918 Webhooks), я думаю, что из-за механизма RFC 1918, я не смог инициировать сборку Jenkins из моего веб-приложение веб-приложения, которое запускает конечную точку API Jenkins Rest и получает следующее сообщение об ошибке.

Я получаю следующее сообщение об ошибке через журналы сетевого подключения.

Упс
Невозможно сохранить приемник уведомлений, повторите попытку. (400) Ошибка запроса неверного запроса URL-адреса. Хост URI не разрешает публичный ip. : https://jenkins.server.company.com/job/Ops/job/recycleOrCleanupDiskMemoryResources/build?token=xxshenzi

Есть ли способ решить эту проблему. Мне нужно развернуть/создать шлюз API Amazon для Front Jenkins (чтобы избавиться от этой проблемы), т. Е. Webhookup будет разговаривать с Amazon API gayeway и будет направлять запрос на экземпляр Jenkins через Restful call? Я не хочу, чтобы это осложнялось, ища легкую реализацию.

ответ

2

Поскольку сообщение об ошибке говорит, что «URI-хост не разрешает публичный ip», похоже, что DNS-имя хоста Jenkins разрешает немаршрутизируемый IP-адрес в VPC, где работает Jenkins. API Gateway в настоящее время не поддерживает возможность вызова конечных точек в VPC клиента, поэтому в этом случае это не поможет.(Это часто запрашиваемая функция, и мы надеемся добавить ее в API-шлюз в какой-то момент в будущем.)

Чтобы сделать эту работу сегодня, вам необходимо сделать хост Jenkins доступным через Интернет, либо присвоив ему публичный IP-адрес или добавив в VPC балансировщик нагрузки или прокси-сервер, который может маршрутизировать интернет-трафик на хост Jenkins.

+0

Согласен, Майк. Я изучаю создание шлюза API (AWS), увидит, смогу ли я его подключить. В противном случае это можно сделать следующим образом:> Поскольку веб-приложение доступно публично. Таким образом, я могу создать восходящее/нисходящее задание, в котором восходящий поток сохранит только 5 сборок и в каждом прогоне, он вызовет REST API для webapp против предупреждения и получит требуемые данные/параметры, которые я могу передать в работу вниз (который будет выполнять необходимый вызов скрипта для разрешения части «clean/issue»). Я знаю, что это не будет масштабироваться, поскольку идея заключалась в том, чтобы зацепить конечную точку REST для работы Jenkins через настройку веб-хоста alert. –

Смежные вопросы