From a03e6eda0d00d11c8d31aef99648ad27b5884b60 Mon Sep 17 00:00:00 2001 From: Roman Zhilkin Date: Thu, 26 Dec 2024 22:13:18 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BB=D0=B0=D1=83=D0=BD=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- launcher.py | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 launcher.py diff --git a/launcher.py b/launcher.py new file mode 100644 index 0000000..0d621d6 --- /dev/null +++ b/launcher.py @@ -0,0 +1,63 @@ +import os +import logging + +# Настройка логирования +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + + +def ensure_https(url): + """Проверяет, содержит ли URL схему, и добавляет https:// по умолчанию.""" + if not (url.startswith("http://") or url.startswith("https://")): + logging.info(f"Добавление 'https://' к адресу: {url}") + url = "https://" + url + return url + + +def run_docker_runner(registration_token, instance_url, runner_name, runner_labels): + container_name = "gitea-runner" + + # Остановка и удаление контейнера, если он существует + logging.info(f"Остановка контейнера '{container_name}' (если он существует)...") + os.system(f"docker stop {container_name} || true") + os.system(f"docker rm {container_name} || true") + + # Формируем команду для запуска контейнера + command = [ + "docker", "run", "-d", + "--name", container_name, + "--restart", "always", + "-v", "/var/run/docker.sock:/var/run/docker.sock", + "-e", f"GITEA_RUNNER_REGISTRATION_TOKEN={registration_token}", + "-e", f"GITEA_INSTANCE_URL={instance_url}", + "-e", f"GITEA_RUNNER_NAME={runner_name}", + ] + + # Добавляем метки, если они указаны + if runner_labels: + command.extend(["-e", f"GITEA_RUNNER_LABELS={runner_labels}"]) + + command.append("gitea/act_runner:latest") + + # Преобразуем команду в строку и выполняем + cmd_str = ' '.join(command) + logging.info(f"Запуск команды: {cmd_str}") + + exit_code = os.system(cmd_str) + if exit_code == 0: + logging.info("Исполнитель успешно запущен.") + else: + logging.error(f"Ошибка при запуске исполнителя контейнера: Код ошибки {exit_code}") + + +if __name__ == "__main__": + runner_name = input("Введите имя исполнителя: ") + + # Запрашиваем URL, используя значение по умолчанию + instance_url_input = input("Введите URL адрес (по умолчанию https://codes.zhs.one): ") + instance_url = instance_url_input.strip() or "https://codes.zhs.one" # Используем URL по умолчанию, если ввод пустой + instance_url = ensure_https(instance_url) # Убедимся, что URL содержит https + + access_token = input("Введите секретный ключ: ") + runner_labels = input("Введите метки, разделенные запятыми (оставьте пустым, если нет меток): ") + + run_docker_runner(access_token, instance_url, runner_name, runner_labels) \ No newline at end of file