Удаленно запускать задание Jenkins из функций Azure / виртуальной машины Azure - PullRequest
0 голосов
/ 19 марта 2019

Я довольно новичок с Дженкинсом и просто не могу заставить это работать.Я просматривал сеть для ответа, но не нашел ответа, или, возможно, не понял, что мне делать.

У меня есть задания в Дженкинсе, которые в настоящее время запланированы (скрипты Python).Но один из них должен быть преобразован для удаленного запуска через URL.Этого я смог достичь, и все отлично работает, когда я использую URL для запуска задания из нашей сети в офисе (Python, CMD, Browser, Postman и т. Д.).

Однако при использовании этоготот же URL-адрес, который запускает задание из функций Azure или виртуальной машины Azure, задание не запускается (другой IP - я полагаю, что это должно быть проблемой).Я пытался открыть порт 8080 на компьютере, на котором в данный момент работает наш сервер Jenkins, изменив настройки брандмауэра, но, несмотря на это, HTTP POST не проходит.Цель - запуск задания из функций Azure.

Есть ли что-то очевидное, чего мне не хватает в отношении Дженкинса, или это просто тот факт, что наш брандмауэр блокирует соединение, так как нам нужно использовать VPN дляподключиться к нашей локальной сети снаружи.Мы настроили Jenkins только на одном компьютере (компьютере, работающем в нашей локальной сети) и не представили никаких подчиненных узлов.

1 Ответ

0 голосов
/ 29 марта 2019

Это действительно похоже на проблему с брандмауэром.Существует несколько способов реализации таких локальных реализаций в Azure без открытия вашей сети извне.

Начиная с самого простого подхода


A. Приложения логики

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

В нем есть пара компонентов

  1. Пользовательский соединитель Вы должны создать настраиваемый соединитель , которыйможет подключаться через локальный шлюз данных и иметь одно определенное действие, которое может вызвать ваш компьютер Jenkins

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

  3. Создание приложения логики
    Это простая часть, где вы используете приложение логики вместо приложения-функции.Вы можете создать простое запущенное по протоколу HTTP приложение логики , которое использует пользовательский соединитель, созданный вами для запуска задания Jenkins


B. Azure Automation

Azure Automation имеет аналогичную функцию, в которой вы можете развернуть Hybrid Worker в локальной сети и запланировать задания в этомработник.

Вы можете развернуть любого из следующих работников в зависимости от ваших требований

  1. Windows Worker
  2. Linux Worker

Runbook, который вы бы написали, может быть в PowerShell или Python , и его целью будет просто вызвать API-интерфейс Jenkins для запуска задания.

Имея все это на месте, вам просто нужно запустить runbook на гибридном рабочем .

Вы также можете запустить runbook из webhook также.


C. Подключение локальной сети к Azure

Это скорее сетевое решение, в котором вы подключаете локальную сеть к Azure VNET, позволяя любым ресурсам в этой VNET получать доступ к вашей локальной сети.-premise systems.

Есть несколько способов достичь этого, как описано в документации

  1. Шлюз VPN
  2. Экспресс-маршрут

Я не буду углубляться в то, как они настроены здесь.Вы можете обратиться к документации для получения подробных инструкций по настройке.

После настройки вы можете либо

  • Expose Jenkins
    Для этогоВы могли бы просто открыть порт в NSG вашего VNET, но это действительно не рекомендуется, я полагаю, так как вы могли бы просто выставить его непосредственно в локальной сети.

    Предпочтительным способом было бынастройте и используйте Azure Application Gateway , который по сути является обратным прокси-сервером.

  • Разверните свою функцию или приложение логики в VNET
    Если вы не хотите подвергать свою конечную точку Jenkins внешним данным, вы можете развернуть приложение

    В обоих этих сценариях вы можете напрямую вызывать конечную точку Jenkins с использованием IP-адреса, на котором она размещена (локальная)Сам IP)

...