我正在参加「启航方案」

前言

你往常在做自己的项目时,是否有过布置项目太麻烦的主意?假如你是单体项目,或许没什么感受,但假如你是微服务项目,相信你应该是有过这种感受的。

这种状况下,我一般会劝你了解一下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源

履行下面两条指令:

  1. sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
  2. sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

2. 通过yum装置Jenkins

  • yum -y install jenkins

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

3. 修正Jenkins端口号

  1. Jenkins默许端口号为8080,输入vim /etc/sysconfig/jenkins进行修正,将JENKINS_PORT修正为自己想要的端口号,前提得确保修正后的这个端口没有被其他的进程占用。

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

  1. 这里修正了或许还不能收效,还需求修正另一个当地,输入以下指令进行修正

    vim /usr/lib/systemd/system/jenkins.service
    
    # 找到下面的文字
    Environment="JENKINS_PORT=8080" # 修正为自己想要的端口号
    # :wq退出
    

    Jenkins自动化部署实例讲解,另附Jenkins安装教程!

  2. 修正完成后,从头加载装备文件,随后再重启Jenkins,此刻的发动端口应该现已变成你修正的端口号了。

    # 从头加载装备文件
    systemctl daemon-reload
    # 重启jenkins
    systemctl restart jenkins
    

发动Jenkins

Jenkins能够独自指定Java途径,在/etc/init.d/jenkins文件内大概一百行左右的位置,在最上面加上你的java途径即可:

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

PS:当前Jenkins支撑的最低Java版别为11,假如机器上只要Java8的朋友需求先装置Java11或以上版别。Linux下多版别Java主张通过体系自带的 alternatives 来办理,参考这篇文章外加自己琢磨搞定:linux alternatives指令详解 – lpfuture

  1. 输入service jenkins start,会弹出提示:Starting jenkins (via systemctl):,意思是正在发动,第一次发动比较耗时,此刻耐性等候。假如提示超时失败,不要紧,jenkins仍然在发动,仅仅第一次发动比较耗时。

    假如提示内容不是超时失败,那大概率是你的Java没装置好或许版别不对。

  2. 放行刚刚装备的端口

    # 放行15369端口
    firewall-cmd --zone=public --add-port=15369/tcp --permanent
    # 从头加载防火墙
    firewall-cmd --reload
    # 检查是否现已敞开
    firewall-cmd --list-ports
    

    假如你是在阿里云腾讯云等类似服务器上的话,那你还需求去控制台防火墙或许安全组开放这个端口,像这样:

    Jenkins自动化部署实例讲解,另附Jenkins安装教程!

    开放端口时记得设置授权ip,主张你直接给自家ip地址授权悉数端口号。

  3. 在浏览器输入ip+port,能够进入到Jenkins的初始化界面,第一次发动要等的比较久:

    进入这个界面,说明你的Jenkins现已在发动中了。

    Jenkins自动化部署实例讲解,另附Jenkins安装教程!

初始化装备Jenkins

  1. 体系发动结束后,体系会提示你检查并输入办理员暗码,依据中显示的暗码位置,打开该文件并将暗码复制粘贴即可:

    # 在服务器检查暗码文件
    cat /var/lib/jenkins/secrets/initialAdminPassword
    

    Jenkins自动化部署实例讲解,另附Jenkins安装教程!

  2. 暗码输入成功后,进入插件装置界面,假如你是新手,直接运用引荐装置的插件即可:

    Jenkins自动化部署实例讲解,另附Jenkins安装教程!

  3. 体系开端装置插件,需求等候体系装置结束,这一步或许要比较久,耐性等候:

    Jenkins自动化部署实例讲解,另附Jenkins安装教程!

    装置进程中或许会出现部分插件装置失败的状况,不要紧,悉数处理结束后能够挑选重试。

  4. 装置结束后,体系会提示你创立第一个办理员账户:

    Jenkins自动化部署实例讲解,另附Jenkins安装教程!

  5. 装备Jenkins访问地址,便于一些插件运用,一般会有默许值:

    Jenkins自动化部署实例讲解,另附Jenkins安装教程!

  6. 装备完成,点击开端运用Jenkins:

    Jenkins自动化部署实例讲解,另附Jenkins安装教程!

    随后就进入到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自动化部署实例讲解,另附Jenkins安装教程!

