[英]Clone private git repo in Docker file using CI/CD pipeline
我想要完成的任务是在 CI/CD 管道中运行作业时在我的 Dockerfile 中安装我的私有 git 存储库。
本地环境:我有一个 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.
我已经尝试了所有可能的网络解决方案,例如将 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
您应该更改 git url 以使用 ssh 而不是 https 因为只有 ssh 克隆使用私有 ssh 密钥
RUN pip install git+ssh://git@private-url/project/repo.git
为了您的安全,您不应将密钥保存在 dockerfile 中。
不要泄露你的 Docker 镜像的构建秘密
您可以将 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.