Jenkins+Gitee项目提交自动部署(Java)
前言:本文档为自己学习过程中的成功部署后经验分享
一、概念
1、什么是 CI/CD
CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。
CI/CD 的核心概念可以总结为三点:
- 持续集成
- 持续交付
- 持续部署
CI/CD 主要针对在集成新代码时所引发的问题(俗称"集成地狱")。
为什么会有集成地狱这个“雅称”呢?大家想想我们一个项目部署的过程,拉取代码->构建->测试->打包->部署,如果我们经常需要部署项目,特别是在微服务时代,服务特别多的情况下,不停的测试打包部署,那估计得有个人一整天专门做这事了,而这事又是繁琐的重复无意义的。
具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署),这些关联的事务通常被统称为"CI/CD 管道",由开发和运维团队以敏捷方式协同支持。
1.1 、CI(Continuous Integration)
CI/CD 中的"CI"始终指持续集成,它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到代码仓库中,该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。
1.2 、CD(Continuous Delivery/Continuous Deployment)
CI/CD 中的"CD"指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。两者都事关管道后续阶段的自动化,但它们有时也会单独使用,用于说明自动化程度。
持续交付(Continuous Delivery)通常是指开发人员对应用的更改会自动进行错误测试并上传到代码仓库(如Gitee、 GitHub、GitLab 等),然后由运维团队将其部署到实时生产环境中。这旨在解决开发和运维团队之间可见性及沟通较差的问题。因此,持续交付的目的就是确保尽可能减少部署新代码时所需的工作量。
持续部署(Continuous Deployment)指的是自动将开发人员的更改从代码仓库发布到生产环境,以供客户使用。通过一套全自动化的流程,来解决手动测试、编译、打包等操作。持续部署以持续交付的优势为根基,实现了管道后续阶段的自动化。
2、什么是 Jenkins
前面说的 CI/CD 算是一种思想,思想要落地,就需要对应的工具。
Jenkins 是一款开源的 CI/CD 软件,可以算是 CI/CD 软件领导者,它提供了超过 1000 个插件来支持构建、部署、自动化,基本上能够满足任何项目的需要。
整体来说,Jenkins 有如下六大特点:
- 持续集成和持续交付作为一个可扩展的自动化服务器,Jenkins 可以用作简单的 CI 服务器,或者变成任何项目的持续交付中心。
- 简易安装Jenkins 是一个基于 Java 的独立程序,可以立即运行,包含 Windows、Mac OS X 和其他类 Unix 操作系统。
- 配置简单Jenkins 可以通过其网页界面轻松设置和配置,其中包括即时错误检查和内置帮助。
- 插件通过更新中心中的 1000 多个插件,Jenkins 集成了持续集成和持续交付工具链中几乎所有的工具。
- 扩展Jenkins 可以通过其插件架构进行扩展,从而为 Jenkins 可以做的事提供几乎无限的可能性。
- 分布式Jenkins 可以轻松地在多台机器上分配工作,帮助更快速地跨多个平台推动构建、测试和部署。
二、Linux安装jenkins
1、安装jdk
yum install java-1.8.0-openjdk* -y
2、下载并安装jenkins
清华大学镜像
把jenkins的网址导入yum安装里,然后用yum安装但是要注意跳过签名认证
#下载jenkinswget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.346.3-1.1.noarch.rpm
#yum安装
yum install jenkins-2.346.3-1.1.noarch.rpm
3、修改配置
修改端口号和用户(用户不改root,会有很多权限问题)
旧版本配置文件:/etc/sysconfig/jenkins
新版本配置文件:/usr/lib/systemd/system/jenkins.service
2.331版本和2.346版本是旧版配置文件,2.348版本为新版配置文件
(1)、旧版配置文件
vim /etc/sysconfig/jenkins
(2)、新版配置文件
vim /usr/lib/systemd/system/jenkins.service
修改完成后刷新配置
systemctl daemon-reload
4、jenkins基本操作
#启动service jenkins start
#设置jenkins开机自启
systemctl enable jenkins.service
#停止service jenkins stop
#重启service jenkins restart
#网页中重启
http://域名或IP地址/restart
5、访问jenkins
http://192.168.211.128:8088 -------- ip地址改成自己的设备
查看服务器中的jenkins管理员密码
cat /var/lib/jenkins/secrets/initialAdminPassword
输入密码后点击右下角继续进入
然后各种跳过进入jenkins首页
6、配置插件源
进入jenkins后,jenkins的目录下才会有updates文件夹,进去备份后修改配置文件
#备份cp default.json default.json.def
cp hudson.tasks.Maven.MavenInstaller hudson.tasks.Maven.MavenInstaller.def
#修改sed-i's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json
sed-i's#www.google.com#www.baidu.com#g' default.json
修改完成后重启jenkins服务
7、下载中文插件
安装完成后重启jenkins,至此jenkins安装成功
补充
之前由于缺少证书,所以需要手动下载安装此插件。
https://updates.jenkins.io/download/plugins/skip-certificate-check/1.0/skip-certificate-check.hpi
三、使用jenkins部署java项目
1、安装插件
部署项目的三个必要的插件
- Maven Integration:Maven 构建工具
- Publish Over SSH:整个工具,将来把 Jenkins 打包好的 jar 上传到应用服务器上。
- Gitee:协助使用 Gitee 仓库
安装步骤如下:
点击左边的系统管理,然后点击右边的插件管理,进行配置。
然后在可选插件中,搜索 Maven Integration 和 Publish Over SSH 以及 Gitee 三个插件
搜索完成后,点击Install without restart
安装成功后,重启jenkins服务
2、JDK配置
别名随便取,JAVA_HOME配置为当前系统中的jdk环境位置
3、Maven配置
别名随便取,MAVEN_HOME为系统的maven安装路径
4、Publish Over SSH凭证配置
进入系统管理 —> 系统配置
往下拉找到 Publish Over SSH,然后点击新增,开始配置,Hostname 位置填写你服务器的域名或者 IP:
配置成功后,点击测试连接进行测试,确保连接是成功的。
5、Gitee配置
接下来配置 Gitee 的凭证,要根据这些凭证,才能从 Gitee 上拉取代码下来
点击 添加—>Jenkins,添加凭证:
添加成功之后,就可以选择这个令牌了。
最后点击测试连接,确保可以连上 Gitee。
所有配置工作都做完了,接下来我们就可以开始构建一个项目了。
6、开始一个项目的构建
点击确定之后,拉到源码管理位置,开始配置。
首先选择 Git,填入 Gitee 上的仓库地址,然后凭证就写 Gitee 的用户名/密码。
添加jenkins凭据(Gitee的用户名和密码),添加后即可选择使用
接下来输入项目构建命令,将来 Jenkins 从 Gitee 上拉取代码下来之后,就执行该命令对项目进行打包:
最后,配置上传构建好的文件,并执行启动命令(两种):
配置的详细信息:
注意:Publish Over SSH如果没有配置Remote directory为"/",此处的Remote directory则不能使用绝对路径
开启 SSH 操作日志,开启日志之后,就可以看到 Jenkins 中操作应用服务器其的过程:
至此,这个项目就配置完成了。
保存之后,点击立即构建按钮,就可以开始构建了:
开始构建之后,可以点击构建按钮,查看构建过程:
7、自动构建
现在我们的项目还不是自动构建,也就是当我们向 Gitee 上的代码仓库提交代码之后,并不会触发 Jenkins 的自动构建,得我们手动点击构建按钮,接下来我们再来继续配置,实现自动触发构建。
为了实现自动触发构建,我们需要修改两个地方。
(1)、修改jenkins
首先在 Jenkins 的当前项目中,配置一下触发构建的规则:
在网页上 Jenkins 已经给出了将来要配置的 Webhook 的地址了,大家直接拷贝该地址即可。
(2)、配置Webhook
接下来在 Gitee 的项目中,配置 WebHook,在当前项目中,选择管理选项卡,左边菜单点击 WebHooks,然后点击添加 WebHook。
由于 Jenkins 是要登录之后才可以操作的,处于公网的 Jenkins 我们也不能降至设置为匿名访问,所以这里我们将 Jenkins 的用户名密码放在请求地址中,最终地址类似这样:
http://username:[email protected]:8088/xxxx
。
配置完成后,向 Gitee 代码仓库提交代码,提交成功之后,我们去查看是否会触发 Jenkins 自动构建功能。
四、安装jenkins过程中出现的问题
1、离线
修改/var/lib/jenkins/hudson.model.UpdateCenter.xml文件,记得要留一个备份
#备份cp hudson.model.UpdateCenter.xml hudson.model.UpdateCenter.xml.default
#修改vim /var/lib/jenkins/hudson.model.UpdateCenter.xml
#下载源
http://mirror.esuni.jp/jenkins/updates/update-center.json
修改完成后重启jenkins服务再重新访问页面即可
2、汉化不完全
安装中文插件后有时会出现页面中只汉化了一部分的问题
(1)、进入插件中安装Locale插件
(2)、进入系统配置
简体中文:zh_cn
英文:en_us
但发现在安装其他插件重启Jenkins后,又出现了部分中文简体不翻译的情况。
尝试以下方法,可以完美修复(此方法治标不治本,每次重启jenkins服务都在按这步骤在来一遍的)。
a. 将语言设定为zh_US,Jenkins切换为英文。
b. 调用restart重启Jenkins:http://域名或IP地址/restart。
c. 再次语言设定为zh_CN,刷新即可。
3、java环境问题
问题:Jenkins启动时需要Jdk环境,返回信息中提示无法找到
/usr/bin/java
文件或目录
原因:Jenkins在没有修改配置文件时启动,会默认去找指定目录下的Java执行文件。
解决方法:
方法一:通过命令安装jdk
yum install java-1.8.0-openjdk* -y
方法二:修改jenkins配置文件,让jenkins识别安装的java执行文件
vi /etc/init.d/jenkins
在candidates中添加自定义安装的jdk路径
方法三:创建软链接
ln-s Jdk目录下bin/java文件 /usr/bin/java
4、用户名问题
查看/etc/sysconfig/jenkins或者或者/usr/lib/systemd/system/jenkins.service 的JENKINS_USER=“root”,如果不是root,而是jenkins或者其它,要改成root。
#老版本vim /etc/sysconfig/jenkins
#重新加载配置
systemctl daemon-reload
#新版本vim /usr/lib/systemd/system/jenkins.service
User=root
Group=root
#重新加载配置
systemctl daemon-reload
#重启jenkins服务
systemctl start jenkins.service
5、log权限问题
报错/var/log/jenkins/jenkins.log(权限不够)
解决方法:
cd /var/log
chmod777-R jenkins/
6、启动方法问题
#如果是CS9,则需要执行第一步cp /etc/rc.d/init.d/functions /etc/init.d/
#如果不是则从这一步开始cd /etc/init.d/
#查看状态
./jenkins status
#停止
./jenkins stop
#启动
./jenkins start
7、无法使用systemclt启动jenkins
原因是因为systemctl启动时调用的jenkins.service文件在/usr/lib/systemd/system目录下,无法调用/etc/init.d/下的jenkins。所以如果遇到服务方式无法启动jenkins,则需要修改jenkins.service来进行适配
vim /usr/lib/systemd/system/jenkins.service
找到Environment 并修改
Environment="JAVA_HOME=使用which java命令得到的路径"
重启jenkins并测试
systemctl daemon-reload
systemctl enable jenkins
systemctl start jenkins.service
systemctl stop jenkins.service
systemctl status jenkins.service
8、端口被占用
查看系统的端口占用情况
yum install-y net-tools
netstat-ntlp
修改前kill所有jenkins进程
修改/etc/sysconfig/jenkins 的 JENKINS_PORT=“端口号”
或者/usr/lib/systemd/system/jenkins.service 的 Environment=“JENKINS_PORT=端口号”
#重启jenkisn服务
systemctl daemon-reload
service jenkins restart
9、没有docker执行权限
#添加jenkins至docker用户组usermod-aGdocker jenkins
#重启服务service jenkins restart
五、卸载jenkins
#停止jenkinsservice jenkins stop
#清理无用数据源
yum clean all
#卸载jenkinss
yum -y remove jenkins
#rpm卸载jenkinsrpm-e jenkins
#检查是否卸载成功rpm-ql jenkins
#删除jenkins相关文件find / -iname jenkins |xargs-n1000rm-rf#刷命令service jenkins stop
yum clean all
yum -y remove jenkins
rpm-e jenkins
find / -iname jenkins |xargs-n1000rm-rfrpm-ql jenkins
感谢观看。
版权归原作者 JfZaCc 所有, 如有侵权,请联系我们删除。