环境: centos7
安装准备
- Maven(也可留在 Jenkins 安装完成后, 配置 maven 时选择自动安装)
- SVN(或 Git)
- OpenJDK(不是 JDK. 也同样可以留在安装完成后, 配置 JDK 时选择自动安装)
- Tomcat(Jenkins 也自带有 Jetty 服务器, 可使用 "service jenkins start" 来开启安装后的 Jenkins 服务, 如需使用 Tomcat 则需要将安装目录 /usr/lib/jenkins / 下的 war 包放于 Tomcat 的 webapps 目录下)
安装 Jenkins
创建 Jenkins 的 yum 源文件
vi /etc/yum.repos.d/jenkins.repo
在 Jenkins.repo 中加入以下内容:
- [jenkins]
- name=Jenkins
- baseurl=http://pkg.jenkins-ci.org/redhat
- gpgcheck=1
rpm 增加 Jenkins 源的 key
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
安装 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 等都可以在新建的项目属性中得到援引. 具体配置如下:
主目录 ->高级, 可以配置工作空间目录和构建日志目录. 每个项目 (ITEM) 默认存在于
{ITEM_FULLNAME} 下.
这里说到了工作空间, 大致就说说 Jenkins 运作流程, 首先它会绑定版本控制服务器, 如 SVN. 每当有 SVN 版本仓库有变更时 (触发器),Jenkins 会检查到并马上将版本仓库指定目录下的文件(Source files, 一般是 SVN 仓库中的一个项目) 加载到工作空间, 之后会根据指定项目路径的 pom.xml(Build)构建项目, 然后会使用 Publish Over SSH 插件 (需配置) 将构建的项目 (如 war) 传送到指定目标服务器的指定路径 (Remote directory) 下, 并且运行目标服务器的 shell 脚本(该脚本主要完成 war 包移动至 webapps 下, 并重启 tomcat).
Maven 项目配置, 在全局 MAVEN_OPTS 中添加 "-Dmaven.repo.local=" 你的 maven 本地仓库路径 " 来使 maven 强制使用该路径作为自身的本地仓库.
Jenkins Location 配置, Jenkins Location 为 Jenkins 访问地址, 系统管理员邮件地址应和邮件服务器配置的发件人邮件地址保持一致.
Subversion 配置, 选择安装的 SVN 版本和版本库地址.
Extended E-mail Notification, 用户自定义邮件通知, 下面以 QQ 邮箱为例:
SMTP server: http://smtp.qq.com (SMTP 服务器 IP) Default user E-mail suffix:@qq.com(默认邮件后缀) 高级 ->勾选 Use SMTP Authentication(身份认证) User Name mailto::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
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 等.
JDK 配置: 可选择自动安装, 然后勾选合适的 JDK 版本进行安装, 或者指定已安装的 JDK 目录.
Maven Configuration 配置: maven 的 setting.xml 路径配置.
Maven 配置: 可选择自动安装, 然后勾选合适的 Maven 版本进行安装, 或者指定已安装的 Maven 目录.
步骤 4
在目标服务器上传自动化部署脚本, 文件详见上传文件 "http://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 名称)-> 进入该项目 ->配置, 具体配置如下:
General, 项目名称不用说, 勾选 丢弃旧的构建 ->保存构建天数, 保持构建的最大个数(自己视情况而定), 勾选 参数化构建过程 ->choice parameter: Name=VERSION Choices=1.0.1 Description = 产品系统 / 模块的版本号
源码管理 Subversion: Repository URL=SVN://[ip]/SVN 版本仓库 / 其中一个项目(文件夹) Credentials=SVN 访问用户名和密码(Add 中添加 Username 和 Password 即可)
构建触发器, 勾选 Poll SCM, 日程表 = H/60 * * * *(表示每 60 分钟检查 SVN 版本库一次)
Build: Root POM=pom.xml(在工作空间目录下 pom.xml 的相对位置, 其实也就是 SVN 配置中 Repository URL 属性后面的地址) Goals and options=clean -DskipTests=true install -Pprod -U(maven 执行命令, 跳过了 Test)
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(自动部署脚本在目标服务器的位置, 并传入第一个参数: 项目名)
构建后操作, 增加构建后操作步骤 ->Editable Email Notification->Advanced Settings: Send-TO 删除 Developers, 在高级里面直接配置: Recipient List = 接受者邮箱
自动构建和手动构建
A: 根据上面配置, 将每 60 分钟查看一次 SVN 版本库是否有变更并执行构建, 这既是自动构建.
B: 手动构建, 选择 Build with Parameter->可选择此处构建产生的版本 ->立即构建. 左边导航栏可看到构建历史, 点击小球可以查看控制台输出.
注意:
项目配置中, 一般像路径这些东西, 配置有问题都会出现红色警告的, 除了 Publish Over SSH 配置外.
上面没说到的配置, 都直接默认即可.
Jenkins 搭建到这里就结束了, 在搭建 Jenkins 的路上走了不少坑, 特此记一笔.
来源: https://juejin.im/post/5c1c52816fb9a049d441c75c