如何运行或部署具有git依赖关系的应用程序到私有仓库

时间:2014-11-12 09:30:40

标签: google-app-engine dart dart-pub

我的应用程序与私有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

我想向ADD添加Dockerfile指令是一种可行的解决方法 需要将repo签出到本地目录以使其正常工作。

我试过了:

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 个答案:

答案 0 :(得分:4)

更新2

我之前的解决方案仍然非常不方便,因为我必须在每次重新启动应用程序之前办理登机手续。

在很大的支持下,我找到了一个更方便的解决方案。 而不是符号链接我挂载目录。有关详细信息,请参阅https://superuser.com/questions/842642。 我不知道这是否以及如何在其他oSes上工作(Win,OX X,...)

我将../my_package挂载到docker/my_package(而不是符号链接)并使用此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是一个更方便的解决方案,但它只是提供了已签出包的git-daemon目录。
我所要做的就是根据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作为部署密钥。

答案 1 :(得分:0)

道歉,将此作为答案添加但如果没有更多声誉则无法发表评论:

如果您希望修复此问题,请在google-cloud-sdk问题93上投票:
https://code.google.com/p/google-cloud-sdk/issues/detail?id=93