【问题标题】:Jenkins with multiple slaves using the same machine詹金斯与多个奴隶使用同一台机器
【发布时间】:2023-11-21 12:38:02
【问题描述】:

目前我的 Jenkins 设置仅限于一个执行者。这几乎是我们构建的要求,因为我们有一个用户特定的日志文件,每次构建都会创建。为了获得多个执行者,我只是在本地机器上设置了从属。我希望我们所有的奴隶共享同一个工作空间,所以我只是创建了一个符号链接。话虽如此,我必须在工作区上 chmod 775 以便它更像是基于组的工作区。是否有多个 jenkins slave 共享一个工作空间?

编辑:关于我的 1 执行人限制。我们的应用程序是一个动作脚本应用程序,我们在构建过程中运行了许多单元测试,并创建了一个闪存日志。我们希望能够为每个构建提供闪存日志。 unix 上的 flash 日志存储在用户主目录中。从 10.1 版开始,您无法更改 mm.cfg 中的位置。由于 Jenkins 以用户身份运行,我们无法同时运行多个 flexunit 测试实例并且能够正确捕获闪存日志。

这是我遇到的一些烫发失败:

Fetching upstream changes from git@company:repo/repo.git
ERROR: Problem fetching from origin / origin - could be unavailable. Continuing anyway
hudson.plugins.git.GitException: Error performing command: git fetch -t git@company:repo/repo.git             
+refs/heads/*:refs/remotes/origin/*
Command "git fetch -t git@company:repo/repo.git +refs/heads/*:refs/remotes/origin/*" returned status code 128: error: insufficient permission for adding an object to repository database .git/objects

fatal: failed to write object
fatal: unpack-objects failed

at hudson.plugins.git.GitAPI.launchCommandIn(GitAPI.java:776)
at hudson.plugins.git.GitAPI.launchCommand(GitAPI.java:741)
at hudson.plugins.git.GitAPI.fetch(GitAPI.java:190)
at hudson.plugins.git.GitAPI.fetch(GitAPI.java:978)
at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:765)
at hudson.plugins.git.GitSCM.access$100(GitSCM.java:80)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:1003)
at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:970)
at hudson.FilePath$FileCallableWrapper.call(FilePath.java:2045)
at hudson.remoting.UserRequest.perform(UserRequest.java:118)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:287)
at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

原因:hudson.plugins.git.GitException:命令“git fetch -t git@company:repo/repo.git +refs/heads/:refs/remotes/origin/”返回状态码 128:错误:将对象添加到存储库数据库 .git/objects 的权限不足

【问题讨论】:

  • 您能否更详细地解释一下为什么您必须有一个执行人 - 这里的人可能会帮助您克服这一限制。
  • unix 上的 flash 日志存储在用户主目录中 如果主目录的位置取自 $HOME env。在调用测试之前,您可以尝试将其设置为其他变量(例如,由 BUILD_ID 键入的临时位置)。

标签: hudson jenkins master-slave


【解决方案1】:

更新:这个答案不正确,请看评论。

转到每个从属服务器的节点配置 (http://[jenkins_server]/computer/[slave_name]/configure) 并将 Remote FS root 设置为 master主目录 的值. master 的主目录可以通过http://[jenkins_server]/configure 找到。以防万一点击 Home Directory 下的 Advanced 按钮,并确保 Workspace Root Directory 设置为 ${ITEM_ROOTDIR}/workspace 之类的东西(因为奴隶会在[Remote FS root]/workspace 中创建他们的工作区。

也就是说,我不能保证您在尝试从同一工作区中的不同从属设备运行作业时不会遇到各种问题。

【讨论】:

  • 我不确定这是否可行 我尝试将所有从属服务器设置在同一个目录中,并且为从属服务器创建了很多 jar 文件,我不得不更改权限似乎有问题在创建的罐子上。至于使用我正在考虑但布局不同的主工作区,即主:jobs/JOB_1/workspace /JOB_2/workspace /JOB_3/workspace slave: slave_dir/workspace/JOB_1 /JOB_2 /JOB_3
  • 这是我遇到的一些烫发失败
【解决方案2】:

我假设您在工作区中存储了一些您希望在构建之间持久/共享的信息。为此,您可能需要考虑使用Copy to Slave Plugin

【讨论】: