Node.js 在package.json中使用私有git repo部署Google应用程序引擎
我对package.json中的私有Bitbucket repo有依赖关系Node.js 在package.json中使用私有git repo部署Google应用程序引擎,node.js,google-app-engine,npm,google-cloud-platform,google-cloud-build,Node.js,Google App Engine,Npm,Google Cloud Platform,Google Cloud Build,我对package.json中的私有Bitbucket repo有依赖关系 { "my-dependency": "git+ssh://git@bitbucket.org/something/my-dependency.git" } 我按照[1]和[2]中给出的说明创建了一个SSH密钥,并用kms加密 我创建了一个定制的cloudbuild.yaml,如下所示: # Decrypt the file containing the key steps: - name: 'gcr.io/
{
"my-dependency": "git+ssh://git@bitbucket.org/something/my-dependency.git"
}
我按照[1]和[2]中给出的说明创建了一个SSH密钥,并用kms加密
我创建了一个定制的cloudbuild.yaml
,如下所示:
# Decrypt the file containing the key
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args:
- kms
- decrypt
- --ciphertext-file=bitbucket_rsa.enc
- --plaintext-file=/root/.ssh/id_rsa
- --location=global
- --keyring=default
- --key=bitbucket-key
volumes:
- name: 'ssh'
path: /root/.ssh
# Set up git with key and domain
- name: 'gcr.io/cloud-builders/git'
entrypoint: 'bash'
args:
- '-c'
- |
chmod 600 /root/.ssh/id_rsa
cat <<EOF >/root/.ssh/config
Hostname bitbucket.org
IdentityFile /root/.ssh/id_rsa
EOF
mv known_hosts /root/.ssh/known_hosts
volumes:
- name: 'ssh'
path: /root/.ssh
# Install
- name: 'gcr.io/cloud-builders/yarn'
args: ['install']
volumes:
- name: 'ssh'
path: /root/.ssh
# Build
- name: "gcr.io/cloud-builders/yarn"
args: ["build"]
volumes:
- name: 'ssh'
path: /root/.ssh
# Deploy
- name: "gcr.io/cloud-builders/gcloud"
args: ["app", "deploy", "my-service.yaml"]
volumes:
- name: 'ssh'
path: /root/.ssh
谢谢你的帮助
参考资料:
[1]
[2] 每当出现
主机密钥验证失败
错误时,它很可能与您的已知\u主机
文件有关,这意味着bitbucket.org
的主机密钥不在您的已知\u主机文件中,因此客户端无法对其进行验证。尝试运行ssh keyscan-t rsa bitbucket.org>known_hosts
,然后运行cat known_hosts
,查看bitbucket.org主机密钥是否存在
如果答案为“否”,且输出为空,则可能是网络问题干扰了进程。按照本节中接受的答案进行故障排除
如果答案是肯定的,那么只缺少一个步骤,那就是将SSH密钥配置到Bitbucket中。进入“bitbucket设置”下的bitbucket.org,然后单击其中一个选项中的“SSH密钥”。添加一个密钥(以您决定的名称为准)并将运行cat~/.ssh/id_rsa.pub获得的输出粘贴到密钥部分
本质上,在其中一个线程中,我正在将私有存储库克隆到与我的应用程序根目录相同的文件夹中。这样,在package.json中,我可以简单地添加这一行依赖项:{“circular stringify”:“/circular stringify”}
,这将允许我像任何npm包一样require()
它
我意识到我应该保持Github链接的开放性,但是,我正在研究另一个例子,我很快就会在评论部分发布这个例子。同时,让我知道结果。因此显然不可能为
gcloud app deploy
步骤提供SSH密钥。因此使用
{
"my-dependency": "git+ssh://git@bitbucket.org/something/my-dependency.git"
}
不行
解决方法(如链接线程中@JKleinne所述)是克隆repo并从本地文件夹安装它:
{
"my-dependency": "lib/my-dependency"
}
我编写了一个小bash脚本,用于检查repo是否可以访问,以及克隆/拉取(如果可以):
GIT_PROJECT=$1
GIT_REPO=$2
NAME=${GIT_REPO}
REMOTE="git@bitbucket.org:${GIT_PROJECT}/${GIT_REPO}.git"
if [[ ! -d ./lib ]]
then
mkdir -p ./lib
fi
## Test if git repo is accessible
if ! git ls-remote --exit-code -h ${REMOTE}; then
echo "Unable to access git repo, skipping"
exit 0
fi
## Clone or pull
if [[ ! -d ./lib/${NAME} ]]
then
git clone ${REMOTE} ./lib/${NAME}
else
git -C ./lib/${NAME} pull
fi
然后我在预安装脚本中使用它:
"preinstall": "./get-internal-package.sh something my-dependency",
忘了提到添加
!.gcloudignore
中的节点\u modules/
,因此将所有模块发送到应用程序部署会产生一个无效\u参数:此部署的文件太多。此应用程序的新版本限制为10000个文件
非常感谢@JKleinne的支持。正如我在第一篇帖子中提到的,步骤2(计数从0开始)中的纱线安装
工作正常。在此安装中,SSH密钥可用。我还通过您建议的ssh keyscan
步骤验证了这一点。问题是在运行gcloud app deploy
时。我希望避免使用依赖项:{“我的依赖项”:“/mydependency”}
,因为在本地计算机上调用warn install
时,这需要一些额外的脚本,由于这个原因,当通过git+ssh
添加更多依赖项时,无法很好地扩展。嘿,不用担心,这实际上是我用来解决您遇到的同一问题的方法。克隆时它似乎工作得很好,但在依赖项中将其指定为git+ssh
将导致主机密钥验证错误
,这就是我使用上述方法的原因。无论如何,我建议也在Gitlab的论坛上创建一个帖子。肯定有一种方法可以解决这个问题,而不必执行弗兰肯斯坦的变通方法,那里的人肯定能够为您提供所需的支持。我仍将积极尝试找到解决方案,并将让您知道我的发现
"preinstall": "./get-internal-package.sh something my-dependency",