Jenkins安装gitlab hook plugin失败的解决办法

本文解决了一个在CentOS环境下使用Jenkins时遇到的问题:无法安装GitLab Hook插件。原因是Ruby运行时插件安装失败。通过一系列步骤包括手动下载插件并尝试直接上传,最终找到了一个临时解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jenkins在安装git hook plugins提示失败:

OS : CentOS 6.5 64位
Jenkins : 1.638
JDK : 1.8.0_66
Ruby-runtime : 0.12
问题 : gitlab hook plugin无法安装的原因是因为ruby-runtime无法安装.

java.io.IOException: Failed to dynamically deploy this plugin
at hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:1308)
at hudson.model.UpdateCenter$DownloadJob.run(UpdateCenter.java:1107)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:104)
at java.lang.Thread.run(Unknown Source)

解决办法:

  1. 看上去是在下载过程中文件出现了问题. 首先关闭Jenkins.找到jenkins主目录下面的插件目录,我的目录在/home/web/.jenkins/plugins, 删除相关文件gitlab-hook.jpi和ruby-runtime.jpi

  2. 重启jenkins, 试着重新安装.还是无法安装成功,报错信息,应该是下载文件的网络问题:

hudson.util.IOException2: Failed to download from http://updates.jenkins-ci.org/download/plugins/ruby-runtime/0.12/ruby-runtime.hpi
at hudson.model.UpdateCenter\$UpdateCenterConfiguration.download(UpdateCenter.java:797)
    at hudson.model.UpdateCenter\$DownloadJob._run(UpdateCenter.java:1148)
    at hudson.model.UpdateCenter\$InstallationJob._run(UpdateCenter.java:1309)
    at hudson.model.UpdateCenter\$DownloadJob.run(UpdateCenter.java:1126)
    at java.util.concurrent.Executors\$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:110)
    at java.lang.Thread.run(Thread.java:745)

手动下载相关的文件,现在地址在这里, 找到相关的插件,然后选择版本.下载到本地

进入jenkins的系统设置->插件管理->高级->上传插件,把下载到本地文件的插件上传到jenkins的服务器进行安装.

还是报错:

java.io.IOException: Failed to dynamically deploy this plugin
at hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:1328)
at hudson.model.UpdateCenter$DownloadJob.run(UpdateCenter.java:1126)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:110)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Failed to install ruby-runtime plugin
at hudson.PluginManager.dynamicLoad(PluginManager.java:487)
at hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:1324)
... 5 more
Caused by: java.io.IOException: Failed to initialize
at hudson.ClassicPluginStrategy.load(ClassicPluginStrategy.java:441)
at hudson.PluginManager.dynamicLoad(PluginManager.java:478)
... 6 more
Caused by: java.lang.ClassCircularityError: org/jruby/RubyClass
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.jenkinsci.bytecode.ClassWriter.loadClass(ClassWriter.java:97)
at org.jenkinsci.bytecode.ClassWriter.getCommonSuperClass(ClassWriter.java:64)
at org.kohsuke.asm5.ClassWriter.getMergedType(ClassWriter.java:1654)
at org.kohsuke.asm5.Frame.merge(Frame.java:1426)
at org.kohsuke.asm5.Frame.merge(Frame.java:1374)
at org.kohsuke.asm5.MethodWriter.visitMaxs(MethodWriter.java:1475)
at org.kohsuke.asm5.tree.MethodNode.accept(MethodNode.java:833)
at org.kohsuke.asm5.commons.JSRInlinerAdapter.visitEnd(JSRInlinerAdapter.java:187)
at org.jenkinsci.bytecode.Transformer$1$1.visitEnd(Transformer.java:107)
at org.kohsuke.asm5.MethodVisitor.visitEnd(MethodVisitor.java:877)
at org.kohsuke.asm5.ClassReader.readMethod(ClassReader.java:1021)
at org.kohsuke.asm5.ClassReader.accept(ClassReader.java:693)
at org.kohsuke.asm5.ClassReader.accept(ClassReader.java:506)
at org.jenkinsci.bytecode.Transformer.transform(Transformer.java:113)
at hudson.ClassicPluginStrategy$AntClassLoader2.defineClassFromData(ClassicPluginStrategy.java:800)
at jenkins.util.AntClassLoader.getClassFromStream(AntClassLoader.java:1310)
at jenkins.util.AntClassLoader.findClassInComponents(AntClassLoader.java:1366)
at jenkins.util.AntClassLoader.findClass(AntClassLoader.java:1326)
at jenkins.util.AntClassLoader.loadClass(AntClassLoader.java:1079)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.jenkinsci.jruby.RubyClassConverter.<init>(RubyClassConverter.java:12)
at org.jenkinsci.jruby.JRubyXStream.register(JRubyXStream.java:25)
at ruby.RubyRuntimePlugin.initRubyXStreams(RubyRuntimePlugin.java:44)
at ruby.RubyRuntimePlugin.start(RubyRuntimePlugin.java:28)
at hudson.ClassicPluginStrategy.startPlugin(ClassicPluginStrategy.java:449)
at hudson.ClassicPluginStrategy.load(ClassicPluginStrategy.java:438)
... 7 more

网上继续寻找问题,在Jenkins的官网找到一个issue, 描述的就是这个问题. Phellipe Ribeiro最后给出了一个在CentOS的临时解决方案:

编辑Jenkins的配置文件 /etc/sysconfig/jenkins 的JENKINS_JAVA_OPTIONS

