Jenkins简介

       Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作。简单点来讲就是配置好Jenkins以后可以一键发布项目,包括从git master分支拉取最新的代码,然后打包,然后上传到远程Linux服务器发布等一系列步骤它都可以帮你一键完成。这无疑可以省去很多程序员重复性繁琐的操作。特别是对于现在的spring cloud微服务来说,一个项目由多个小项目组成,每个小项目都独立部署,使用jenkins是最好的部署和管理工具了。

  • 安装Jenkins
  1. 安装JDK
  2. 安装Git (公钥要配置好,保证本地和远程库可以正常push代码)
  3. 安装Maven  安装完maven在/etc/profile中配置环境变量。
  4. 安装Jenkins  https://jenkins.io/ 官网下载war包,使用命令java -jar jenkins.war运行。

     Jenkins默认访问8080端口(注意本地机器防火墙配置)

     如果端口8080已经被占用,要修改配置文件来改变端口。

     sudo vi /etc/default/jenkins

     找到HTTP_PORT=8080,把8080改为8000,然后

      sudo service jenkins restart

初始化配置Jenkins

    1. 在Jenkins启动后访问http://localhost:8080进入Jenkins主页。登录。

     

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins

    2. 在以上第二步使用java –jar jenkins.war运行后,console会输出一段密钥将它粘贴到主页输入框,或者去它指定的地址去复制。

    3. 进入选择插件安装界面,选择第一个(Install suggested plugins)

    

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins_02

    4. 插件安装完成之后,需要创建第一个用户

    

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_git_03

    5. 创建用户之后,就可以使用jenkins了

    

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins_04

 

使用Jenkins

    1. 将你的maven工程使用git上传到你的Git(Git Lab或者GitHub)

    2. 进入Jenkins主页

    

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_jenkins_05

    3. 安装Maven插件

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins_06

  

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_git_07

  

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_git_08

    4. 以同样的方式安装git plugin插件(用于从git拉取最新的代码)和publish over ssh插件(用于上传打包好的项目到远程Linux)。进入系统管理--管理插件--可选插件,在搜索框里面输入git plugin 和publish over ssh,然后点击安装即可。安装好以后可以在“已安装”选项里面看看是否安装成功。

 

    5. 配置Maven 和 JDK 和Git

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_jenkins_09

    6. 选择你本地安装好的maven jdk 路径(git 直接 yum install git)

        安装后whereis git查看git可执行文件路径,填入Path to Git executable

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins_10

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins_11

    7. 安装完成后返回主页,创建一个新的jenkins任务

    

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_git_12

8 .如果你的maven插件安装没有问题,在新建任务时会有Maven Project选项,起名创建。

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins_13

  9. 开始配置Jenkins任务

        ① General基本设置

        General注意到丢弃旧的构建Disable this project,jenkins默认情况下会保存每次的构建结果,时间久了可想而知硬盘容易塞满,我在实际使用的过程中发现确实很占硬盘,使用这个功能可以删除历史构建保持jenkins工作目录的轻便。

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_上传_14

 

      ② Source Code Managerment源码管理工具

       使用git,添加地址、用户名密码,设置使用分支,git验证也可以使用ssh key的方式,点击add添加git账号密码。

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_上传_15

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_上传_16

 在Kind下拉菜单可以选择认证方式,一般使用用户名密码或者密钥配置。

    ③ Build Triggers 构建触发器

     顾名思义就是如何触发构建操作,在这可以设置自动定时执行,还可以远程触发构建,远程机器通过访问url http://jenkins服务器IP:8080/job/项目名称/build?token=TOKEN_NAME来触发构建。丢给小组同事们这一个url后他们就可以潇洒的发测试包啦。

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins_17

 

④Builde Environment构建环境

⑤Pre Steps

       构建环境和preSteps主要是触发构建之前的一些操作,删除workspace,执行远程命令等等。我在构建前做了两件事,清空启动日志,备份原有jar包,install依赖的包

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins_18

    ⑥ Build构建

