jenkins build/clone 如何将远程 git 存储库安装到它的 docker 容器中?
how can a jenkins build/clone a remote git repo which is mounted into it's docker container?
我有一个支持 Docker 个容器的私有 Synology NAS Cloud。
现在我计划一个私人构建和部署管道或类似的东西。
我完成的第一步:
- 在 Synology
上安装 Git 服务器
- 初始化一些 Repos
- 在我的 MacBook 上克隆它们
- 通过 ssh 通信(提交、推送、拉取)
--> 一切正常。
现在我已经使用 Jenkins 映像在 NAS 上启动了一个 Docker 容器。我希望 Jenkins 轮询我在 NAS 上的远程存储库(我在 MacBook 上克隆的相同存储库)。
我还将包含所有远程存储库的“/git”文件夹安装到 Jenkins Docker 容器中。
所以我想将存储库 URL 添加到 Jenkins 作业中:
file:///git/firstRepo
---> 但这不起作用:(
ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from file:///git/firstRepo
at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:817)
at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1084)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1115)
at hudson.scm.SCM.checkout(SCM.java:495)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1276)
at
hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild. java:560)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:485)
at hudson.model.Run.execute(Run.java:1735)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:405)
Caused by: hudson.plugins.git.GitException: Command "/usr/bin/git fetch --tags --progress file:///git/firstRepo +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout:
stderr: fatal: '/git/firstRepo' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1924)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1643)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access0(CliGitAPIImpl.java:71)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.execute(CliGitAPIImpl.java:352)
at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:815)
... 11 more
ERROR: Error fetching remote repo 'origin'
Finished: FAILURE
我测试了通过 docker shell 将 repo 克隆到 Jenkins 工作区
git clone file:///git/firstRepo
-> 有效。但是我是用 "root" 登录的。
所以我的问题是:
Jenkins 如何访问 git 文件夹?访问权限有问题吗?显然 Jenkins 不是 "root"。我是否必须 "chown" git 文件夹给我的 Jenkins 用户(我认为是 "admin")?
非常感谢!
首先,检查路径:通常,那些repos(用于推送)是裸repos,这意味着它们的路径应该是一个扩展名为.git的文件夹。
.../git/firstRepo.git
其次,通过简单的构建步骤尝试一个简单的 Jenkins Job(没有任何 SCM 设置)
id -a
ls -alrth /git
ls -alrth /git/firstRepo
ls -alrth /git/firstRepo.git
这将向您显示与这些路径关联的权限,并告诉您 Jenkins(作为 id -a
中显示的用户执行)是否有权访问该路径。
我有一个支持 Docker 个容器的私有 Synology NAS Cloud。 现在我计划一个私人构建和部署管道或类似的东西。
我完成的第一步:
- 在 Synology 上安装 Git 服务器
- 初始化一些 Repos
- 在我的 MacBook 上克隆它们
- 通过 ssh 通信(提交、推送、拉取)
--> 一切正常。
现在我已经使用 Jenkins 映像在 NAS 上启动了一个 Docker 容器。我希望 Jenkins 轮询我在 NAS 上的远程存储库(我在 MacBook 上克隆的相同存储库)。 我还将包含所有远程存储库的“/git”文件夹安装到 Jenkins Docker 容器中。
所以我想将存储库 URL 添加到 Jenkins 作业中:file:///git/firstRepo
---> 但这不起作用:(
ERROR: Error fetching remote repo 'origin'
hudson.plugins.git.GitException: Failed to fetch from file:///git/firstRepo
at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:817)
at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1084)
at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1115)
at hudson.scm.SCM.checkout(SCM.java:495)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1276)
at
hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild. java:560)
at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:485)
at hudson.model.Run.execute(Run.java:1735)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:405)
Caused by: hudson.plugins.git.GitException: Command "/usr/bin/git fetch --tags --progress file:///git/firstRepo +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout:
stderr: fatal: '/git/firstRepo' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1924)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1643)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access0(CliGitAPIImpl.java:71)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.execute(CliGitAPIImpl.java:352)
at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:815)
... 11 more
ERROR: Error fetching remote repo 'origin'
Finished: FAILURE
我测试了通过 docker shell 将 repo 克隆到 Jenkins 工作区 git clone file:///git/firstRepo
-> 有效。但是我是用 "root" 登录的。
所以我的问题是:
Jenkins 如何访问 git 文件夹?访问权限有问题吗?显然 Jenkins 不是 "root"。我是否必须 "chown" git 文件夹给我的 Jenkins 用户(我认为是 "admin")?
非常感谢!
首先,检查路径:通常,那些repos(用于推送)是裸repos,这意味着它们的路径应该是一个扩展名为.git的文件夹。
.../git/firstRepo.git
其次,通过简单的构建步骤尝试一个简单的 Jenkins Job(没有任何 SCM 设置)
id -a
ls -alrth /git
ls -alrth /git/firstRepo
ls -alrth /git/firstRepo.git
这将向您显示与这些路径关联的权限,并告诉您 Jenkins(作为 id -a
中显示的用户执行)是否有权访问该路径。