Jenkins 使用说明
一、基本信息
Jenkins 是一个可扩展的持续集成引擎。
主要用于:
- 持续、自动地构建/测试软件项目。
- 监控一些定时执行的任务。
官网地址:https://jenkins.io/
Jenkins教程地址:官网、中文参考w3cschool
参考:Jenkins配置maven构建地址、Jenkins Github Hook搭建
Jenkins下载地址
Jenkins触发方式
- 类cron表达式 H * * * * (Min H d Mon W)
- token触发(触发远程构建)
- webhook触发(轮询 SCM)
- 前后项目构建完成触发
- 点击构建触发
使用步骤
- 下载Jenkins
- 初始化Jenkins
- 下载Jenkins插件
- 配置Jenkins系统设置
- 配置Jenkins全局工具配置
- 创建项目
- git地址(源码管理)
- 触发时间
- 构建命令(gradle build)
- 编译完成目标应用服务器执行shell(copy war包,停止、启动容器等操作)
- 等待触发
二、配置Jenkins
本次使用配置如下
项目 | 版本 |
---|---|
Jenkins | 2.141 |
应用服务器JDK | 1.8.0_131 |
Jenkins服务器JDK | 1.8.0_171 |
springboot | 2.0.1.RELEASE |
Jenkins服务器系统 | mac 10.13.6 |
应用服务器系统 | CentOS Linux release 7.3.1611 |
1. 启动Jenkins服务
命令方式
nohup java -jar jenkins.war –ajp13Port=-1 –httpPort=8084 1>send.out 2>&1 &
nohup java -jar jenkins.war –httpPort=8084 1>send.out 2>&1 &
说明:
jenkins.war为可执行war包自带Jetty服务器,直接启动即可。
修改端口通过参数httpPort=8084,设置http侦听端口。 -1表示禁用,默认为8080
- ajp13Port:设置ajp13监听端口。 -1表示禁用,默认值为8009
Tomcat方式
将下载的war包放入tomcat/webapp目录,启动tomcat即可
2. 初始化Jenkins
访问 浏览器访问:http://localhost:8084/
端口改为你所指定的端口,下图为第一次打开页面显示
第一次
启动Jenkins时,出于安全考虑,Jenkins会自动生成一个随机的按照口令。注意控制台输出的口令,复制下来,然后在浏览器输入密码:
INFO:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
0cca37389e6540c08ce6e4c96f46da0f
This may also be found at: /root/.jenkins/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
输入密钥点击Continue
即可进入用户自定义插件界面,建议选择安装官方推荐插件。
接下来是进入插件安装进度界面:
插件一次可能不会完全安装成功,可以点击Retry再次安装。直到全部安装成功
等待一段时间之后,插件安装完成,配置用户名密码:
输入:root/passw0rd 及其他信息之后点击Save and Finish
跳转到主页面。
3. 安装Jenkins插件
有很多插件都是选择的默认的安装的,所以现在需要我们安装的插件不多,Git plugin、Maven Integration plugin、publish over SSH、GitHub plugin。
插件安装:首页>系统管理 > 插件管理 > 可选插件,勾选需要安装的插件,点击直接安装。
4. 配置系统设置
进入系统设置:首页>系统管理 > 系统设置
4.1邮件配置
项目失败,发送邮件时使用。
- 设置Jenkins服务器地址和管理员邮件(发送邮件方)
- 设置发件人信息,安装不同邮箱有不同设置。可自行百度。配置完成点击
Test configuration
测试
- 测试连接成功,配置完毕,点击应用
4.2. 设置SSH认证
设置Jenkins服务器和应用服务器ssh传输免密认证。Jenkins用于传输文件、脚本等。
4.2.1 配置Jenkins服务器密钥
若已配置(cat ~/.ssh/id_rsa.pub
有公钥)则可省略这一步
jenkins服务器上生成密钥对,使用ssh-keygen -t rsa
命令,输入下面命令 一直回车,一个矩形图形出现就说明成功,在~/.ssh/下会有私钥id_rsa和公钥id_rsa.pub。期间可以输入密钥的密码。
# Jenkins服务器执行
ssh-keygen -t rsa
# 查看公钥
cat ~/.ssh/id_rsa.pub
4.2.2 配置应用服务器认证Jenkins服务器密钥
# Jenkins服务器执行,ssh-copy-id -i pubKeyFileName userName@Host
cd ~/.ssh/
ssh-copy-id -i id_rsa.pub aimServiceUserName@192.168.0.xx
ssh aimServiceUserName@192.168.0.xx
# 应用服务器执行
cd ~/.ssh/
chmod 644 authorized_keys
service sshd restart
测试:Jenkins服务器ssh登录应用服务器,登录成功即可。如下命令
# Jenkins服务器执行,ssh连接应用服务器
ssh userName@Host
如果还是提示需要输入密码,则有以下原因
- a. 非root账户可能不支持ssh公钥认证(看服务器是否有限制)
- b. 传过来的公钥文件权限不够,可以给这个文件授权下 chmod 644 authorized_keys
- c. 使用root账户执行ssh-copy-id -i ~/.ssh/id_rsa.pub 这个指令的时候如果需要输入密码则要配置sshd_config
# Jenkins服务器执行,
vi /etc/ssh/sshd_config
# sshd_config内容开始
PermitRootLogin no
# sshd_config内容结束
# Jenkins服务器重启ssh服务
service sshd restart
测试:Jenkins服务器ssh登录应用服务器,登录成功即可。
4.2.3 Jenkins服务配置ssh
如下图:Passphrase、Path to key两个字段填写本机(Jenkins服务器)的密钥密码(无则不填)和密钥地址
SSH Services是设置目标(应用服务器ansible)服务器免密认证。可填写多个目标服务器,填写完毕点击测试。成功即可。
- Name:设置目标服务器名称,以便以后配置选择使用;
- Hostname:目标服务器地址;
- Username:目标服务器用户名;
- Remote Directory:Jenkins在目标服务器的根目录,该目录必须已存在且该用户有所有权限。
- 配置完毕点击应用
4.3 Github WebHok配置
用于创建项目的webhook配置,需Jenkins服务为在线环境,否则Github不能访问到Jenkins接口。
4.3.1 Github配置
- github 创建token
进入github –> setting –>Developer settings–> Personal Access Token –> Generate new token–>Generate new token
输入Token description:可添加对此token的简短描述。
勾选repo和admin:repo_hook即可点击Generate token
按钮生成token,立马备份此token。一旦丢失不可找回。
- Github配置webhook
进入GitHub上指定的项目 –> setting –> WebHooks –> add webhook –> 输入刚刚部署jenkins的服务器的地址,如:http://12.232.121.121:8084/github-webhook–>点击Add webhook
4.3.2 Jenkins配置
Jenkins主页–>系统管理 –> 系统设置 –> GitHub –> GitHub Sever–>Add GitHub Sever
API URL:默认:https://api.github.com即可
Credentials:点击add,如下图。配置完毕点击Add。
设置完成后,点击TestConnection
,提示Credentials verified for user UUserName, rate limit: xxx
,则表明有效。
- 配置完毕,点击应用
5. 设置全局工具
Jenkines首页–>系统管理–>全局工具配置 jdk路径,
配置JDK、GIT、GRADLE三项即可,注意以下几点
- JAVA_HOME:是java安装的
根目录
,$JAVA_HOME/bin/java - Path to Git executable:是git的
可执行文件
的全路径,Linux、Mac为git,Windows为git.exe - GRADLE_HOME:是gradle安装的
根目录
,$GRADLE_HOME/bin/gradle
三、使用Jenkins构建项目
在此构建一个Github、Webhook、SpringBoot、Gradle的可持续化部署的项目gradle4springboot
使用Gradle管理项目依赖、测试
使用Github进行源码版本管理
使用Github Webhook触发任务的构建
使用SpringBoot作为项目框架
使用Email发送执行任务失败
使用ssh发送jar包
使用shell脚本进行项目部署,停止、部署、启动
?使用构建失败回滚上一版本
1. 配置任务名及形式,创建一个新的任务
Jenkins主页–>新建任务–>输入任务名称gradle4springboot–>选择构建自由风格的软件项目—>点击确定
2. 配置任务描述及项目地址
进入配置页面第一项即是,完描述点击应用。
3. 配置源码管理(SCM)
配置源码管理,Jenkins会从此处获取源码,并且提交每次任务的执行结果。
选中Git
添加:
Repository URL
,用于git clone命令添加:
Credentials
,github用户名和本机私钥,点击Add
按钮- 选则
类型
为SSH Username with private key
- 输入
Username
该项目github具有编辑权限的用户名 - 输入
PriateKey
是Jenkins服务器的私钥,查看命令cat ~/.ssh/id_rsa
- 输入
描述
,必要,用于区分其他凭据 - 点击
添加
- 选则
填写
Branch Specifier (blank for 'any')
,需要clone的分支,如:refs/heads/master、refs/heads/dev1点击应用
4. 配置构建触发器
配置任务运行的条件
- 勾选
触发远程构建
,用于Http Get形式触发,如:http://localhost:8084/job/gradle4springboot/build?token=passw0rd - 勾选
轮询SCM
,并且日程表不填写任何东西。用于Github Webhook。 - 点击应用
5. 配置构建环境
- 勾选
Use secret text(s) or file(s)
- 选择
Specific credentials
- Add按钮旁边选择,之前配置的github webhook的内容,4.3.2
- 选择
- 勾选
Abort the build if it's stuck
,设置超时时间 - 勾选
Add timestamps to the Console Output
,在日志中添加时间戳 - 点击应用
6. 配置Jenkins任务构建
点击增加构建步骤
执行gradle命令,Invoke Gradle Script
选中
Invoke Gradle
选择
Gradle Version
,选项为之前设置全局工具中的Gradle- 点击
Tasks
最右边的倒三角,输入需要执行gradle脚本的命令。若要执行gradle bulid
,则只需输入buuild
即可,其他同理。
配置发送jar包及在目标服务器执行shell脚本
选择
name
,配置目标服务器,为之前4.3.4 Jenkins服务配置ssh配置的服务器输入
source files
,需要上传到目标服务器的文件。根目录为工作空间输入
Remote directory
,本项目上传到,目标服务器路径,根目录为之前配置ssh的目录输入
Exec command
,输入shell命令,可在目标服务器运行,进入目录为当前用户目录~
start8085.sh
脚本如下# 显示当前目录 pwd # javahome目录 JAVA_HOME=/home/crluser/java/jdk1.8.0_131 # bin设置 PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH: # 使环境有效 export JAVA_HOME PATH CLASSPATH # 获取上次启动8085端口的pid name=$(/usr/sbin/lsof -i:8085|tail -1|awk '"$1"!=""{print $2}') if [ -z $name ] then echo "No process can be used to killed!" else # 杀死被占用的8085端口 kill -9 $name echo "Process name=$name kill!" fi # 启动war包,nohup &:挂起,--server.port=8085:修改启动端口为8085,1>xqx-user.out 2>&1:当次启动项目控制台日志写入xqx-user.out文件 nohup java -jar gradle4springboot/xqx-user/build/libs/xqx-user-0.0.1-SNAPSHOT.war --server.port=8085 1>xqx-user.out 2>&1 &
配置完毕点击
应用
7. 配置失败发送email
进入构建后操作,点击
添加构建后操作步骤
选择E-mail Notifycation
填写
Recipients
,输入收件人,以空格分隔的收件人地址列表点击保存
8. 等待任务被触发执行
四、其他
eclipse的Jenkins 插件:Jenkins Editor
五、Jenkins异常问题汇总:
1. 部署到远程容器Tomcat返回403错误
问题描述:
Jenkins部署到远程容器Tomcat中时报错,403无权限。
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://9.186.54.217:8080/manager/text/list
解决方法:
step 1 修改tomcat/conf/tomcat-users.xml,在节点下配置tomcat用户,启用“manager-script”角色;
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-script"/>
step 2 修改tomcat/webapps/manager/META-INF/context.xml,注释掉节点下节点
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
step 3 修改jenkins配置,指定tomcat管理用户、密码,重新构建即可成功。
page 2
2. jenkins配置邮件报错
问题描述:
Jenkins系统管理–>系统设置,发送测试邮件时报错
501 mail from address must be same as authorization user
解决方法:
Jenkins Location配置的jenkins url下面的系统管理员邮件地址没写,填写与用户名一致就可以了如:(root <515789026@qq.com>)。
3. git returned status code 128
问题描述:
Jenkins创建项目时,添加Git源码管理出现
501 mail from address must be same as authorization user
解决方法:
确定jenkins的运行用户,若你运行jenkins的用户注销则需重启jenkins服务
试试ssh到github - 如果失败了,那么你需要将正确的密钥添加到/.ssh