gpt4 book ai didi

google-app-engine - 如何运行或部署具有 git 依赖项的应用程序到私有(private)存储库

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:29 25 4
gpt4 key购买 nike

我的应用程序具有对私有(private) BitBucket 存储库的 Git 依赖性。

  my_package:
git:
url: git@bitbucket.org:myuser/mypackage.git

当我运行时

gcloud --verbosity debug preview app run app.yaml

我明白了

Resolving dependencies...
Git error. Command: git clone --mirror git@bitbucket.org:myuser/my_package.git /root/.pub-cache/git/cache/my_package-6fe77906161a7a9252973e29e39a4149b75f9a7e
error: cannot run ssh: No such file or directory
fatal: unable to fork

我想在 Dockerfile 中添加一条 ADD 指令是一个可行的解决方法。
当然,需要将 repo check out 到本地目录才能完成这项工作。

我试过:

FROM google/dart-runtime
ADD ../my_package ../my_package

https://docs.docker.com/reference/builder/#add

The <src> path must be inside the context of the build; you cannot ADD 
../something /something, because the first step of a docker build is to
send the context directory (and subdirectories) to the docker daemon.

看来我必须将 ..my_package 目录移动到 my_app 目录中。这不漂亮:-(

当我向 Dockerfile 添加虚假行时 run 失败,但如果我添加 ADD ... 指令,它似乎会被忽略完全。

最佳答案

更新2

我以前的解决方案还是很不方便,因为我每次都必须在重新启动应用程序之前检查。

在大力支持下,我找到了一个更方便的解决方案。我挂载目录而不是符号链接(symbolic link)。参见 https://superuser.com/questions/842642更多细节。我不知道这是否以及如何在其他操作系统(Win、OX X、...)上工作

我将 ../my_package 挂载到 docker/my_package(而不是符号链接(symbolic link))并使用此 Dockerfile:

FROM google/dart

WORKDIR /app
ENV DART_SDK /usr/lib/dart

ADD dart_run.sh /dart_runtime/

RUN chmod 755 /dart_runtime/dart_run.sh && \
chown root:root /dart_runtime/dart_run.sh

ADD pubspec.yaml /app/
ADD pubspec.lock /app/
ADD docker/my_package /my_package
RUN pub get
ADD . /app/
RUN pub get --offline

## Expose ports for debugger (5858), application traffic (8080)
## and the observatory (8181)
EXPOSE 8080 8181 5858

CMD []
ENTRYPOINT ["/dart_runtime/dart_run.sh"]

更新 1

事实证明,尽管 git-daemon 是一个更方便的解决方案,但它只提供 check out 包的 .git 目录。
我所要做的就是根据 https://www.dartlang.org/cloud/ 上的文档进行所有设置。并在 pubspec.yaml 中使用 git 依赖项到这个由 git-daemon 服务的 repo。

  my_package:
git:
url: git://192.168.2.96/my_package
ref: test

此 url 在本地工作时以及在 Docker 容器内工作时都有效。

原创

我可以使用这个 Dockerfile 运行我的应用

FROM google/dart

WORKDIR /app

RUN \
apt-get update && \
apt-get install -y openssh-client

ADD tool/bitbucket_deployment_key /root/.ssh/id_rsa

RUN \
mkdir -p /root/.ssh && \
echo "Host bitbucket.org" >> /root/.ssh/config && \
echo " StrictHostKeyChecking no" >> /root/.ssh/config && \
# ssh-keyscan -t rsa -H bitbucket.org,131.103.20.167 >> /root/.ssh/known_hosts && \
chmod 400 /root/.ssh/id_rsa && \
eval $(ssh-agent) && \
ssh-add /root/.ssh/id_rsa

RUN \
git clone git@bitbucket.org:myuser/my_package.git /my_package --branch test && \
rm /root/.ssh/id_rsa

#ENV DART_SDK /usr/lib/dart

ADD dart_run.sh /dart_runtime/

RUN chmod 755 /dart_runtime/dart_run.sh && \
chown root:root /dart_runtime/dart_run.sh

ADD pubspec.yaml /app/
ADD pubspec.lock /app/
RUN pub get
ADD . /app/
RUN pub get --offline

# Expose ports for debugger (5858), application traffic (8080)
# and the observatory (8181)
EXPOSE 8080 8181 5858

CMD []
ENTRYPOINT ["/dart_runtime/dart_run.sh"]

我使用没有密码的 ssh-keygen 创建了 id_rsa。这就是我在 git clone 命令后从图像中删除文件的原因。反正以后也不用了。

在我的 BitBucket 存储库中,我添加了 id_rsa.pub 作为部署 key 。

关于google-app-engine - 如何运行或部署具有 git 依赖项的应用程序到私有(private)存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26883460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com