CMake Ninja Git自签名证书颁发机构密码提示

时间:2017-07-04 01:47:07

标签: c++ git cmake ninja

短版本:

我在一个需要密码提示的git仓库中使用CMake和Ninja以及外部依赖。 (必须保护源代码)。

使用Makefile构建时,我可以使用密码提示,一切都会继续。

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允许我输入密码?

  • ninja 1.7.2
  • cmake 3.8.2
  • git 2.13.2

长版

以下是我采取的步骤和问题的背景。

我创建了SQLite3 CMake Library作为如何创作CMake库的学习练习。

我还创建了Hello CPP作为构建C ++项目跨平台和配置项目模板的学习练习。

我设法通过Craig Scott's DownloadProject CMake Module获取外部依赖项。

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)

我还撰写了以下How can I make git accept a self signed certificate?

的答案

所以我非常了解自托管git的安全功能。我们有当前约束,我们唯一的连接是通过https来访问我们的git实例。即使我们允许ssh访问,我们仍然拥有私钥具有密码的安全策略,因此Ninja仍然需要允许交互式提示。

就像我上面说的那样,它适用于Makefile,但我试图让它适用于Ninja

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您仍然可以将ssh与具有密码的私钥一起使用。使用ssh-agentssh-add之类的内容只需为当前shell输入一次密码(即在启动构建之前),然后您的构建将不会要求任何密码。

如果您无法使用https并需要输入密码,则可以尝试在调用USES_TERMINAL_...时添加各种download_project()选项。我认为USES_TERMINAL_DOWNLOADUSES_TERMINAL_UPDATE应该是你所需要的。这些选项记录在ExternalProject模块中,download_project()传递了它无法识别到ExternalProject_Add()的基础调用的所有选项。文档说明这使Ninja能够访问终端,因此您可能会有机会输入密码。

为每次构建输入密码很快就会变得令人厌烦,这使得自动化CI构建非常困难。我强烈建议您考虑SSH替代方案,它通常与CI系统很好地集成,并且对于日常开发来说更方便。