Запускать задание Jenkins удаленно из функций Azure / виртуальной машины Azure

#azure #jenkins #azure-functions

#azure #дженкинс #azure-функции

Вопрос:

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

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

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

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

Комментарии:

1. Я совершенно уверен, что вам просто нужно вызвать URL, можете ли вы просто создать виртуальную машину где-нибудь в azure (или просто использовать Azure Cloud Shell) и убедиться, что URL-адрес отвечает хотя бы чем-то?

2. Спасибо за предложение. У нас запущена Azure VM, и URL-адрес не отвечает при вызове оттуда (пробовал браузер, postman, скрипт python и т.д.). То же самое касается функций Azure, запущенных в нашей службе приложений. Но при вызове URL-адреса с любого другого компьютера в пределах нашего локального IP-адреса это работает как по волшебству.

3. да, поэтому я бы подумал, что это связано с брандмауэром подключением

4. Спасибо, тогда я продолжу бороться с брандмауэром. Просто не был уверен, что я что-то пропустил в Jenkins.

Ответ №1:

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

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


A. Логические приложения

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

Для этого есть несколько компонентов

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

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

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


B. Автоматизация Azure

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

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

  1. Windows Worker
  2. Linux Worker

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

Имея все это на месте, вам просто нужно было бы запустить runbook на hybrid worker.

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


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

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

Этого можно добиться несколькими способами, описанными в документации

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

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

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

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

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

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

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