Jenkins构建springboot+gradle+github+webhook

Jenkins 使用说明

一、基本信息

Jenkins 是一个可扩展的持续集成引擎。
主要用于:
-  持续、自动地构建/测试软件项目。
-  监控一些定时执行的任务。

官网地址https://jenkins.io/

Jenkins教程地址:官网中文参考w3cschool

参考Jenkins配置maven构建地址Jenkins Github Hook搭建

Jenkins下载地址

Jenkins触发方式

  • 类cron表达式 H * * * * (Min H d Mon W)
  • token触发(触发远程构建)
  • webhook触发(轮询 SCM)
  • 前后项目构建完成触发
  • 点击构建触发

使用步骤

  1. 下载Jenkins
  2. 初始化Jenkins
  3. 下载Jenkins插件
  4. 配置Jenkins系统设置
  5. 配置Jenkins全局工具配置
  6. 创建项目
    • git地址(源码管理)
    • 触发时间
    • 构建命令(gradle build)
    • 编译完成目标应用服务器执行shell(copy war包,停止、启动容器等操作)
  7. 等待触发

二、配置Jenkins

本次使用配置如下

项目版本
Jenkins2.141
应用服务器JDK1.8.0_131
Jenkins服务器JDK1.8.0_171
springboot2.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 &

    说明:

    1. jenkins.war为可执行war包自带Jetty服务器,直接启动即可。

    2. 修改端口通过参数httpPort=8084,设置http侦听端口。 -1表示禁用,默认为8080

    3. 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服务器地址和管理员邮件(发送邮件方)

image-20180911153319488

  • 设置发件人信息,安装不同邮箱有不同设置。可自行百度。配置完成点击Test configuration测试

image-20180911153458937

  • 测试连接成功,配置完毕,点击应用
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)服务器免密认证。可填写多个目标服务器,填写完毕点击测试。成功即可。

image-20180911153735092

  • Name:设置目标服务器名称,以便以后配置选择使用;
  • Hostname:目标服务器地址;
  • Username:目标服务器用户名;
  • Remote Directory:Jenkins在目标服务器的根目录,该目录必须已存在且该用户有所有权限。

  • 配置完毕点击应用
4.3 Github WebHok配置

用于创建项目的webhook配置,需Jenkins服务为在线环境,否则Github不能访问到Jenkins接口。

4.3.1 Github配置
  1. 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。一旦丢失不可找回。

img

  1. Github配置webhook

进入GitHub上指定的项目 –> setting –> WebHooks –> add webhook –> 输入刚刚部署jenkins的服务器的地址,如:http://12.232.121.121:8084/github-webhook–>点击Add webhook

img

4.3.2 Jenkins配置

Jenkins主页–>系统管理 –> 系统设置 –> GitHub –> GitHub Sever–>Add GitHub Sever

img

API URL:默认:https://api.github.com即可

Credentials:点击add,如下图。配置完毕点击Add。

img

设置完成后,点击TestConnection,提示Credentials verified for user UUserName, rate limit: xxx,则表明有效。

  • 配置完毕,点击应用

5. 设置全局工具

Jenkines首页–>系统管理–>全局工具配置 jdk路径,

image-20180906103530502

配置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

image-20180906103625676

三、使用Jenkins构建项目

在此构建一个Github、Webhook、SpringBoot、Gradle的可持续化部署的项目gradle4springboot

使用Gradle管理项目依赖、测试

使用Github进行源码版本管理

使用Github Webhook触发任务的构建

使用SpringBoot作为项目框架

使用Email发送执行任务失败

使用ssh发送jar包

使用shell脚本进行项目部署,停止、部署、启动

?使用构建失败回滚上一版本

1. 配置任务名及形式,创建一个新的任务

Jenkins主页–>新建任务–>输入任务名称gradle4springboot–>选择构建自由风格的软件项目—>点击确定

image-20180912101340870

2. 配置任务描述及项目地址

进入配置页面第一项即是,完描述点击应用。

image-20180912102108286

3. 配置源码管理(SCM)

配置源码管理,Jenkins会从此处获取源码,并且提交每次任务的执行结果。

image-20180912102435895

  1. 选中Git

  2. 添加:Repository URL,用于git clone命令

  3. 添加:Credentials,github用户名和本机私钥,点击Add按钮

    • 选则类型SSH Username with private key
    • 输入Username该项目github具有编辑权限的用户名
    • 输入PriateKey是Jenkins服务器的私钥,查看命令cat ~/.ssh/id_rsa
    • 输入描述,必要,用于区分其他凭据
    • 点击添加
  4. 填写Branch Specifier (blank for 'any'),需要clone的分支,如:refs/heads/master、refs/heads/dev1

  5. 点击应用

4. 配置构建触发器

配置任务运行的条件

image-20180912104034092

  1. 勾选触发远程构建,用于Http Get形式触发,如:http://localhost:8084/job/gradle4springboot/build?token=passw0rd
  2. 勾选轮询SCM,并且日程表不填写任何东西。用于Github Webhook。
  3. 点击应用

5. 配置构建环境

image-20180912105047151

image-20180912105121378

  1. 勾选Use secret text(s) or file(s)
    • 选择Specific credentials
    • Add按钮旁边选择,之前配置的github webhook的内容,4.3.2
  2. 勾选Abort the build if it's stuck,设置超时时间
  3. 勾选Add timestamps to the Console Output,在日志中添加时间戳
  4. 点击应用

6. 配置Jenkins任务构建

点击增加构建步骤

  1. 执行gradle命令,Invoke Gradle Script

    image-20180912112659435

    • 选中Invoke Gradle

    • 选择Gradle Version,选项为之前设置全局工具中的Gradle

    • 点击Tasks最右边的倒三角,输入需要执行gradle脚本的命令。若要执行gradle bulid,则只需输入buuild即可,其他同理。
  2. 配置发送jar包及在目标服务器执行shell脚本

image-20180912154234151

  • 选择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

image-20180912154952583

  • 进入构建后操作,点击添加构建后操作步骤选择E-mail Notifycation

    image-20180912155117724

  • 填写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管理用户、密码,重新构建即可成功。

image-20180905160555112

page 2

image-20180905160525650

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值