阅读 325

Linux下搭建Jenkins持续集成

环境:centos7

安装准备

  1. Maven(也可留在Jenkins安装完成后,配置maven时选择自动安装)
  2. SVN(或Git)
  3. OpenJDK(不是JDK。也同样可以留在安装完成后,配置JDK时选择自动安装)
  4. Tomcat(Jenkins也自带有Jetty服务器,可使用“service jenkins start”来开启安装后的Jenkins服务,如需使用Tomcat则需要将安装目录 /usr/lib/jenkins/下的war包放于Tomcat的webapps目录下)

安装Jenkins

  1. 创建Jenkins的yum源文件
vi /etc/yum.repos.d/jenkins.repo
复制代码
  1. 在 Jenkins.repo中加入以下内容:
[jenkins]
name=Jenkins
baseurl=http://pkg.jenkins-ci.org/redhat
gpgcheck=1
复制代码
  1. rpm增加Jenkins源的key
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
复制代码
  1. 安装 jenkins
sudo yum install jenkins
复制代码

Jenkins相关目录和配置

安装完成后,有如下相关目录:

/usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里。 /etc/sysconfig/jenkins:jenkins 配置文件,端口、JENKINS_HOME等都在这里配置。

配置如下:

JENKINS_HOME="/usr/lib/jenkins"
JENKINS_JAVA_CMD=""
JENKINS_USER="jenkins" 
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_PORT="8080"
JENKINS_AJP_PORT="8009"
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""
复制代码

启动Jenkins

A:如果是使用自带的Jetty服务器,启动可以使用命令:sudo service jenkins start。

B:如果是部署在Tomcat服务器上,直接启动Tomcat即可。

初始化Jenkins

  1. 打开页面http://[ip]:[port]/jenkins。
  2. 初始启动需要密码,密码文件位于/var/lib/jenkins/secrets/initialAdminPassword, 复制填入,点击Continue。
  3. Customize Jenkins选择Install suggested plugins即可。
  4. 创建用户。

配置Jenkins

步骤1

配置前先安装Publish Over SSH插件,用于支持远程shell。

安装方法: 首页->系统管理->管理插件->可选插件->过滤(搜索插件名)->勾选->点击直接安装即可(需要等待一段时间,详情可以查看控制台输出日志(圆球形状)变化)。

步骤2

配置系统设置,Jenkins的所有全局配置都在系统管理->系统设置中,这里面配置的全局属性如邮件系统、Maven项目设置、Post Steps等都可以在新建的项目属性中得到援引。具体配置如下:

  1. 主目录->高级,可以配置工作空间目录和构建日志目录。每个项目(ITEM)默认存在于${JENKINS_HOME}/workspace/${ITEM_FULLNAME}下。

这里说到了工作空间,大致就说说Jenkins运作流程,首先它会绑定版本控制服务器,如svn。每当有svn版本仓库有变更时(触发器),Jenkins会检查到并马上将版本仓库指定目录下的文件(Source files,一般是svn仓库中的一个项目)加载到工作空间,之后会根据指定项目路径的pom.xml(Build)构建项目,然后会使用Publish Over SSH插件(需配置)将构建的项目(如war)传送到指定目标服务器的指定路径(Remote directory)下,并且运行目标服务器的shell脚本(该脚本主要完成war包移动至webapps下,并重启tomcat)。

  1. Maven项目配置,在全局MAVEN_OPTS中添加“-Dmaven.repo.local=“你的maven本地仓库路径”来使maven强制使用该路径作为自身的本地仓库。

  2. Jenkins Location配置,Jenkins Location为Jenkins访问地址,系统管理员邮件地址应和邮件服务器配置的发件人邮件地址保持一致。

  3. Subversion配置,选择安装的svn版本和版本库地址。

  4. Extended E-mail Notification,用户自定义邮件通知,下面以QQ邮箱为例:

复制代码

SMTP server:smtp.qq.com(SMTP服务器IP) Default user E-mail suffix:@qq.com(默认邮件后缀) 高级->勾选 Use SMTP Authentication(身份认证) User Name :xxxxxxxxxxxx@qq.com(和上面配置的系统管理员邮件地址一致) Password:••••••••••••••••(QQ邮件设置中需开启smtp服务,并且会生成一串授权码,此处填入授权码) 勾选 Use SSL SMTP port:465 Charset:UTF-8 Default Content Type:HTML(text/html)

///////////////////////////////【内容模板参考】////////////////////////////////

(本邮件是程序自动下发的,请勿回复,请相关人员fix it,重新提交到svn构建)


    项目名称:$PROJECT_NAME<br/><hr/>

    构建编号:$BUILD_NUMBER<br/><hr/>

    SVN版本号:${SVN_REVISION}<br/><hr/>

    构建状态:$BUILD_STATUS<br/><hr/>

    触发原因:${CAUSE}<br/><hr/>

    构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>

    构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>

    变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
复制代码

