草庐IT

Jenkins在Linux环境下的安装与配置,包含遇到的问题以及解决方法

梅西库里RNG 2023-05-20 原文

一、Jenkins简介

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成(CI)工具,用于解决持续重复的部署、监控工作;它一个开放易用的软件平台,大大简化软件的持续集成。

目前持续集成(CI)已成为许多软件开发团队的常见做法。它是一种实践,旨在缓和和稳固软件的构建过程,并且能够帮助您的团队应对如下挑战:

a. 软件构建自动化 :配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,对目标软件进行构建。
b.构建可持续的自动化检查 :CI系统能持续地获取新增或修改后签入的源代码,也就是说,当软件开发团队需要周期性的检查新增或修改后的代码时,CI系统会不断确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在检查彼此相互依存的代码中变化情况需要花费的时间和精力(说直接一点也是钱啊,呵呵)。
c. 构建可持续的自动化测试 :构建检查的扩展部分,构建后执行预先制定的一套测试规则,完成后触发通知(Email,RSS等等)给相关的当事人。
d. 生成后后续过程的自动化 :当自动化检查和测试成功完成,软件构建的周期中可能也需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。这样,构件才能更迅速地提供给用户使用。

部署一个CI系统需要的最低要求是,一个可获取的源代码的仓库,一个包含构建脚本的项目。
其主要用于:
1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。

二、安装Jenkins

1、在服务器直接下载jenkins的war包

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

但是从海外的服务器下载非常慢,还经常失败;所以一般先在windows下载好war包(虽然也很慢,但是错了可以继续下载,而且并发操作不影响其他步骤,而且一次下载多次使用…),再传到服务器

#Tips-提高下载速度小技巧1:
电脑连手机热点,手机再打开vpn,服务节点最好选择美国;当然如果电脑有vpn就更方便了。

#Tips-提高下载速度小技巧2:
从阿里云开发者社区下载:
https://developer.aliyun.com/mirror/

2、在本地下载jenkins的war包

1)Jenkins官网地址

2)jenkins版本与jdk版本有对应,所以下载的第一步是看系统的jdk版本是多少?再找对应的jenkins。
下载页是最新的jenkins-2.361.1,要求jdk版本11或者17,我们系统是jdk8,所以一开始我就安装不上

jenkins过往版本的下载入口如下图

而且这里很贴心的写了jenkins对应的jdk版本

3、在linux部署jenkins

法一:jenkins本质上就是一个war包,和在linux部署普通项目类似;一般是找一个tomcat,把war包放在webapp中,启动tomcat即可。
法二:jenkins因为war包中也包含了tomcat,所以也可以像jar包一样部署,下面介绍一下这种部署方式。
1)上传jenkins.war,我这里是在usr下

在jenkins所在目录新建一个日志文件

vim nohup.out

保存退出

:wq

2)安装并启动Jenkins;因为jenkins默认端口是8080、一般都被占用了,这里用特定端口启动

#后台启动命令
nohup java -jar jenkins.war --httpPort=8095 >/usr/lib/jenkins/nohup.out &

#ctrl+c退出后,可以查询启动日志
tail -fn 200 nohup.out

3)在浏览器输入http://ip:8095,看到如下界面表示jenkins安装成功。

4、登录jenkins客户端,做基础配置

1)第一次登录需要使用初始密码。
密码在启动日志中就会打印出来,所以建议在启动时,打开实时日志(或者启动完打开日志文件夹中的catalina.out查看),就可以比较简单的找到初始密码。

当然,也可以在Jenkins指定的initialAdminPassword文件中查看

vim /root/.jenkins/secrets/initialAdminPassword

2)复制密码,返回浏览器将密码填入,然会点击“继续”,进入一下也页面,
我一般是“选择插件安装”,只选很少几个,后面有需要的再安装,这样可以节省时间。

当然选择“安装推荐的插件”,也可以。

下一步

这里插件即使没有安装成功也没有关系,后面可以补。可以在jenkins的客户端插件管理中自动下载,也可以从网上下载好插件安装上去,这里提供一下jenkins插件下载地址:
https://plugins.jenkins.io/

3)安装完成后,点击继续(如果有一两个没下载完,安装完成后也可以下载),创建用户

4)创建完成后点击“保存并完成”,一直点击“继续”,到下面界面点击“开始使用Jenkins”

5、插件安装失败解决方式

1)插件安装失败,大多都是jenkins版本与插件版本不对应导致的;如果可以安装最新版的jenkins,一般都不会有插件安装失败的问题,即使失败重新安装一下就好了。
但是现实中,公司服务器的jdk是很多项目在用,你不能随便改版本;所以只能安装匹配当前jdk版本的jenkins,进而就可能导致推荐的插件安装不上。
而且jenkins的插件,相互之间是有依赖关系的,于是有些插件安装失败会导致另外一些插件也安装失败…如此往复,会导致很多插件都安装失败,重试也不行。因为不是网络原因导致的,所以网上很多回答说,换插件下载地址是解决不了这个问题的。

2)这种情况,只有通过降低插件的版本来解决。
首先,要尽可能安装最新的jenkins,这样就不会有插件安装失败的问题;如果不行,就安装当前jdk支持的最新版本jenkins。比如,我们公司测试服务器装的是jdk1.8,jenkins支持jdk1.8的最新版本是2.356,再往后就不支持1.8了,那么就按照jenkins2.356;
其次,在jenkins插件管理中,提供的都是最新的插件,安装低版本需要在插件市场下载好、手动上传来安装。

3)比如你要安装插件Pipeline插件,发现最新的插件安装不上

这时你就可以点击就进入了jenkins专门的插件网站;然后选择release进入历史版本页,因为没有插件与jenkins的版本对应关系(我没找到),所以需要根据你安装版本大致估计需要往前多少;比如我安装的是jenkins2.356,那么我就下载2年前的版本;点击derect link就可下载。

然后在jenkins插件管理的"高级"页签下,找到手动安装,把刚才下载的hpi文件上传,点deploy部署即可

5)需要注意的是,插件相互之间有依赖关系,比如我要安装一个SSH插件,它需要先安装Credentials,再安装trilead Api,再安装SSH插件;如果前面的插件你没有,它会自动先安装前面的,而且是最新的。又因为你最新的安装不了(比如我),所以导致SSH安装失败。
这个时候,你要根据安装报错,按先后顺序安装。

还有就是,我安装了一个1.0.11的trilead Api,接着安装SSH,这时安装失败;报错信息说,当前这个SSH插件要求的trilead Api版本最低是1.67。那么我就需要再去找trilead Api1.67重新安装,1.67装好了、再安装后边的。
有点繁琐,但是大家也不用太担心,因为必须要安装的插件没有几个;而且这些插件的前置插件都差不多;比如Credentials,这个是证书库插件,基本每个插件都需要依赖它,但是你只要安装过一次,后面就不用再管了。

6)这里总结几个必须要的插件
Subversion 我的源码在svn上,如果源码在git上就必修要git插件;
publish over ssh 远程连接服务器
Maven Integration 多数项目需要用到maven部署
NodeJS 部署vue前端要用

三、linux环境配置

jenkins自动部署,本质上就是把代码拉取到服务器,然后打包;再把包发到指定的位置,可能在当前服务器、也可能需要传到远程服务器;最后启动。

所以为了支持打包等任务,需要在部署jenkins的服务器上安装一些项目管理工具,如后端java项目一般需要安装jdk和maven,前端vue项目需要安装nodejs,安装完成后再在jenkins全局变量中配置这些工具的信息。

在linux环境安装maven和nodejs这里就不展开说了,下面说一下,安装好之后(可能你们公司的服务器本来就有这些工具),jenkins还需要做那些配置。

1、在jenkins客户端-全局配置中,配置jdk信息

2、在jenkins客户端-全局配置中,配置maven信息


如果没有Maven配置的地方,说明Maven插件没有安装成功,先去安装插件。

3、在jenkins客户端-全局配置中,配置nodejs信息

结语:至此,Jenkins的安装配置全部完成,下面就该使用它进行远程项目部署了

Jenkins自动部署后端maven项目、前端vue项目

有关Jenkins在Linux环境下的安装与配置,包含遇到的问题以及解决方法的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  5. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  6. Ruby 方法() 方法 - 2

    我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby​​-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco

  7. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  8. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  9. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  10. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

随机推荐