主要操作流程是:程序员push代码到Gitee仓库,然后Jenkins从Gitee上自动pull仓库代码到服务器,最后进行编译打包部署到tomcat。
服务器版本:Centos7.3
软件 | 版本 |
---|---|
Java | 1.8.0_201 |
Jenkins | 2.164.1-1.1 |
Tomcat | 8.x及以上 |
Maven | 3.6.0 |
git | 1.8.3.1 |
官网:https://jenkins.io/
我们选择左边的长期支持的稳定版
以下的版本任选其一,我服务器上面选择的是 jenkins-2.164.1-1.1.noarch.rpm
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.164.1-1.1.noarch.rpm
当前工作目录下,直接输入wget命令下载
下载好后,导入rpm到系统中
rpm -ivh jenkins-2.164.1-1.1.noarch.rpm
然后使用yum命令安装
yum install -y jenkins
Jenkins安装完成查看路径:
rpm -ql jenkins
下面这是jenkins自身war包的位置
jenkins相关目录释义:
(1) /usr/lib/jenkins/:jenkins安装目录,war包会放在这里。
(2) /etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置。
(3) /var/lib/jenkins/:默认的JENKINS_HOME。
(4) /var/log/jenkins/jenkins.log:jenkins日志文件
到目前位置,jenkins就有了两种启动方式
第一种:service启动
Jenkins的启动和关闭等命令:
service jenkins start | stop | restart
第二种:jar启动
这里带了端口参数启动
java -jar /usr/lib/jenkins/jenkins.war --httpPort=8888
由于上面这个命令只能前台启动,关闭窗口之后就不能使用了,所以在这里我追加一个后台启动,并重定向输出日志的方法。将日志输出到当前工作目录下,你可以指定输出到什么位置/usr/log/log_jenkins.out
nohup java -jar /usr/lib/jenkins/jenkins.war --httpPort=8888 > log_jenkins.out &
可以修改配置文件端口号
vim /etc/sysconfig/jenkins
官网:https://tomcat.apache.org/
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.17/bin/apache-tomcat-9.0.17.tar.gz
复制压缩包到/usr/local下
cp apache-tomcat-9.0.17.tar.gz /usr/local
解压它
tar -zxvf apache-tomcat-9.0.17.tar.gz
修改名称
mv apache-tomcat-9.0.17.tar.gz tomcat9
7.x
修改conf/tomcat-users.xml
添加以下内容(username,password自行修改)
8.x及以上
除了上面的配置之外,还需要额外的在conf/Catalina/localhost目录下,新建manager.xml文件
vim manager.xml
添加以下代码(不要修改)
随后打开http://xxx.xxx.xxx.xxx:8080,点击右边的 Server Status输入之前新增的用户名和密码就可以进入
官网:http://maven.apache.org/download.cgi
wget下载
wget http://mirrors.shu.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
复制压缩包到/usr/local下
cp apache-maven-3.6.0-bin.tar.gz /usr/local
解压它
tar -zxvf apache-maven-3.6.0-bin.tar.gz
修改名称
mv apache-maven-3.6.0-bin.tar.gz maven3.6.0
添加环境变量
vim /etc/profile
export MAVEN_HOME=/usr/local/maven3.6.0
直接yum安装
yum install git
1.生成ssh key(填写你Gitee注册的邮箱)
ssh-keygen -t rsa -C “[email protected]”
2.按照提示完成三次回车,即可生成 ssh key
3.获取公钥
cat ~/.ssh/id_rsa.pub
4.打开Gitee上的仓储,打开 管理 - 添加公钥 ,将刚刚控制台打印的公钥复制进去
启动两种方式交给你们了,任选一种,记住你的端口号很重要!端口号很重要!端口号很重要!
第一次启动,页面要求你输入密码,页面红色方框有内置的密码,使用cat + 方框内容,查看密码,复制粘贴就可以了
选择插件的时候选择左边
最后注册账户和密码
过程如下:
=>获取密码=>输入密码=>继续
=>安装插件=>retry几次可安装成功
=>注册账号 (记录好账号密码)
=>开始使用Jenkins
我们需要安装Generic Webhook Trigger、Deploy to container Plugin、Git plugin、Gitee及Maven Integration plugin这几个插件
系统管理 -> 插件管理
没有安装的选择 可选插件 搜索安装,安装完成后需要重启Jenkins(安装插件之后有按钮可选,不需要去服务器上输入命令重启)
回到首页,新建任务
随便命名,建议选择maven项目,不过,你也可以选择自由风格软件项目
源码管理
Repository URL:项目clone的地址,建议ssh
Credentials:需要配置,见下图
Branch Specifier (blank for ‘any’) :*/master(表示从主支拉取)
类型选择ssh username with private key,username输入git,Private Key填写Jenkins主机的root用户私钥(/root/.ssh/id_rsa),root是gitee上配置的ssh key的用户。
构建触发器
在构建触发器下勾选Generic Webhook Trigger,给抓出来的数据起个变量名ref,抓取内容为$.ref(看码云的文档)
在Post content parameters后点击增加,variable填写ref,Expression填写$.ref,然后点选下边的JSONPath
Optional filter
我们只需要获取POST数据,header和request不用理。接下来也很关键,定义过滤出来什么字串才触发这个任务。所以使用正则匹配,text为匹配出什么结果就触发这个任务,于是我们填入刚才抓取临时存放的变量 $ref
,注意这里不是原始数据的$.ref
。
^(refs/heads/master)$
添加如下命令
clean package -Dmaven.test.skip=true
构建后操作
点击增加构建后操作,选择deploy war/ear to a container
WAR/EAR files填写**/*.war
(自动添加jenkins当前项目配置下的war包
),Context path 填写打war的名称(填写什么名字,最后自动化部署打包就是什么名字
),container选择 tomcat 8.x
(根据自己版本选择,我的是9.0,选择8.x依旧有效
),点击Credentials后add,username和password根据tomcat中配置的填写即可,我这里都是tomcat。
Tomcat URL填写tomcat的IP地址即可http://xxx.xxx.xxx.xxx:8080
添加一个webhooks,URL格式为 http://Jenkins中的用户@Jenkis地址/generic-webhook-trigger/invoke (这里的地址可以看上图中,我标注的“此处日后必有大用
”)
http://admin:[email protected]:8888/generic-webhook-trigger/invoke
添加之后会自动的向你的jenkins发出一个post请求,正确数据如下
{"status":"ok","data":{"triggerResults":{"Storage":{"id":23,"regexpFilterExpression":"^(refs/heads/master)$","regexpFilterText":"refs/heads/master","resolvedVariables":{"ref":"refs/heads/master"},"triggered":true,"url":"queue/item/23/"}}}}
返回这个,表示用户或密码不正确
{"status":"ok","data":{"triggerResults":{"ANY":"Did not find any jobs to trigger! The user invoking /generic-webhook-trigger/invoke must have read permission to any jobs that should be triggered. You may try adding http://user:passw@url... or configuring and passing an authentication token like ...trigger/invoke?oken=TOKENHERE"}}}
选择提交一个test.txt
马上就取gitee上面pull代码进行编译了。#24表示第24次编译构建,这是我今天试验成功的,所以次数有点多,不要介意哈
为什么我们使用Gitee的仓库,却不使用Gitee webhook这个插件自带的工具呢?这个问题我也思考了很久,按照上面的提示,使用显示的URL建立webhook,每次返回状态是200,但是总是404的页面信息。我去看了插件的开发者的git(https://gitee.com/oschina/Gitee-Jenkins-Plugin),操作说明并没有使用这个选项,所以我就换咯。
这是鄙人第一次写博客,之前所有的总结都是以网页的形式保存,既然看到了最后不如给点意见吧!!谢谢各位~
借鉴:
https://blog.51cto.com/13339566/2177550
https://gitee.com/help/articles/4193#article-header8