python在容器内克隆拉取git私有仓库

这篇具有很好参考价值的文章主要介绍了python在容器内克隆拉取git私有仓库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

目前有个python应用需要在容器镜像内拉取git私有仓库的代码,一开始的想法是用GitPython,折腾一番ssh私钥和known_hosts问题后,发现还是在镜像中封装个git最省事,然后用subprocess调用系统命令,镜像体积也没有想象中增加特别多。

准备ssh私钥和known_hosts文件

应用内通过repo的ssh url克隆和拉取仓库,所以ssh私钥和known_hosts要封装到镜像中。

  1. 生成ssh密钥文件。一般来说提示输入直接回车即可。生成的$HOME/.ssh/id_ed25519为私钥文件,是需要拷贝到镜像中的。$HOME/.ssh/id_ed25519.pub为公钥文件,文件内容需要添加到远程仓库的ssh密钥配置中。
ssh-keygen -t ed25519
  1. 准备known_hosts文件,文件内容可以从其它主机拷贝一份。其实ssh密钥文件也可以从其它主机拷贝,只要对应的公钥在git远程仓库的ssh配置中即可。known_hosts文件内容示例。
gitee.com ssh-ed25519 AxxxxxxxxxxxxxxxxxxxxN

在项目目录中创建一个名为.ssh的目录,然后把id_ed25519known_hosts文件拷贝到这个目录下,并修改文件权限为600。这个目录待会需要封装到镜像中。

chmod 600 id_ed25519 known_hosts

编写python代码

这里只是个demo,拉取私有仓库的代码到本地,然后拷贝出需要的目录或文件。注意代码里面用的都是容器内路径。

import subprocess
import os
import shutil

repo_url = "git@gitee.com:zhangsan/scout.git"
repo_dir = "/tmp/scout"

def repo_clone():
    cmd = f"git clone --depth=1 --single-branch {repo_url} {repo_dir}"
    if os.path.exists(repo_dir):
        print(f"{repo_dir} has exist")
        return
    runcmd(cmd)

def repo_pull():
    cmd = f"cd {repo_dir};git pull"
    runcmd(cmd)

    if not os.path.exists(f"{repo_dir}/prod"):
        print(f"{repo_dir}/prod is not exist")
        return
    dest_path = "/home/zhangsan/app/prod"
    if not os.path.exists(dest_path):
        os.makedirs(dest_path)
    shutil.copytree(f"{repo_dir}/prod", dest_path, dirs_exist_ok=True)

def runcmd(command):
    ret = subprocess.run(
        command, 
        shell=True,
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,
        encoding="utf-8",
        timeout=10,
        )
    
    if ret.returncode == 0:
        print("success")
        print(ret.stdout)
    else:
        print(f"fail code: {ret.returncode}")
        print(ret.stdout)

if __name__ == "__main__":
    repo_clone()
    repo_pull()

Dockerfile

目录层级如下

.
├── app
│   └── demo.py
├── Dockerfile
└── .ssh
    ├── id_ed25519
    └── known_hosts

编写Dockerfile文件