修改后 :

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.ClassicPluginStrategy.noBytecodeTransformer=true"
<think>嗯,用户想知道如何在同一台服务器上配置和运行JenkinsGitLab。首先,我得回忆一下之前的引用内容。引用1提到已经安装好了JenkinsGitLab,步骤在优快云的链接里。不过用户现在可能需要具体的步骤和注意事项,而不是安装步骤的链接。引用3说Jenkins是基于Java的,所以需要先安装Java环境。然后,引用4提到两种无需密码拉代码的方法,可能涉及到SSH密钥或者凭证配置。 首先,我应该分步骤来。先安装必要的依赖,比如Java和依赖库。然后安装GitLabJenkins,配置各自的端口,因为同一台服务器上可能会有端口冲突。例如,GitLab默认用80,Jenkins用8080,可能需要调整。接下来是初始化配置,比如GitLab的管理员密码和Jenkins的初始插件安装。然后需要设置SSH密钥,这样Jenkins可以无密码拉取GitLab的代码,引用4提到了这个部分。添加GitLab仓库地址到Jenkins项目,可能还需要配置Webhook,这样代码提交后自动触发构建。还要注意防火墙设置,确保端口开放。此外,资源分配也很重要,同一台服务器跑两个服务可能需要足够的内存和CPU。 用户可能遇到的问题包括端口冲突、权限问题、SSH密钥配置错误,以及资源不足导致的性能问题。需要提醒他们检查日志,分配足够资源,使用Nginx反向代理等优化方法。可能还需要提到安全方面的考虑,比如定期备份和更新软件版本。 现在要确保步骤清晰,先安装依赖,再分别安装GitLabJenkins,配置各自的设置,然后处理SSH密钥和凭证,最后测试自动化部署。注意事项部分要涵盖端口、权限、防火墙、资源和备份。相关问题可以涉及性能优化、安全加固、多项目管理,以及结合其他工具比如Docker的使用。</think>### 同一台服务器配置 JenkinsGitLab 的步骤 #### 1. **环境准备** - **系统要求**:确保服务器满足资源需求(建议 4GB 以上内存,50GB 存储空间)。 - **安装依赖**: ```bash # 安装 Java(Jenkins 依赖) sudo apt-get install openjdk-11-jdk # 安装必要工具(Git、curl 等) sudo apt-get install git curl ``` #### 2. **安装 GitLab** - **添加仓库并安装**: ```bash curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash sudo apt-get install gitlab-ce ``` - **修改配置文件**(解决端口冲突): ```bash sudo vim /etc/gitlab/gitlab.rb # 修改 external_url 为服务器 IP 或域名,例如:http://your-server-ip # 若需修改默认端口(如 8081),添加:nginx['listen_port'] = 8081 ``` - **应用配置并启动**: ```bash sudo gitlab-ctl reconfigure sudo gitlab-ctl start ``` #### 3. **安装 Jenkins** - **添加仓库并安装**: ```bash wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt-get update sudo apt-get install jenkins ``` - **修改 Jenkins 端口**(避免与 GitLab 冲突): ```bash sudo vim /etc/default/jenkins # 修改 HTTP_PORT=8080(默认值,若无冲突则无需修改) ``` - **启动服务**: ```bash sudo systemctl start jenkins sudo systemctl enable jenkins ``` #### 4. **配置 SSH 密钥实现无密码拉取代码** - **生成密钥对**(以 Jenkins 用户身份): ```bash sudo -u jenkins ssh-keygen -t rsa # 密钥默认保存在 /var/lib/jenkins/.ssh/ ``` - **将公钥添加至 GitLab**: ```bash sudo cat /var/lib/jenkins/.ssh/id_rsa.pub # 复制输出内容,粘贴到 GitLab 的 SSH Keys 设置页面 ``` #### 5. **Jenkins 集成 GitLab** - **安装必要插件**: - 登录 Jenkins 控制台,进入 **Manage Jenkins > Manage Plugins**,安装 `GitLab Plugin` 和 `Git Plugin`[^2]。 - **配置 GitLab 连接**: - 在 **Manage Jenkins > Configure System** 中添加 GitLab 服务器地址和 API Token[^4]。 - **创建自动化任务**: - 新建任务时选择 Git 仓库地址(如 `http://your-server-ip/root/demo.git`),并指定构建脚本(如 Maven 打包命令)[^2]。 #### 6. **配置 Webhook 实现自动触发** - 在 GitLab 项目设置中,添加 Webhook 地址: ``` http://jenkins-ip:port/gitlab/build_now ``` - 确保 Jenkins 的 **GitLab Hook** 插件已启用[^4]。 --- ### 注意事项 1. **端口冲突**:若 GitLabJenkins 使用同一端口(如 80),需通过反向代理(如 Nginx)分配不同域名或端口[^1]。 2. **权限隔离**:建议 Jenkins 以独立用户(如 `jenkins`)运行,避免与 GitLab 权限冲突。 3. **防火墙配置**: ```bash sudo ufw allow 80/tcp # GitLab HTTP sudo ufw allow 22/tcp # SSH sudo ufw allow 8080/tcp # Jenkins ``` 4. **资源分配**:若服务器资源紧张,可通过 `sudo vim /etc/gitlab/gitlab.rb` 调整 GitLab 的 `unicorn['worker_processes']` 或关闭非必需服务[^3]。 5. **备份与恢复**: ```bash # GitLab 备份 sudo gitlab-rake gitlab:backup:create # Jenkins 备份(直接复制 /var/lib/jenkins 目录) ``` ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值