使用CI / CD管道在Docker文件中克隆私有git repo

时间:2019-08-19 09:55:03

标签: git docker continuous-integration gitlab dockerfile

我要完成的任务是在CI / CD管道中运行作业时在Dockerfile中安装我的私有git repo。

本地环境:我有一个Dockerfile,它能够构建我的映像,该映像包括克隆私人存储库而没有任何问题。它不要求任何ssh密钥,用户,密码等。

CI / CD Env :由于git clone问题,相同的Dockerfile无法在CI / CD管道上构建。在构建相同的Docker映像时,抛出以下异常-

Running command git clone -q https://private-url/project/repo.git /tmp/pip-req-build-t2xlnbs6
ERROR: Command errored out with exit status 128: git clone -q https://private-url/project/repo.git /tmp/pip-req-build-t2xlnbs6 Check the logs for full command output.  

我尝试了Web上所有可能的解决方案,例如将ssh-key存储在适当的位置,各种docker映像等,但是它们都不起作用。我还分享了我的Dockerfile供参考,如果有人可以提出任何解决方案,那将是很大的帮助。

FROM puckel/docker-airflow:1.10.1

ARG SSH_PRIVATE_KEY

USER root
RUN apt-get update && apt-get install -y git

RUN mkdir -p /root/.ssh
RUN cp id_rsa /root/.ssh/id_rsa (I have this file in my repo)
RUN chmod 600 /root/.ssh/id_rsa

#RUN mkdir /root/.ssh/
#RUN echo "${SSH_PRIVATE_KEY}" > /root/.ssh/id_rsa.pub
#RUN chmod 600 /root/.ssh/id_rsa.pub

COPY ingest_client.py .
COPY requirements.txt .

RUN pip install git+https://private-url/project/repo.git
RUN pip install -r requirements.txt

2 个答案:

答案 0 :(得分:0)

您应将git url更改为使用ssh而不是https,因为仅ssh克隆使用私钥ssh密钥

RUN pip install git+ssh://git@private-url/project/repo.git

答案 1 :(得分:0)

为了您的安全,您不应将密钥保存在 dockerfile 中。
Don’t leak your Docker image’s build secrets

您可以将 ssh 密钥添加到 CI 容器中并挂载到 docker build。

下面是 CI yaml 文件

build_docker:
  stage: build
  image: docker:latest
  variables:
    DOCKER_HOST: tcp://docker:2375
    # This instructs Docker not to start over TLS.
    DOCKER_TLS_CERTDIR: ""

  before_script:
    - apk add --no-cache curl jq python3 py3-pip git bind-tools openssh-client
    - echo $DOCKERPASS | docker login --username $DOCKERUSER --password-stdin
    - mkdir -p -m 0700 ~/.ssh
    - ssh-keyscan private-url >> ~/.ssh/known_hosts 
    - chmod 600 $SSH_KEY

  services:
    - docker:dind

  script:
    - export DOCKER_BUILDKIT=1
    - eval $(ssh-agent)
    - ssh-add $SSH_KEY
    - docker build -t tag_name  --ssh default=$SSH_AUTH_SOCK .

下面是dockerfile

FROM puckel/docker-airflow:1.10.1

ARG SSH_PRIVATE_KEY

USER root
RUN apt-get update && apt-get install -y git openssh-client


RUN ssh-keyscan private-url >> ~/.ssh/known_hosts

COPY ingest_client.py .
COPY requirements.txt .

RUN --mount=type=ssh pip install git+ssh://private-url/project/repo.git
RUN pip install -r requirements.txt

查看图片https://feiyang233.club/img/vm/23.png