这块就是打包的配置了,配置构建项目的pom所在路径,在Goals and options上设置了clean package -Dmaven.test.skip=true跳过测试步骤。注意,如果这里写相对路径,应该是相对于JENKINS_HOME/workspace/构建名/   的路径,我的jenkins版本是2.141默认主目录路径是/var/lib/jenkins

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins_19

 

    ⑦ Post Steps 打包后配置※

        1)先保存上述配置,打开jenkins首页,点击“系统管理”-->“系统设置”,下拉找到找到publish over ssh,进行以下设置(请确保)面的步骤中publish over ssh插件已经安装成功,如果没有发现,那就是还没有安装成功,请返回去安装)。

        2)这里的ip设置为目标部署服务器的ip.这里Passphrase为jenkins服务器密码,或者导入jenkins私钥到key

     

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_git_20

以下是我的配置

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_jenkins_21

 

 

     3)进入上面的已经创建好的jenkinsWeb项目,点击配置,下拉找到Post Steps进行配置。          

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_Jenkins_22

       这块是重中之重,是紧跟在打包之后的操作,使用linux shell编写操作。Shell脚本请自行编写….

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_git_23

参数说明:

Transfer SetSource files:表示要上传的本地的jar包及路径,可到工作空间去看。

Remove prefix:表示要上传时要去除的文件夹,即只上传jar包。

remote driectory:即表示执行时的路径,相当于把jar包上传到这里了。

exec commad:要执行的命令脚本。

一下是我的启动脚本内容,仅做参考:

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_上传_24

 

   ⑧  Build Settings构建设置

        可配置被通知邮箱,服务器邮箱需要服务器搭建smtp服务,然后在jenkins首页->“系统管理”-->“系统设置”去配置发件邮箱

 

   ⑨  Post-build Action构建后的设置

        这个按需求自行配置

    10. 以上配置完成后,可以开始构建你的项目

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_上传_25

 

     点击Console output查看日志输出

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_jenkins_26

jenkins springcloud多模块docker发布 jenkins部署springcloud项目_上传_27

 

至此,使用Jenkins完成自动化部署配置完成。

 

总结部署过程遇到的各种坑:

1、所构建项目的pomx.xml路径问?配置时候提示->没有这个文件.pom.xml

     创建一个jenkins构建项目时,会在jenkins主目录下的workspace路径下创建与构建名同名的文件夹,git插件会将项目拉去到该文件夹下,因此pom文件的路径应该是相对于该路径.

2、启动过程中,执行脚本保存,console输出没有文件执行权限

     jenkins安装后,会在服务器中新增一个jenkins用户,jenkins的构建操作都是以该用户以及用户组去操作的,因此如果该用户没有操作文件的权限就汇报没有权限错误。修改方法:1,为该用户添加权限。2,将用户修改为root而不是用jenkins用户

这里只针对2方法说明:

vim /etc/sysconfig/jenkins

修改$JENKINS_USER="root"           ##Tips:同样,该配置文件可以指定jenkins主目录而不使用默认

修改Jenkins相关文件夹用户权限

chown -R root:root /var/lib/jenkins

chown -R root:root /var/cache/jenkins

chown -R root:root /var/log/jenkins

重启Jenkins服务并检查运行Jenkins的用户是否已经切换为root

service jenkins restart

# 查看Jenkins进程所属用户

ps -ef | grep jenkins

# 若显示为root用户,则表示修改完成.

3、脚本执行成功,但是远程服务并没有启动,查看服务启动日志显示:

nohup: failed to run command `java': No such file or directory

这是因为远程服务执行脚本需要配置jdk环境变量,

脚本中添加环境变量

export JAVA_HOME=/home/sinorail/jdk1.8.0_121

export PATH=$JAVA_HOME/bin:$PATH

4、启动打包报错 Failure to find xxxx.jar http://repo.maven.apache.org/maven2 was cached in the local repository

 如果你的项目依赖于其他工程,当然你在mvn package当前工程前,要先install所依赖的工程;然而jenkins默认会有一套自己的本地manve库在其主目录下,而不使用自己所配置的本地库.

解决方法:

  先将jenkins用户改为root,然后在构建前的执行脚本中添加mvn clean install 父pom的内容。也就是说,让jinkins使用我们自己的库,并且每次构建都在父pom中install一下,然后再构建当前项目.

 

这样 这个问题就完美解决了。