我正在参加「启航方案」
前言
你往常在做自己的项目时,是否有过布置项目太麻烦的主意?假如你是单体项目,或许没什么感受,但假如你是微服务项目,相信你应该是有过这种感受的。
这种状况下,我一般会劝你了解一下Jenkins这个玩意。怎么了解呢?我会主张你阅读本文。
本文分为两部分:
- 第一部分为Jenkins装置教程,会教你如安在Linux上装置Jenkins。
- 第二部分为一个简略的Jenkins自动化构建布置实例解说。
你能够依据自己的志愿,挑选性的越过第一部分,由于第二部分才是要点。(通过目录能够快速翻到第二部分)
Jenkins装置
当前环境
- CentOS 7.8
- Java 11(留意当前jenkins支撑的Java版别最低为Java11)
- FinalShell 3.9(操作环境)
装置Jenkins
PS:不主张运用Docker装置Jenkins,由于运用Jenkins的时候一般会调用外部程序,比如Maven、Docker、JDK、Nodejs等,所以咱们最好直接装置在本机上,以防止不必要的麻烦。
1. 增加Jenkins源
履行下面两条指令:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
2. 通过yum装置Jenkins
- yum -y install jenkins
3. 修正Jenkins端口号
- Jenkins默许端口号为8080,输入
vim /etc/sysconfig/jenkins
进行修正,将JENKINS_PORT修正为自己想要的端口号,前提得确保修正后的这个端口没有被其他的进程占用。
-
这里修正了或许还不能收效,还需求修正另一个当地,输入以下指令进行修正
vim /usr/lib/systemd/system/jenkins.service
# 找到下面的文字 Environment="JENKINS_PORT=8080" # 修正为自己想要的端口号 # :wq退出
-
修正完成后,从头加载装备文件,随后再重启Jenkins,此刻的发动端口应该现已变成你修正的端口号了。
# 从头加载装备文件 systemctl daemon-reload # 重启jenkins systemctl restart jenkins
发动Jenkins
Jenkins能够独自指定Java途径,在
/etc/init.d/jenkins
文件内大概一百行左右的位置,在最上面加上你的java途径即可:PS:当前Jenkins支撑的最低Java版别为11,假如机器上只要Java8的朋友需求先装置Java11或以上版别。Linux下多版别Java主张通过体系自带的 alternatives 来办理,参考这篇文章外加自己琢磨搞定:linux alternatives指令详解 – lpfuture
-
输入
service jenkins start
,会弹出提示:Starting jenkins (via systemctl):,意思是正在发动,第一次发动比较耗时,此刻耐性等候。假如提示超时失败,不要紧,jenkins仍然在发动,仅仅第一次发动比较耗时。假如提示内容不是超时失败,那大概率是你的Java没装置好或许版别不对。
-
放行刚刚装备的端口
# 放行15369端口 firewall-cmd --zone=public --add-port=15369/tcp --permanent # 从头加载防火墙 firewall-cmd --reload # 检查是否现已敞开 firewall-cmd --list-ports
假如你是在阿里云腾讯云等类似服务器上的话,那你还需求去控制台防火墙或许安全组开放这个端口,像这样:
开放端口时记得设置授权ip,主张你直接给自家ip地址授权悉数端口号。
-
在浏览器输入ip+port,能够进入到Jenkins的初始化界面,第一次发动要等的比较久:
进入这个界面,说明你的Jenkins现已在发动中了。
初始化装备Jenkins
-
体系发动结束后,体系会提示你检查并输入办理员暗码,依据中显示的暗码位置,打开该文件并将暗码复制粘贴即可:
# 在服务器检查暗码文件 cat /var/lib/jenkins/secrets/initialAdminPassword
-
暗码输入成功后,进入插件装置界面,假如你是新手,直接运用引荐装置的插件即可:
-
体系开端装置插件,需求等候体系装置结束,这一步或许要比较久,耐性等候:
装置进程中或许会出现部分插件装置失败的状况,不要紧,悉数处理结束后能够挑选重试。
-
装置结束后,体系会提示你创立第一个办理员账户:
-
装备Jenkins访问地址,便于一些插件运用,一般会有默许值:
-
装备完成,点击开端运用Jenkins:
随后就进入到Jenkins的办理界面了,不同版别的Jenkins界面或许会不一样:
至此,Jenkins装置结束。
扩展
假如你是运用Jenkins来对Java服务做持续集成的话,那么你还需求装置下面的插件:
- Maven Integration: Maven 集成办理插件。
- Docker plugin: Docker集成插件。
- Publish Over SSH:长途文件发布插件。
- SSH: 长途脚本履行插件。
- GitLab:拉取长途库房代码插件。
装置插件在体系办理 -> 插件办理
里边
实例解说
接下来,我会拿出我的用户微服务构建使命的实践装备来向你进行解读,当你了解了Jenkins自动化构建布置的工作原理后,你便能够很快的上手这个玩意,由于你会发现它是如此的简略。
此实例是基于我的开源项目学校博客的Jenkins部分进行解说的,开源地址:stick-i/scblogs: 学校博客,基于微服务架构且前后端别离的博客社区体系。项目后端技能栈:SpringBoot + SpringCloud + Mybatis-Plus + Nacos + MySQL + Redis + MQ + ElasticSearch + Docker。前端主要是基于Vue2和ElementUI进行开发的。 (github.com)
根本环境
在此之前,我需求介绍一下我的根本环境:
-
我的操作环境为Windows,可是我要把微服务布置到一台Linux服务器上去,包含Jenkins也是装置在这个上面的。
-
服务器上装置了Jenkins、Git、Docker、JDK、Maven、NodeJs,都是些拿来构建的东西,都是独自装置的,而不是跑在Docker上。
-
而项目服务都是跑在Docker上的,还有Redis这种轻量的中间件也跑在Docker上。
-
我的项目现已在Git库房里放好了,放github或许gitee或许gitlab都行。
全局东西装备
在Jenkins上,我现已装备好了这些构建东西的途径,以便于Jenkins能够直接调用到他们,在体系办理 -> 全局东西装备
这个页面下,这张图有点长:
在这张图上,你能够看到其中有一部分的装备是有途径的,还有一部分装备是没有途径的,这是由于我把他们的指令途径加到了体系途径上,即便不增加完整途径,Jenkins也能够调用到它们。
创立使命
好,现在咱们现已准备好环境了,能够创立一个使命来试试水了,输入使命称号,然后挑选构建一个自由风格的软件项目
:
别问我在哪新建使命,请你返回主页好好看看:
使命装备
源码办理
现在咱们现已进入到使命装备界面了,往下划到源码办理的当地,挑选Git,然后填写库房地址等信息:
增加Credentials的时候,假如你会运用SSH密钥的话,主张仍是用这个,但你得在机器上进行分外的装备,这里我就不多说了,不会的话直接用账号暗码也是能够的:
构建进程(Build Steps)
第一步:调用Maven
点击增加构建进程,由于咱们是Maven办理的项目,需求先运用Maven构建,所以第一步就用调用顶层Maven目标
:
挑选maven版别,然后target依据项目的实践状况编写,我的指令是这样的:
- 先构建jar包,履行install的进程中会先履行package的,所以我直接install。我的项目中单元测试是没怎么整理的,所以我运用参数
-Dmaven.test.skip=true
越过单元测试。 - 然后我得打包成docker镜像,我运用的是
dockerfile-maven-plugin
这个Maven插件,所以打包docker镜像的进程就也放在maven里边了,构建docker镜像的信息都在项目的pom文件里边。
install -Dmaven.test.skip=true
dockerfile:build -f user-service/user-server/pom.xml
构建完镜像了,接下来咱们直接运用这个镜像创立容器然后运转就完事了。
第二步:履行shell发动容器
再增加一个构建进程,正常状况下咱们调用docker通过指令行调用就能够了,所以咱们现在也增加一个履行shell
的进程即可。
具体的指令也很简略,就这么几步:
- 整理之前的旧镜像。由于咱们刚刚构建了一个新的镜像,新镜像和旧镜像的称号和版别咱们是没有改的,所以旧的镜像就会自动变成
<none>
,运用指令docker image prune -f
就能够整理掉这部分镜像。 - 中止旧容器运转并删去旧容器。当然咱们得先判别一下是否存在旧容器,运用容器称号来进行判别,这部分指令涉及到
shell
和docker
的指令知识,看不懂不要紧,能够直接cv,留意修正容器称号就好。 - 调用docker发动容器,依据项目实践状况来设定不同的参数,我这里设置了网络模式为host,并且映射了一个容器卷,用于读取nacos的地址,再指定容器称号为
user-service
,最终指定运用的镜像称号。
功德圆满!具体指令如下:
# 整理镜像
docker image prune -f
# 整理容器
if [ -n "$(docker ps -a -f name=user-service --format '{{.ID}}' )" ] then
#中止容器运转
docker stop $(docker ps -a -f name=user-service --format '{{.ID}}' )
#删去之前的容器
docker rm $(docker ps -a -f name=user-service --format '{{.ID}}' )
fi
# 发动容器
docker run -d --net=host -v scblogs-config:/config -e PARAMS="$params" --name user-service scblogs/user-server
最终别忘了点击保存!
后记
通过上面这些进程,我不仅装置好了Jenkins,还完成了一个根本的自动化构建脚本,这个脚本会调用maven把我的项目打包,然后构建成一个docker镜像,再通过一段shell指令去发动这个程序。
假如你想尝试发动这个构建使命的话,你能够回到主页点击右边的绿色符号。
当然,你大概率是会构建失败的。由于我的这份实例解说并没有完全的讲清楚,乃至里边有许多进程你都看不懂,是不是?
其实我并没有想写一份手把手的Jenkins运用教程,由于这要写的内容实在是太多了,我乃至能够因此写一本小册了!
还记得我在实例解说的最开端写的吗?写这个构建案例的目的是让你了解Jenkins自动化构建的原理,假如你看到这里现已发现了,这自动化构建,其实就跟咱们手动构建布置差不多!只不过是把手动操作的东西设定成了脚本,那你就现已有才能去自己探索它了。
用用插件、写写脚本,就能够搞定自己项目的自动化布置啦。
实践状况是,我有一台服务器专门用于Jenkins自动化布置,还有一台服务器专门用于出产环境,这两台服务器都能够衔接到外网,也能够互相访问到彼此。这是由于Jenkins构建时是会比较吃CPU的,为了不影响出产环境,所以我把它们分开了。当然,这种状况下,脚本也会略微复杂一点,具体流程大概是下面这样的:
假如你对我的项目感兴趣,欢迎访问项目的GitHub地址:stick-i/scblogs: 学校博客,基于微服务架构且前后端别离的博客社区体系。项目后端技能栈:SpringBoot + SpringCloud + Mybatis-Plus + Nacos + MySQL + Redis + MQ + ElasticSearch + Docker。前端主要是基于Vue2和ElementUI进行开发的。 (github.com)
都看到这里了,各位靓仔、靓妹,请帮我点一个赞吧!