CMake Ninja Git Запросы пароля для самозаверяющего центра сертификации

Укороченная версия:

Я использую CMake и Ninja с внешней зависимостью в репозитории git, для которой требуется запрос пароля. (Исходный код должен быть защищен).

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

С Ninja он блокируется в:

-- Build files have been written to: 
/path/to/project/hello_cpp/build/sqlite3-download
[1/9] Creating directories for 'sqlite3-download'
Enter PEM pass phrase:

Мой вопрос:

Как заставить Ninja разрешить мне вводить пароль?

  • ниндзя 1.7.2
  • cmake 3.8.2
  • гит 2.13.2

Длинная версия

Ниже приведены шаги, которые я предпринял, и контекст вопроса.

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

Я также создал Hello CPP в качестве учебного упражнения для создания кросс-платформенного проекта C++ и настройки шаблона проекта. .

Мне удалось заставить работать внешние зависимости с помощью модуля DownloadProject CMake Крейга Скотта.

include(DownloadProject)  
download_project(PROJ sqlite3
  GIT_REPOSITORY  "https://github.com/dexata/sqlite3-cmake.git"
  GIT_TAG         master
)
add_subdirectory(${sqlite3_SOURCE_DIR} ${sqlite3_BINARY_DIR})
target_link_libraries(helloworld_lib_target sqlite3)
get_property(sqlite3_inc_dir TARGET sqlite3 PROPERTY INCLUDE_DIRECTORIES)

Я также написал следующий ответ на Как заставить git принимать самоподписанный сертификат?

Так что я довольно хорошо осведомлен о функциях безопасности самостоятельно размещенного git. У нас есть текущее ограничение, что наше единственное соединение — через https для доступа к нашему экземпляру git. Даже если мы разрешили доступ по ssh, у нас все еще есть политика безопасности, согласно которой закрытый ключ имеет пароль, и, следовательно, Ninja все равно должен разрешать интерактивные подсказки.

Как я сказал выше, это работает с Makefiles, но я пытаюсь заставить его работать для Ninja.

Ваша помощь приветствуется заранее.


person Josh Peak    schedule 04.07.2017    source источник


Ответы (1)


Вы по-прежнему можете использовать ssh с закрытыми ключами, у которых есть пароли. Используйте что-то вроде ssh-agent и ssh-add, чтобы ввести свой пароль только один раз для текущей оболочки (т.е. до того, как вы инициируете сборку), и тогда ваша сборка не будет запрашивать никаких паролей.

Если вы заблокированы при использовании https и вам нужно ввести пароль, вы можете попробовать добавить различные параметры USES_TERMINAL_... в свой вызов download_project(). Я думаю, что USES_TERMINAL_DOWNLOAD и USES_TERMINAL_UPDATE должны быть всем, что вам нужно. Эти параметры задокументированы в модуле ExternalProject и download_project() проходят через все параметры. он не распознает базовый вызов ExternalProject_Add(). В документации указано, что это дает Ninja доступ к терминалу, так что, возможно, вы потом получите возможность ввести пароль.

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

person Craig Scott    schedule 04.07.2017
comment
Удивительно, насколько хороший толчок RTFM может помочь. Спасибо. У нас есть разные протоколы безопасности для доступа разработчиков и машинного доступа. В противном случае, согласен, набирать пароли для КИ смысла нет. - person Josh Peak; 05.07.2017