在这张图上,你能够看到其中有一部分的装备是有途径的,还有一部分装备是没有途径的,这是由于我把他们的指令途径加到了体系途径上,即便不增加完整途径,Jenkins也能够调用到它们。

创立使命

好,现在咱们现已准备好环境了,能够创立一个使命来试试水了,输入使命称号,然后挑选构建一个自由风格的软件项目

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

别问我在哪新建使命,请你返回主页好好看看:

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

使命装备

源码办理

现在咱们现已进入到使命装备界面了,往下划到源码办理的当地,挑选Git,然后填写库房地址等信息:

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

增加Credentials的时候,假如你会运用SSH密钥的话,主张仍是用这个,但你得在机器上进行分外的装备,这里我就不多说了,不会的话直接用账号暗码也是能够的:

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

构建进程(Build Steps)

第一步:调用Maven

点击增加构建进程,由于咱们是Maven办理的项目,需求先运用Maven构建,所以第一步就用调用顶层Maven目标

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

挑选maven版别,然后target依据项目的实践状况编写,我的指令是这样的:

  1. 先构建jar包,履行install的进程中会先履行package的,所以我直接install。我的项目中单元测试是没怎么整理的,所以我运用参数-Dmaven.test.skip=true越过单元测试。
  2. 然后我得打包成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的进程即可。

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

具体的指令也很简略,就这么几步:

  1. 整理之前的旧镜像。由于咱们刚刚构建了一个新的镜像,新镜像和旧镜像的称号和版别咱们是没有改的,所以旧的镜像就会自动变成<none>,运用指令docker image prune -f 就能够整理掉这部分镜像。
  2. 中止旧容器运转并删去旧容器。当然咱们得先判别一下是否存在旧容器,运用容器称号来进行判别,这部分指令涉及到shelldocker的指令知识,看不懂不要紧,能够直接cv,留意修正容器称号就好。
  3. 调用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自动化部署实例讲解,另附Jenkins安装教程!


后记

通过上面这些进程,我不仅装置好了Jenkins,还完成了一个根本的自动化构建脚本,这个脚本会调用maven把我的项目打包,然后构建成一个docker镜像,再通过一段shell指令去发动这个程序。

假如你想尝试发动这个构建使命的话,你能够回到主页点击右边的绿色符号。

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

当然,你大概率是会构建失败的。由于我的这份实例解说并没有完全的讲清楚,乃至里边有许多进程你都看不懂,是不是?

其实我并没有想写一份手把手的Jenkins运用教程,由于这要写的内容实在是太多了,我乃至能够因此写一本小册了!

还记得我在实例解说的最开端写的吗?写这个构建案例的目的是让你了解Jenkins自动化构建的原理,假如你看到这里现已发现了,这自动化构建,其实就跟咱们手动构建布置差不多!只不过是把手动操作的东西设定成了脚本,那你就现已有才能去自己探索它了。

用用插件、写写脚本,就能够搞定自己项目的自动化布置啦。

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

实践状况是,我有一台服务器专门用于Jenkins自动化布置,还有一台服务器专门用于出产环境,这两台服务器都能够衔接到外网,也能够互相访问到彼此。这是由于Jenkins构建时是会比较吃CPU的,为了不影响出产环境,所以我把它们分开了。当然,这种状况下,脚本也会略微复杂一点,具体流程大概是下面这样的:

Jenkins自动化部署实例讲解,另附Jenkins安装教程!

假如你对我的项目感兴趣,欢迎访问项目的GitHub地址:stick-i/scblogs: 学校博客,基于微服务架构且前后端别离的博客社区体系。项目后端技能栈:SpringBoot + SpringCloud + Mybatis-Plus + Nacos + MySQL + Redis + MQ + ElasticSearch + Docker。前端主要是基于Vue2和ElementUI进行开发的。 (github.com)


都看到这里了,各位靓仔、靓妹,请帮我点一个赞吧!

Jenkins自动化部署实例讲解,另附Jenkins安装教程!