繁体   English   中英

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

[英]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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM