Jenkins初体验
初到公司给分配了Jenkins部署的任务,完全从头学起但是公司不心疼实习生劳动力,给了我半个月时间做这么一个简单的东西,所以了解比较多,做个记录,内容涉及面超多,遇到的问题超多,主要涉及不同环境下安装配置、离线在线安装、功能实现等。
安装与配置
Jenkins
Ubuntu环境
-
为使用Jenkins的Debian软件包存储库,先将密钥添加到系统中:
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
-
在
/etc/apt/sources.list
文件中添加以下条目:deb https://pkg.jenkins.io/debian-stable binary /
-
手动安装相应版本的java版本:
- 2.164(2019-02)和更新版本:Java 8或Java 11
- 2.54(2017-04)和更新版本:Java 8
- 1.612(2015-05)及更新版本:Java 7
-
更新本地包索引并最终完成Jenkins安装:
sudo apt-get update sudo apt-get install jenkins
-
启动:
service jenkins start netstat -tunlp |grep :8080
-
初始化:
cat /var/lib/jenkins/secrets/initialAdminPassword
得到管理员密码
Centos环境
与Ubuntu类似,只是命令相应有些差异。
1 wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
2 rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
3 yum install -y jenkins
Windows环境
-
下载相应msi包
https://jenkins.io/zh/download/thank-you-downloading-windows-installer-stable/
-
双击安装msi包即可
SVN
具体操作参见《centos下svn使用说明》,写的很好我就不重复了。
JDK
yum install -y java
Windows下手动自行安装并配置环境变量。
Maven
安装
Maven安装在jenkins所在主机上。官网下载Maven,注意,要下载binary版,不能下载source版!(不要问我怎么知道的)
Windows下 ,配置环境变量后重启cmd,输入mvn -v验证是否安装成功。
Centos下,参照《Centos安装Maven》。
配置
无 网条件下,没有办法访问中央仓库,没办法工作。只能将所需pom.xml导到有网设备上,在有网环境下利用中央仓库下载所需插件,再将成功后生成的本地仓库(C:\Users\用户名.m2\repository)打包发送到无网本地仓库,合并覆盖。
再到maven安装目录下,修改settings.xml,将镜像地址改为本地仓库地址
> <mirror>
>
> <id>*</id>
>
> <name>*</name>
>
> <mirrorOf>*</mirrorOf>
>
> <url>file://C:\Users\用户名\.m2\repository</url>
>
> </mirror>
使用
安装好各项基本工具后,登录http://ip_address:8080输入得到 的管理员密码就可以开始安装Jenkins插件,这里我选择了推荐安装,自动开始配置。
配备基础插件:
系统一般推荐安装可以满足基本需求,无网络或网络不佳可以上jenkins官网或国内镜像下载 ,但是插件之间存在依赖关系与版本关系,故建议仅需部分插件时手动执行。不得已情况下,这里提供一个56个插件的包,无网时依次执行可以满足基本需求,版本不对有些插件需要针对性自行更新。
[链接:https://pan.baidu.com/s/1fAoGnbBrqAp8AK7Y-ITUFA 提取码:0yhr ]
项目测试
1.0用于熟悉配置操作,2.0用于小型基础demo测试,3.0用于Maven,真实环境下做打包测试。
demo 1.0
-
项目源码位置:
-
创建项目
主页:点击“新建”;
项目类型:输入项目名称testwar
,类型选择“freestyle” -
源码管理
选择
Subversion
,填入相应SVN地址,然后输入相应的账号密码的credentials。 -
定时触发构建
构建触发器: 只选中
Build periodically
, “日程表”格式与 crontab 相似但有细微差别,示例如下:* * * * * 第一个*表示分钟,取值0~59 第三个*表示一个月的第几天,取值1~31 第四个*表示第几月,取值1~12 第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日 ## 每行由 5 个值组成(空格或TAB分隔),分别表示分(0-59)、时(0-23)、日(1-31)、月(1-12)、周(0-7, 0/7=周日) ## "M,N" 表示M和N;"M-N" 表示范围[M,N];"M-N/X" 表示范围[M,N]内每隔X;"*/X" 表示整个范围内每隔X ## 前面提到的M/N/X的值都可以用H(意为Hash)代替,散列值起到随机值的效果,且同一项目取值稳定,这对于项目多时分散压力很有用。 “日程表”修改后,下方会给出下次执行时间点的预告。
-
版本提交构建触发
构建触发器: 只选中
Poll SCM
,可指定检查 SVN 代码是否有提交的时间:## 格式与 "Build periodically" 相同 H/10 * * * * ## 任何时候,每隔 10 分钟就检测一次 SVN,如果有提交就启动构建
-
构建、构建后操作
可根据项目需求自行设定如启动shell脚本,更新Git说明等功能。
构建后操作:
-
全局设置
如上图的远程目标服务器地址是不能直接配置的,需要到Configure System中Publish over SSH一栏填写配置信息,我这里配置了自己的centos虚拟机192.x.x.137、借用的centos环境192.x.x.239、本机Windows环境x.x.x.245三种。本机Windows比较麻烦,需要先开启本机ssh端口,我使用的是PowerShell Server并因为端口冲突修改端口为23。至此基本使用教程结束。
demo 2.0
目标
137、239两台设备对目标文件分别进行本机上的修改后代码成功更新到远程服务器(239上)
要求
- 两设备各安装SVN,并进行建库、将目标文件检出到本地。
- jenkins可以部署在任意设备上,指定ip和端口号即可使用。这里为了简化问题,在本机Windows下部署,直接打开localhost:8080即可。
实施步骤
-
分开单独测试两台设备都可以将本地文件修改并执行SVN commit后自动执行编译、传包到目标服务器。
-
分别修改两台设备上的文件并不进行commit这时Jenkins build会出现unstable的黄色标志,看文件中发现报错,提示
相应后续如果需要可以尝试捕捉这个异常将报错日志输出到专门文件中作对应。 -
针对上述问题相应update后发现两边的代码进行了合并,输出结果也是合并后的正确输出。
-
打包问题 :直接打包命令,解决
demo 3.0
公司内网有毒……,下载地址给封了,搞了一天才有人跟我说,报错信息一直没说是网络问题啊,想死,先缓缓。
F&Q
- windows环境下下载速度很快但是切换到centos后网速骤降导致总是超时(还是网速问题)
- 改“升级站点”为清华镜像站,相对好一点
- 自行下载相应版本的软件包,然后在“高级”里上传,注意版本和依赖关系,很麻烦!
- windows下开启jenkins服务(msi包):管理员运行cmd,输入net start jenkins
windows下开启jenkins服务(war包):cmd进入war包目录,输入java -jar jenkins.war - 配置好并且Jenkins运行中但是页面打不开:检查防火墙有无开启
systemctl status firewalld
firewall-cmd --permanent --zone=public --add-port=8080/tcp
systemctl reload firewalld
- More Question:Waitting For You & Your Answer.