国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python在容器內(nèi)克隆拉取git私有倉(cāng)庫(kù)

這篇具有很好參考價(jià)值的文章主要介紹了python在容器內(nèi)克隆拉取git私有倉(cāng)庫(kù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

目前有個(gè)python應(yīng)用需要在容器鏡像內(nèi)拉取git私有倉(cāng)庫(kù)的代碼,一開始的想法是用GitPython,折騰一番ssh私鑰和known_hosts問(wèn)題后,發(fā)現(xiàn)還是在鏡像中封裝個(gè)git最省事,然后用subprocess調(diào)用系統(tǒng)命令,鏡像體積也沒有想象中增加特別多。

準(zhǔn)備ssh私鑰和known_hosts文件

應(yīng)用內(nèi)通過(guò)repo的ssh url克隆和拉取倉(cāng)庫(kù),所以ssh私鑰和known_hosts要封裝到鏡像中。

  1. 生成ssh密鑰文件。一般來(lái)說(shuō)提示輸入直接回車即可。生成的$HOME/.ssh/id_ed25519為私鑰文件,是需要拷貝到鏡像中的。$HOME/.ssh/id_ed25519.pub為公鑰文件,文件內(nèi)容需要添加到遠(yuǎn)程倉(cāng)庫(kù)的ssh密鑰配置中。
ssh-keygen -t ed25519
  1. 準(zhǔn)備known_hosts文件,文件內(nèi)容可以從其它主機(jī)拷貝一份。其實(shí)ssh密鑰文件也可以從其它主機(jī)拷貝,只要對(duì)應(yīng)的公鑰在git遠(yuǎn)程倉(cāng)庫(kù)的ssh配置中即可。known_hosts文件內(nèi)容示例。
gitee.com ssh-ed25519 AxxxxxxxxxxxxxxxxxxxxN

在項(xiàng)目目錄中創(chuàng)建一個(gè)名為.ssh的目錄,然后把id_ed25519known_hosts文件拷貝到這個(gè)目錄下,并修改文件權(quán)限為600。這個(gè)目錄待會(huì)需要封裝到鏡像中。

chmod 600 id_ed25519 known_hosts

編寫python代碼

這里只是個(gè)demo,拉取私有倉(cāng)庫(kù)的代碼到本地,然后拷貝出需要的目錄或文件。注意代碼里面用的都是容器內(nèi)路徑。

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

目錄層級(jí)如下

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

編寫Dockerfile文件

FROM python:3.8-alpine
# 1. 修改apline鏡像源
# 2. 安裝git和ssh客戶端并刪除apk緩存
# 3. 創(chuàng)建普通用戶及其用戶組
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

# 將相關(guān)文件添加到鏡像中
ADD --chown=zhangsan:zhangsan .ssh /home/zhangsan/.ssh
ADD --chown=zhangsan:zhangsan app /home/zhangsan/app

# 指定運(yùn)行用戶, 工作目錄和啟動(dòng)命令
USER zhangsan
WORKDIR /home/zhangsan/app
CMD python3 demo.py

打包docker鏡像

docker build -t pygit:0.0.1 .

測(cè)試,創(chuàng)建一個(gè)臨時(shí)容器

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

在測(cè)試容器內(nèi)測(cè)試能否正常執(zhí)行文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-772330.html

python3 demo.py

到了這里,關(guān)于python在容器內(nèi)克隆拉取git私有倉(cāng)庫(kù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Git管理神器SourceTree使用教程詳解(連接遠(yuǎn)程倉(cāng)庫(kù),克隆,拉取,提交,推送,新建/切換/合并分支,沖突解決,提交PR)

    Git管理神器SourceTree使用教程詳解(連接遠(yuǎn)程倉(cāng)庫(kù),克隆,拉取,提交,推送,新建/切換/合并分支,沖突解決,提交PR)

    俗話說(shuō)的好工欲善其事必先利其器,Git分布式版本控制系統(tǒng)是我們?nèi)粘i_發(fā)中不可或缺的。目前市面上比較流行的Git可視化管理工具有SourceTree、Github Desktop、TortoiseGit,綜合網(wǎng)上的一些文章分析和自己的日常開發(fā)實(shí)踐心得個(gè)人比較推薦開發(fā)者使用SourceTree,因?yàn)镾ourceTree同時(shí)支持

    2024年02月03日
    瀏覽(101)
  • 如何使用git從github拉取自己的私有倉(cāng)庫(kù)(Token方式、本地秘鑰方式)

    如何使用git從github拉取自己的私有倉(cāng)庫(kù)(Token方式、本地秘鑰方式)

    創(chuàng)建TOKEN 在GitHub個(gè)人主頁(yè),點(diǎn)擊右上角頭像,選擇“Setting” 選擇“Developer settings” 選擇“Personal access tokens”下的“Tokens (classic)” 點(diǎn)擊“Generate new token”下的“Generate new token(classic)” 輸入內(nèi)容和勾選選項(xiàng),點(diǎn)擊最下方“Generate token”按鈕 復(fù)制一下這個(gè)token 之后就可以使用這

    2024年02月03日
    瀏覽(185)
  • 青龍面板教程(二):拉取私有倉(cāng)庫(kù)

    青龍面板教程(二):拉取私有倉(cāng)庫(kù)

    一.前言 青龍面板平時(shí)一般拉的都是公開倉(cāng)庫(kù),可以直接命令拉取即可,但有時(shí)我們需要拉取自身的私有倉(cāng)庫(kù),則需要進(jìn)行倉(cāng)庫(kù)賬號(hào)配置操作。 二.正文 青龍面板使用git工具來(lái)進(jìn)行拉庫(kù)操作,按照以下步驟即可完成私有倉(cāng)庫(kù)的賬號(hào)配置。 1.進(jìn)入青龍面板容器會(huì)話終端,寶塔面

    2024年02月12日
    瀏覽(78)
  • Jenkins 拉取 GitHub 私有倉(cāng)庫(kù)失敗問(wèn)題

    Jenkins 拉取 GitHub 私有倉(cāng)庫(kù)失敗問(wèn)題

    添加倉(cāng)庫(kù)的時(shí)候提示 stderr: fatal: Cannot prompt because user interactivity has been disabled. 把在 GitHub賬戶設(shè)置中生成的個(gè)人訪問(wèn)令牌填到地址里? ?

    2024年02月15日
    瀏覽(23)
  • K8s拉取Harbor私有倉(cāng)庫(kù)鏡像

    K8s拉取Harbor私有倉(cāng)庫(kù)鏡像

    提示:需要先部署Harbor私有鏡像庫(kù)。 insecure-registries對(duì)應(yīng)可信任的鏡像服務(wù)地址,如果有多個(gè)地址,還可以用“,”隔開,配置多個(gè)。 提示:每個(gè)k8s節(jié)點(diǎn)都需要配置,完成之后需要重啟docker服務(wù)。 選擇需要的命名空間,創(chuàng)建密文。 如果沒有密文,后面的配置,都會(huì)明文數(shù)據(jù)

    2024年02月16日
    瀏覽(24)
  • Docker -- 鏡像倉(cāng)庫(kù)(搭建私有鏡像倉(cāng)庫(kù)、向鏡像倉(cāng)庫(kù)推送鏡像、從鏡像倉(cāng)庫(kù)拉取鏡像)

    Docker -- 鏡像倉(cāng)庫(kù)(搭建私有鏡像倉(cāng)庫(kù)、向鏡像倉(cāng)庫(kù)推送鏡像、從鏡像倉(cāng)庫(kù)拉取鏡像)

    搭建鏡像倉(cāng)庫(kù)可以基于Docker官方提供的DockerRegistry來(lái)實(shí)現(xiàn)。 官網(wǎng)地址 Docker 官方的 Docker Registry 是一個(gè)基礎(chǔ)版本的 Docker 鏡像倉(cāng)庫(kù),具備倉(cāng)庫(kù)管理的完整功能,但是沒有圖形化界面。 搭建方式比較簡(jiǎn)單,命令如下: 命令中掛載了一個(gè)數(shù)據(jù)卷 registry-data 到容器內(nèi)的 /var/lib/regist

    2024年02月04日
    瀏覽(23)
  • github拉取自己的私有倉(cāng)庫(kù)(Token方式、本地秘鑰方式)

    github拉取自己的私有倉(cāng)庫(kù)(Token方式、本地秘鑰方式)

    日常開發(fā)和學(xué)習(xí)過(guò)程中,經(jīng)常碰到需要從GitHub或者其他類似網(wǎng)站,拉取私有倉(cāng)代碼的需求。本文將總結(jié)常用的兩種方式,Token方式和本地秘鑰方式,方便后續(xù)查閱和優(yōu)化。 一、HTTPS的Token方式 (1)在GitHub個(gè)人主頁(yè),點(diǎn)擊右上角頭像,選擇“Setting” (2)拉到最下面,選擇“

    2024年02月12日
    瀏覽(40)
  • docker容器:本地私有倉(cāng)庫(kù)、harbor私有倉(cāng)庫(kù)部署與管理

    docker容器:本地私有倉(cāng)庫(kù)、harbor私有倉(cāng)庫(kù)部署與管理

    目錄 一、本地私有倉(cāng)庫(kù) 1、本地私有倉(cāng)庫(kù)簡(jiǎn)介 2、搭建本地私有倉(cāng)庫(kù) 3、容器重啟策略介紹 二、harbor私有倉(cāng)庫(kù)部署與管理 1、什么是harbor 2、Harbor的特性 3、Harbor的構(gòu)成 4、harbor部署及配置 ①部署docker-compose ②部署Harbor服務(wù) ③登錄創(chuàng)建項(xiàng)目 ④登錄倉(cāng)庫(kù)并上傳鏡像 5、客戶端測(cè)試

    2024年02月04日
    瀏覽(38)
  • Git克隆倉(cāng)庫(kù)代碼至本地

    Git克隆倉(cāng)庫(kù)代碼至本地

    目錄 1、本地新建文件夾: 2、文件夾右擊,點(diǎn)擊:Git Bash Here 3、本地倉(cāng)庫(kù)初始化,輸入:git init 4、復(fù)制倉(cāng)庫(kù)代碼地址 5、代碼克隆,輸入:git clone + 復(fù)制的地址 6、打開文件夾,克隆成功 ? ? ? ? ? ? ? ?

    2024年02月11日
    瀏覽(18)
  • 容器編排學(xué)習(xí)(二)鏡像制作和私有倉(cāng)庫(kù)介紹

    容器編排學(xué)習(xí)(二)鏡像制作和私有倉(cāng)庫(kù)介紹

    commit的局限 很容易制作簡(jiǎn)單的鏡像,但碰到復(fù)雜的情況就十分不方便例如碰到下面的情況 需要設(shè)置默認(rèn)的啟動(dòng)命令 需要設(shè)置環(huán)境變量 需要指定鏡像開放某些特定的端口 Dockerfile就是解決這些問(wèn)題的方法 Dockerfile是一種更強(qiáng)大的鏡像制作方式 編寫類似腳本的 Dockerfile 文件,通

    2024年02月09日
    瀏覽(51)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包