Openshift:如何从私有仓库安装Python模块?
我想在OpenShift上安装Python包,但这些包存放在我自己的私有仓库里,托管在Bitbucket上。
我该如何为OpenShift创建一个SSH密钥,并且在安装包时让OpenShift使用这个密钥?(在Bitbucket上添加相应的公钥作为部署密钥之后)
我尝试过的:
我使用了ssh-keygen
命令在~/.openshift_ssh/
目录下创建了一个密钥。密钥确实创建了,但我不确定它是否被使用。
我还尝试把公钥添加到<jenkins_dir>/app-root/data/.ssh/jenkins_id_rsa.pub
,但结果总是一样。在Jenkins构建作业的控制台输出中:
Doing git clone from ssh://git@bitbucket.org/jpimentel/zed.git to /tmp/easy_install-FpEKam/zed.git
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
有没有什么办法可以解决这个问题?
2 个回答
如果你想要部署自己写的Python模块,推荐的方法是在应用程序的源代码根目录下创建一个libs文件夹,然后把这些模块放到你的应用程序的git仓库里。OpenShift会自动识别并使用你的模块。
目前,OpenShift并没有提供一个简单的方法来解决这个问题。我建议开发者去看看 https://gondor.io/support/dependencies/,那里有一个有效的解决方案。
不过,我最终找到了一种可以接受的(至少对我来说是这样)解决办法,这个办法适用于可扩展和不可扩展的应用,步骤如下:
在你的代码库里创建一个 deploy/ 目录。
把你的私有部署密钥的副本放到这个目录里。
创建一个名为 deploy/wrapper.sh 的 bash 脚本,这个脚本会用提供的密钥运行 ssh:
#!/bin/sh ssh -o StrictHostKeyChecking=no -i $OPENSHIFT_REPO_DIR/deploy/id_deploy $@
注意要加上一个选项来禁用主机密钥检查;如果不加这个选项,克隆操作会失败。
在构建钩子中安装依赖(
.openshift/action_hooks/build
)。在我的情况下,我添加了类似这样的内容:echo "Cloning private repo..." source $VIRTUAL_ENV/bin/activate GIT_SSH=$OPENSHIFT_REPO_DIR/deploy/wrapper.sh pip install git+ssh://git@bitbucket.org/team/reponame.git#egg=reponame
把所有的更改提交并推送到 OpenShift。
就这样,成功了!