FROM python:3.8-alpine
# 1. 修改apline镜像源
# 2. 安装git和ssh客户端并删除apk缓存
# 3. 创建普通用户及其用户组
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
        && apk add --no-cache git openssh \
        && rm -rf /tmp/* /root/.cache /var/cache/apk/* \
        && addgroup -g 1010 zhangsan \
        && adduser -s /bin/sh -G zhangsan -u 10101 -h /home/zhangsan zhangsan -D

# 将相关文件添加到镜像中
ADD --chown=zhangsan:zhangsan .ssh /home/zhangsan/.ssh
ADD --chown=zhangsan:zhangsan app /home/zhangsan/app

# 指定运行用户, 工作目录和启动命令
USER zhangsan
WORKDIR /home/zhangsan/app
CMD python3 demo.py

打包docker镜像

docker build -t pygit:0.0.1 .

测试,创建一个临时容器

docker run -it --rm --name pygit pygit:0.0.1 sh

在测试容器内测试能否正常执行文章来源地址https://www.toymoban.com/news/detail-772330.html

python3 demo.py

到了这里,关于python在容器内克隆拉取git私有仓库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git管理神器SourceTree使用教程详解(连接远程仓库,克隆,拉取,提交,推送,新建/切换/合并分支,冲突解决,提交PR)

    俗话说的好工欲善其事必先利其器,Git分布式版本控制系统是我们日常开发中不可或缺的。目前市面上比较流行的Git可视化管理工具有SourceTree、Github Desktop、TortoiseGit,综合网上的一些文章分析和自己的日常开发实践心得个人比较推荐开发者使用SourceTree,因为SourceTree同时支持

    2024年02月03日
    浏览(163)
  • 如何使用git从github拉取自己的私有仓库(Token方式、本地秘钥方式)

    创建TOKEN 在GitHub个人主页,点击右上角头像,选择“Setting” 选择“Developer settings” 选择“Personal access tokens”下的“Tokens (classic)” 点击“Generate new token”下的“Generate new token(classic)” 输入内容和勾选选项,点击最下方“Generate token”按钮 复制一下这个token 之后就可以使用这

    2024年02月03日
    浏览(46)
  • 青龙面板教程(二):拉取私有仓库

    一.前言 青龙面板平时一般拉的都是公开仓库,可以直接命令拉取即可,但有时我们需要拉取自身的私有仓库,则需要进行仓库账号配置操作。 二.正文 青龙面板使用git工具来进行拉库操作,按照以下步骤即可完成私有仓库的账号配置。 1.进入青龙面板容器会话终端,宝塔面

    2024年02月12日
    浏览(69)
  • Jenkins 拉取 GitHub 私有仓库失败问题

    添加仓库的时候提示 stderr: fatal: Cannot prompt because user interactivity has been disabled. 把在 GitHub账户设置中生成的个人访问令牌填到地址里   

    2024年02月15日
    浏览(30)
  • K8s拉取Harbor私有仓库镜像

    提示:需要先部署Harbor私有镜像库。 insecure-registries对应可信任的镜像服务地址,如果有多个地址,还可以用“,”隔开,配置多个。 提示:每个k8s节点都需要配置,完成之后需要重启docker服务。 选择需要的命名空间,创建密文。 如果没有密文,后面的配置,都会明文数据

    2024年02月16日
    浏览(35)
  • Docker -- 镜像仓库(搭建私有镜像仓库、向镜像仓库推送镜像、从镜像仓库拉取镜像)

    搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。 官网地址 Docker 官方的 Docker Registry 是一个基础版本的 Docker 镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。 搭建方式比较简单,命令如下: 命令中挂载了一个数据卷 registry-data 到容器内的 /var/lib/regist

    2024年02月04日
    浏览(67)
  • github拉取自己的私有仓库(Token方式、本地秘钥方式)

    日常开发和学习过程中,经常碰到需要从GitHub或者其他类似网站,拉取私有仓代码的需求。本文将总结常用的两种方式,Token方式和本地秘钥方式,方便后续查阅和优化。 一、HTTPS的Token方式 (1)在GitHub个人主页,点击右上角头像,选择“Setting” (2)拉到最下面,选择“

    2024年02月12日
    浏览(28)
  • docker容器:本地私有仓库、harbor私有仓库部署与管理

    目录 一、本地私有仓库 1、本地私有仓库简介 2、搭建本地私有仓库 3、容器重启策略介绍 二、harbor私有仓库部署与管理 1、什么是harbor 2、Harbor的特性 3、Harbor的构成 4、harbor部署及配置 ①部署docker-compose ②部署Harbor服务 ③登录创建项目 ④登录仓库并上传镜像 5、客户端测试

    2024年02月04日
    浏览(42)
  • Git克隆仓库代码至本地

    目录 1、本地新建文件夹: 2、文件夹右击,点击:Git Bash Here 3、本地仓库初始化,输入:git init 4、复制仓库代码地址 5、代码克隆,输入:git clone + 复制的地址 6、打开文件夹,克隆成功                

    2024年02月11日
    浏览(37)
  • 容器编排学习(二)镜像制作和私有仓库介绍

    commit的局限 很容易制作简单的镜像,但碰到复杂的情况就十分不方便例如碰到下面的情况 需要设置默认的启动命令 需要设置环境变量 需要指定镜像开放某些特定的端口 Dockerfile就是解决这些问题的方法 Dockerfile是一种更强大的镜像制作方式 编写类似脚本的 Dockerfile 文件,通

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包