我正在构建一个项目,该项目需要对私有python存储库的某些依赖。此仓库内部有一个子模块,该子模块还指向私有仓库。我可以使用ssh密钥在机器上获取它,这在容器内部并不方便。
在我的dockerfile中,我阻止了此步骤:
RUN pip3 install wheel \
&& pip3 wheel git+https://${GITHUB_TOKEN}@github.com/owner/repo.git@master \
--wheel-dir=/svc/wheels
它可以毫无问题地获取存储库,但不能处理子模块。我猜pip解析了URL,并且没有通过最初传输的令牌。
我真的不知道如何解决该问题。我可以在本地存放该文件夹并复制它,或者设置一个在构建期间要访问的私有pip存储库(如果可能),或者在容器内使用ssh键(听起来像是对我来说很糟糕的方法)。
是否有任何“标准方法”?如果没有,您会提出什么建议?
EDIT1:这似乎是一个git问题,因为git clone --recursive
都不起作用
回答:我首先需要按照建议使用netrc,并在我的子模块声明中发现了一个问题。它是使用ssh设置的。 url = git@github.com:
代替url = https://github.com/
。感谢您花费时间和精力进行测试。我会接受larsks
的回答,因为他指导我这么做了
答案 0 :(得分:1)
您应该能够将其配置为${GITHUB_TOKEN)
文件,而不是像在命令行中那样通过.netrc
进行配置。 in this answer。
您的Dockerfile
将包含以下内容:
RUN echo machine github.com login ${GITHUB_TOKEN} > ~/.netrc
RUN pip3 install wheel \
&& pip3 wheel git+https://github.com/owner/repo.git@master \
--wheel-dir=/svc/wheels
答案 1 :(得分:0)
在=ArrayFormula(Magento!A2:A)
之前的dockerfile
中使用以下命令
RUN pip install ...
这将用RUN git config --global url."https://${GITHUB_TOKEN}@github".insteadOf https://github
替换https://github
的出现,即使在执行https://${GITHUB_TOKEN}@github
命令时在子模块级别。
注意:在父存储库中,子模块url(在git
中定义)应设置为.gitmodules
,而不是https://github
。