我要完成的任务是在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
答案 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