6. 邮件通知配置如下:
```ruby
SMTP服务器:smtp.qq.com
用户默认邮件后缀:@qq.com
高级->勾选 使用SMTP认证
用户名:xxxxxxxxxx@qq.com
密码:••••••••••••••••(同上)
勾选 使用SSL协议
SMTP端口:465
Reply-To Address:xxxxxxxxxxxx@qq.com(收件邮箱)
字符集:UTF-8
复制代码
  1. Publish over SSH配置如下:
Jenkins SSH Key
Passphrase:••••••••••••••••
Path to key 
Key 
Disable exec
Uame:SSH_Test
Username:root
Remote Directory:/data/Jenkins_War/(目标服务器war包接收路径)
勾选 Use password authentication, or use a different key
Passphrase / Password:••••••••••••••••
Path to key
Key
Passphrase:••••••••••••••••
Path to key 
Key 
Disable exec
Name:SSH_Test
Username:root
Remote Directory:/data/Jenkins_War/(目标服务器war包接收路径)
勾选 Use password authentication, or use a different key
Passphrase / Password:••••••••••••••••
Path to key
Key
以上配置的Passphrase为目标服务器root用户的登录密码,这里直接使用的是登录密码。如需使用SSH秘钥,可在在Path to key配置私钥路径,Key中配置私钥内容,并在目标服务器/home/相应登录用户文件夹
/.ssh/authorized_keys中添加公钥(如果没有该文件,则手动创建之)。
复制代码

步骤3

Global Tool Configuration,全局工具配置,里面配置Jenkins需要使用到的工具的配置,如svn、maven、jdk等。

  1. JDK配置:可选择自动安装,然后勾选合适的JDK版本进行安装,或者指定已安装的JDK目录。
  2. Maven Configuration配置:maven的setting.xml路径配置。
  3. Maven 配置:可选择自动安装,然后勾选合适的Maven 版本进行安装,或者指定已安装的Maven目录。

步骤4

在目标服务器上传自动化部署脚本,文件详见上传文件“deploy.sh”。大概逻辑为:

脚本支持三个参数,默认只传入第一个参数,第一个参数:应用名称;第二个参数:Tomcat端口;第三个参数:Tomcat所在路径。
设定相关变量(Tomcat所在路径Tomcat_Home、Tomcat端口Tomcat_port、应用名称Project)
Kill掉Tomcat进程
删除应用
拷贝新的war包
备份war包
删除war包
启动Tomcat
复制代码

对项目进行持续集成

一、 对于maven项目,需要先安装Maven Integration plugin插件,安装方法同安装Publish Over SSH插件。 二、首页->新建->构建一个maven项目(输入item名称)->进入该项目->配置,具体配置如下:

  1. General,项目名称不用说,勾选 丢弃旧的构建->保存构建天数、保持构建的最大个数(自己视情况而定),勾选 参数化构建过程->choice parameter: Name=VERSION Choices=1.0.1 Description=产品系统/模块的版本号

  2. 源码管理Subversion: Repository URL=svn://[ip]/svn版本仓库/其中一个项目(文件夹) Credentials=svn访问用户名和密码(Add中添加Username和Password即可)

  3. 构建触发器,勾选 Poll SCM,日程表=H/60 * * * *(表示每60分钟检查svn版本库一次)

  4. Build: Root POM=pom.xml(在工作空间目录下pom.xml的相对位置,其实也就是svn配置中Repository URL 属性后面的地址) Goals and options=clean -DskipTests=true install -Pprod -U(maven执行命令,跳过了Test)

  5. Post Steps,Add post-build step->Send files or execute commands over SSH,配置如下:

Name=下拉选择开始系统设置中设置的SSH-Test
Source files=target/*.war(相对于工作空间目录下的war包相对位置,其实也就是svn配置中Repository URL属性后面的地址)
Remove prefix=target/(移除前缀)
Remote directory=war(在系统设置中配置的Remote Directory路径下的相对位置,即该项目将传于目标服务器/data/Jenkins_War/war/目录下)
Exec command=/data/Jenkins_War/deploy.sh MySpringBoot(自动部署脚本在目标服务器的位置,并传入第一个参数:项目名)
复制代码
  1. 构建后操作,增加构建后操作步骤->Editable Email Notification->Advanced Settings: Send-TO 删除Developers,在高级里面直接配置:Recipient List=接受者邮箱

自动构建和手动构建

A:根据上面配置,将每60分钟查看一次svn版本库是否有变更并执行构建,这既是自动构建。

B:手动构建,选择Build with Parameter->可选择此处构建产生的版本->立即构建。左边导航栏可看到构建历史,点击小球可以查看控制台输出。

注意:

  • 项目配置中,一般像路径这些东西,配置有问题都会出现红色警告的,除了Publish Over SSH配置外。
  • 上面没说到的配置,都直接默认即可。

Jenkins搭建到这里就结束了,在搭建Jenkins的路上走了不少坑,特此记一笔。

关注下面的标签,发现更多相似文章
评论