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 = "zhs-code-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://code.zhs.one): ") instance_url = instance_url_input.strip() or "https://code.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)