我们有一个工具需要克隆几个Git存储库来聚合文档数据。我们希望将该工具放在Docker容器中,以便在本地和使用Jenkins轻松地运行它,并实现可复制性。
Git存储库托管在专用服务器上,需要使用SSH密钥进行身份验证。因此,Docker容器必须以某种方式获得对运行容器的用户的SSH键的访问权。
我们有一个约束列表:
根
身份运行)将主机的SSH密钥注入Docker计算机您可以使用以下内容:
echo "git-user:x:$(id -u):$(id -g):Git User:/tmp:/bin/bash" > /tmp/fake_passwd # See below why to use this
docker run \
-u $(id -u):$(id -g) \
-w /tmp \
-v $HOME/.ssh:/path/to/.ssh \
-v /tmp/fake_passwd:/etc/passwd \
--entrypoint sh \
-it \
alpine/git
# commands in the container:
$ export GIT_SSH_COMMAND='ssh -i /path/to/.ssh/id_rsa -o "StrictHostKeyChecking=no"'
$ git clone [path to git repo]
这将确保容器以与主机用户相同的UID/GID运行,从而能够在不更改其权限或使用root权限的情况下读取密钥。详细说明:
-U$(id-u):$(id-g)
将容器用户设置为与主机用户匹配-w/tmp
确保我们在可以写入的目录中工作(我们还可以挂载具有读/写权限的卷,或者用这样的目录构建映像)-v$home/.SSH:/path/to/.SSH
从主机挂载本地用户SSH密钥--entrypoint sh
和-it
特定于Alpine/Git
要有交互式shell会话,您的映像可能不需要它Cloning into 'myrepo'...
No user exists for uid 1000
fatal: Could not read from remote repository.
git-user:x:1000:1000:Git User:/tmp:/bin/bash
git-user
存在UID 1000和GID 1000/tmp
(它是可选的,但此目录是可写的,避免Git Clone
的警告)通过设置/tmp
(或在映像构建期间创建的另一个目录),我们可以确保git-user
有一个可写的主目录,这将防止git clone
发出警告,说它无法创建.ssh
目录
但是,如果您打算使用容器运行不同的任务,这可能会产生其他副作用。
git_ssh_command='ssh-i/path/to/.ssh/id_rsa'
将确保git clone
正在使用我们的密钥,但这也可以使用ssh-agent来完成-请参阅https://serverfault.com/questions/447028/non-interactive-git-clone-ssh-fingert-prompt
在示例中,我使用-o“strithostkeychecking=no”
但它可能不安全,另一个解决方案是在带有git repo服务器主机密钥的容器中挂载一个已知的主机文件,并使用-o“userknownhostsfile=/path/to/knownhostfile”
本文向大家介绍Git 克隆SVN存储库,包括了Git 克隆SVN存储库的使用技巧和注意事项,需要的朋友参考一下 示例 您需要使用以下命令创建存储库的新本地副本 git svn clone SVN_REPO_ROOT_URL [DEST_FOLDER_PATH] -T TRUNK_REPO_PATH -t TAGS_REPO_PATH -b BRANCHES_REPO_PATH 如果您的SVN储存库
我有一个Dockerfile文件,试图将一个web应用程序打包并部署到一个容器中。在Docker映像构建期间,app的代码从git存储库中获取。以下是Dockerfile快照: 我希望 docker 不要缓存 RUN git 克隆的步骤 -- 以便存储库上正在进行的更新可以反映在 Docker 映像构建中。有可能做到这一点吗?
问题内容: 我真的很坚持这一点。我在哈德森(Hudson)创建了一个工作,并以与其他工作相同的方式进行了配置。我的项目和构建交付物存在于Git中。但是每次我尝试构建它时,都会出现以下错误: 在其他线程中,有人建议通过以jenkins用户身份登录来创建不同的私钥-公钥对,但我什至不知道如何在终端中执行此操作。我的意思是我知道如何使用“ sudo”命令以不同的用户身份登录,但我不认为有人建议使用sud
到现在为止,读者已经零略到Git的灵活性以及健壮性。Git可以通过重置随意撤销提交,可以通过变基操作更改历史,可以随意重组提交,还可以通过reflog的记录纠正错误的操作。但是再健壮的版本库设计,也抵挡不了存储介质的崩溃。还有一点就是不要忘了Git版本库是躲在工作区根目录下的.git目录中,如果忘了这一点直接删除工作区,就会把版本库也同时删掉,悲剧就此发生。 “不要把鸡蛋装在一个篮子里”,是颠扑不
问题内容: 我已经通过Windows 2008 32位上的Git / SSH在Jenkins中成功克隆了Git存储库。当我尝试在64位Windows 2008上执行相同操作时, 控制台输出 页面卡在此处: 当我停止构建时(在卡住了几分钟之后),我得到了其余的错误消息: 我可以通过两台机器上的Jenkins 通过Git只读URL克隆存储库 我可以从两台计算机上的命令行通过Git / SSH URL进
我正在尝试连接到我的VPS上托管的gerrit。我正在使用Git Bash for windows。我在GitBash中使用SSH-keygen生成了SSH密钥,并在gerrit服务器上添加了密钥。当我运行ssh时-p 29418 但当我通过运行以下命令克隆存储库时 我在Git Bash终端中看到以下错误 我无法理解正在发生什么以及如何在我的机器中成功克隆我的项目。有谁能在这件事上帮助我吗? 更新