暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Jenkins持续集成

源成蹊 2019-08-28
929
前一段被领导吐槽,服务不稳定老是会挂。实则挂的是被我调用的其他服务,其并不在我的微服务体系中。但是领导要的是解决方案,不是听我bb的,故准备加入服务监控与自动扩容等功能,管理所有项目。
软件的开发和发布,已经形成了一套标准流程,大致分为以下几个阶段:
编码 —>构建 —>集成 —>测试 —>交付 —>部署
除了初阶段,最漫长的莫过于集成、测试两环节了,此节即是持续集成与自动部署关键。持续集成即:频繁的将各个代码集成到主干。将个人开发的代码向软件整体部分交付,进行集成以便提早发现其中的bug,推进项目进度

途径:Jenkins
       介绍:Jenkins是一个java开发的开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许无论用的是什么平台,可以处理任何类型的构建或持续集成


I.安装
一、因为是基于java开发的,故需安装jdk
Jekins版本与所需的最低java版本:
1.61(2015-05):Java 7
2.54(2017-04):Java 8
2.16(2019-02):Java 8或Java 11
yum install -y java-1.8.0-openjdk


二、rpm包方式安装Jenkins(CentOS 7系统)
1.下载rpm包并安装
$ wget -c https://pkg.jenkins.io/redhat-stable/jenkins-2.176.2-1.1.noarch.rpm
$ rpm –ivh jenkins-2.176.2-1.1.noarch.rpm
2.此时已经安装好了。且其默认配置我们可以修改下:
$ vim /etc/sysconfig/jenkins
# JENKINS_HOME="/var/lib/jenkins"  #jenkins的默认安装目录
# JENKINS_PORT="8080"   #修改端口号
# JENKINS_USER="jenkins"   #安装时,创建的jenkins用户,这个是重点
# 建议将这个jenkins用户添加到sudo组,提权下
# 甚至有人将JENKINS_USER改为="root"
3.启动
systemctl start jenkins   #启动
$ systemctl stop jenkins    #停止
$ systemctl restart jenkins #重启
若启动报错:Failed to start LSB: Jenkins Automation Server
则将jdk环境变量路径放于jenkins的启动脚本中
$ vim /etc/rc.d/init.d/jenkins
#找到candidates="....."这段,将jdk路径,如:/usr/local/java/jdk1.8.0_212/bin/java放其里面


II.登录
因为jenkins服务占用的8080端口,为了方便访问将该端口放行了
$ vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
$ systemctl restart iptables.service  #保存后重启防火墙
浏览器中输入:ip:8080访问,第一次登录根据提示去服务器上拿到密码。然后等待,其初始化需要一段时间,之后会让你自定义安装插件。我选择了:安装推荐的插件。然后就是一个大大的:新手入门提示。尼玛
安装插件完毕后,就提示创建一个admin用户,并设置用户密码(这个密码务必记好了)。下来都直接默认就好


全局设置


就是将你服务器上已经安装过的jdk、git、maven、gradle等安装路径给填到这里,到时候构建项目时可以引用他们。当然,若没有,你也可以让Jenkins给你安装


III.自动构建并部署
持续集成步骤:
提交代码——>触发构建——>执行构建——>发送通知
1.创建job
填写描述后,设置源码管理
Git —> Repository URL(仓库地址) —> Credentials(添加GitHub或码云账号)
要想从git拉取代码到服务器,jenkins所在的服务器起码得有git吧
$ yum install git        #安装git
$ cd ~/.ssh/$ ssh-keygen -t rsa -C  "yourEmail@qq.com"  #根据提示连着按了三次enter,不设置密码
$ cat id_rsa.pub         #查看公匙,复制其内容。登录GitHub或码云,设置ssh公匙,将刚复制的公匙粘贴到此处即可
$ ssh -T git@gitee.com   #验证,github为:ssh -T git@github.com
第一次验证可能:Authentication failed.可多次使用ssh -T git@gitee.com命令,则会发现successfully
2.构建项目
此处部署了SpringBoot+Gradle项目,故使用Gradle构建(服务器上需装有Gradle)
Build ——> Invoke Gradle script ——> 选择Gradle Version(即上一步中全局设置的Gradle Name) ——> Use Gradle Wrapper ——>Tasks : build即可
构建成功后,我选择了执行shell脚本。(这一步有很多坑)

IV.填坑总结
坑一:构建不成功
compileJava:Faile
jenkins构建项目,步骤为:从git上获取最新代码到其安装目录的/workspace下。
查看jenkins家目录:
$ cat /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins" 
其中"/var/lib/jenkins"即jenkins用户的家目录,/workspace/项目名,即其刚拉下来的代码,其用Gradle构建好的jar包也在此处。可到此处,直接手动gradle build命令构建项目,看成不成功
最后此报错的解决方法:/workspace/项目名/ 该目录下有个隐藏目录:/.gradle即项目的所有依赖,我将此 .gradle文件夹删了,重新build即好


坑二:jenkins用户
发现切jenkins用户时,su jenkins毫无作用
原因:安装jenkins时,jenkins只是创建了jenkins用户,但其家目录下缺少环境变量文件
解决方法
$ passwd jenkins #为jenkins用户设置密码
$ vim /etc/passw
jenkins:x:993:989:Jenkins Automation Server:/var/lib/jenkins:/bin/false
#将末尾的/bin/false改为:/bin/bash
此时可以切到jenkins用户了,但是提示符为:bash-4.2$,解决方法:
$ cp /etc/skel/.bashrc /var/lib/jenkins/
$ cp /etc/skel/.bash_profile /var/lib/jenkins/
$ chown jenkins.jenkins /var/lib/jenkins/.bashrc #授予该用户、用户组权限
$ chown jenkins.jenkins /var/lib/jenkins/.bash_profile

坑三:权限不足
各种没有权限,cd 目录都跳不过去 down
解决方法:
1.将jenkins用户提权到sudo组(建议)
$ usermod -a -G wheel jenkins
$ vim /etc/sudoers
$ %wheel  ALL=(ALL)NOPASSWD:ALL #sudo时,不用每次都输入密码
2.或者将jenkins的构建用户设置为root(不建议)
$ sudo vim /etc/sysconfig/jenkins
$ JENKINS_USER="root"
$ :wp! #强制保存
$ sudo systemctl restart jenkins #重启jenkins

另外,自己的执行脚本,也可以赋下执行权限

$ chmod 777 脚本.sh



坑四:Jenkins每次跑完shell脚本,项目就自动shutdown了
原因:jenkins 发布应用执行后会自动杀掉进程 !!!!!!!!!!
解决方法:
$ BUILD_ID=dontKillMe  #在shell启动脚本中设置BUILD_ID=dontKillMe
$ nohup java -jar springboot2.jar >/dev/null &
就因为这个命令,我生生构建了100来次,都没成功。有句话不知当讲不当讲


END
文章转载自源成蹊,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论