持续集成环境搭建(4)Jenkins搭建和使用

概述

环境准备

Jenkins安装

  1. 添加tomcat用户
    [root@localhost ~]# useradd tomcat
    [root@localhost ~]# passwd tomcat
  2. 解压tomcat安装包
    [root@localhost ~]# tar -zxvf apache-tomcat-8.5.37.tar.gz -C /usr/local/
  3. 修改tomcat文件的所有权为tomcat用户
    [root@localhost local]# chown -R tomcat:tomcat apache-tomcat-8.5.37/
  4. 把下载好的jenkins.war放到tomat/webapps目录下
    [root@localhost ~]# mv jenkins.war /usr/local/apache-tomcat-8.5.37/webapps/
  5. 修改jenkins.war的所有权为tomcat用户
    [root@localhost ~]# cd /usr/local/apache-tomcat-8.5.37/webapps/
    [root@localhost webapps]# chown tomcat:tomcat jenkins.war
  6. 切换为tomcat用户,启动tomcat
    [root@localhost webapps]# su tomcat
    [tomcat@localhost webapps]$ ../bin/startup.sh
  7. 开放防火墙端口8080**
    [tomcat@localhost webapps]$ su root
    [root@localhost ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
    [root@localhost ~]# sudo systemctl reload firewalld
  8. 发现端口被占用
at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:309)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:492)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:995)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    ... 12 more
Caused by: java.net.BindException: 地址已在使用
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:219)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1087)
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:265)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)
    at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:68)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:993)
    ... 13 more
  1. 查看8080端口占用的进程
    [root@localhost webapps]# ss -lnp|grep 8080
tcp    LISTEN     0      1024   127.0.0.1:8080                  *:*                   users:(("bundle",pid=8027,fd=22),("bundle",pid=8025,fd=22),("bundle",pid=8022,fd=22),("bundle",pid=7675,fd=22))
  1. 查看进程详情,可发现是由于前面安装GitLab引起
    [root@localhost webapps]# ps -ef | grep 8027
git        8027   7675  0 22:31 ?        00:00:04 unicorn worker[2] -D -E production -c /var/opt/gitlab/gitlab-rails/etc/unicorn.rb /opt/gitlab/embedded/service/gitlab-rails/config.ru
  1. 修改tomcat配置文件,把http端口改为9999
    [root@localhost webapps]# vi ../conf/server.xml
<Connector port="9999" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  1. 开放防火墙端口9999
    [root@localhost ~]# firewall-cmd --zone=public --add-port=9999/tcp --permanent
    [root@localhost ~]# sudo systemctl reload firewalld
  2. 打开Jenkins
    http://192.168.1.177:9999/jenkins

Jenkins初始化

  1. 首次打开jenkins提示输入初始化密码
    首次打开jenkins
  2. 按步骤,查看jenkins初始化密码
    [root@localhost webapps]# cat /root/.jenkins/secrets/initialAdminPassword
    b31e848496224e409c120f15a03fbc07
  3. 可看到jenkins提示离线状态,这种情况是无法安装插件,是因为插件地址为https缘故
    离线
  4. 进入下面链接,修改插件安装路径,把https改为http
    http://192.168.1.177:9999/jenkins/pluginManager/advanced
    把https改成http
  5. 重启tomcat
    [root@localhost webapps]# ../bin/shutdown.sh
    [root@localhost webapps]# ../bin/startup.sh
  6. 重新进入jenkins,输入初始化密码后,进入选择推荐安装插件
    选择推荐安装插件
  7. 等待插件安装
    等待安装插件
  8. 创建管理员账户,下一步
  9. 点击Save & Finish
  10. 点击开始使用
  11. 重启tomcat

Jenkins配置

首次登录后

基础插件安装

系统管理-》插件管理-》Available
在Filter中输入需要安装的插件名称

安装maven integration插件
安装maven插件

安装提示

安装sonarqube scaner插件
安装sonarqube scaner插件

安装publish over ssh插件
安装publish over ssh插件

安装状态
安装状态

基础配置

系统管理-》全局工具配置

配置JDK
配置JDK

配置maven

配置maven

配置完成记得点击Save

通知邮件配置

系统管理-》系统设置

邮件通知配置
邮件通知配置

注:需要和管理员邮箱一致,如下,否则,测试发送邮件将会失败
管理员邮箱配置

与SonarQube整合配置

系统管理-》系统设置

SonarQube配置
SonarQube配置

Server authentication token的获取:
进入SonarQube的用户管理
点击其中一个用户的tokens列

系统管理-》全局工具配置

添加一个SonarQube Scaner
添加一个SonarQube Scaner

与GitLab整合配置

创建公钥和私钥
[tomcat@localhost apache-tomcat-8.5.37]$ ssh-keygen -t rsa

Enter file in which to save the key (/home/tomcat/.ssh/id_rsa): 
Created directory '/home/tomcat/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/tomcat/.ssh/id_rsa.
Your public key has been saved in /home/tomcat/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wzu+V1AU+PfNDUa9PtXHP90trM9W72lvj7Zmyq1nzjw tomcat@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|           oo. . |
|          . . . .|
|           o . .o|
|       .  . . +.=|
|        S  . +.+X|
|         o  . o+@|
|        o  . . o+|
|       . ....=Eo+|
|        oo  +%@**|
+----[SHA256]-----+

私钥放置于Jenkins
[tomcat@localhost apache-tomcat-8.5.37]$ more ~/.ssh/id_rsa

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEArytKZhoFFIEfRZcLnGZFmDwu6mwQo3uPxcNLqnDivaahOJA0
e70Cma7qAPXqvGvAS35A1z4HYE+kVoDIECRTMoFxRyz2+FniN6rNkTpT75uUdxHP
KuvtzIIs0KexXCg3etPeIsn4Re3xQA9MRWHsFbSdx0TufZTE/ajF/htOwboKANM9
l4Fx/HzTGSBeys2tP5MIjWPFNI4y5CqPUw8tKg+7i/tepKjZcGYF+4XlVY0OX7bL
Nlq49rTLc6H+wMzg/1g1ejFtc+CRa9mOecYJrEn1LVFzIE7Hp3mb3feEETY7jqwS
vLHykXT4g7bVUDZHBulepwFVL2dicHLCXpAt4wIDAQABAoIBAQCV7fnKFm9Os44u
pC/999ONj8WgREqhgzr1zEjRY7nPFfZcUaF6X7cAD6Semd4G1DtM4o1hLehmWQSS
Pbv/hPfo/L4Wa7gfrd9gQkOdEE2Tgpi6qXWmiTWKm8j79uxpssp5ySoSoMhuIlEh
wXZI1J2bnnKFgsyWlGVfr7t32au5R7T9UmIvrgQQ+uxS6OapFST34Gfl1dHZaZ7O
mW+u5UZqcsaDLZylE3+fr10gLMp7M58EbMoP6yt6s3yJU6CydogN0RWHe5c7cFy+
QYi8vg6yE+iahxI7f4Wk7SJb4TKgNBi6bPAYFRJcdDYw0fFAWJmN4XGKHVQu1av2
tSebKLGBAoGBAOiAGND0g0rH3qpHp+km/6luhmkvst0pREG+DwFlnqvtInpIly2x
yMthdZh0ZnSWruGF4NYj286VdkuzzO9DakpD3J9kQcp1Xh0BjM+sPRNzYXaPr+5J
BnIoHq0V29JOLjv3PoEqcPyJIPcxW6xvecKOQEh2yQTAL8Fx2Wz2202hAoGBAMDf
wgL3h/Y7VMb4yVAuNzD3QpE58JTgo2ZkHCDOaR1bTDtP80Z34+BL7xnEO2d410hs
zJJtgDSNAZqERjuTS3K4/rAkaED6Xhb9+RGUSJHRm+4BlotM9wn3Dy1trwdc07GA
yLtqmTHm9uISzOp0DjWZHQuoPjySekZGMwo2BiUDAoGANuj582+sCl9F8UVXHLN/
Mg7OY81GGwGCA1zVwmiznrs0p1i5i6svVwk/crAa+nIT/2NVBH4XjaSy+ZIPVnq/
gaahVmuhNiWeAo+5J9rv2cYoQI4S6N4KTa+3/vzom7SnKrZr5qmVYa8pP/hCRGlX
gmGCQRr8wsh4/uDajueGR8ECgYBEIIVaIO8QhaKLaaNKRBjQnfYQcCPPoo11BFV/
LQmqCe6iYLowoPaH6qp5Mnw9L0zz0yJrcmw/o7L2TlS0hHG5AylLNIDyurzzaCBL
GlKL1zs51avEZpo4FeFxjXWupxZLc47zzFJycv+vmS5yfi3qtruwu2vIX4D7Q56R
s8V12wKBgBoR33GjTc+b1zmZYnqlcMdgdo0LQPUcFgENoqLGlm2UCSIVEHuTJgh1
z4C6Ooz1H3uWfoST0boQRX0GdwJqVLJSlPSBG10MvH4khHEHfDrQMCtVCeG/qfBF
cKxbP2blB86nofkJsSWb/Bu667bCQv2uuSIGE6utBMyda2Ipi1XQ
-----END RSA PRIVATE KEY-----

凭据-》系统-》全局凭据-》添加凭据
添加凭据

公钥放置于GitLab
[tomcat@localhost apache-tomcat-8.5.37]$ more ~/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvK0pmGgUUgR9FlwucZkWYPC7qbBCje4/Fw0uqcOK9pqE4kDR7vQKZruoA9eq8a8BLfkDXPgdgT6RWgMgQJFMyg
XFHLPb4WeI3qs2ROlPvm5R3Ec8q6+3MgizQp7FcKDd6094iyfhF7fFAD0xFYewVtJ3HRO59lMT9qMX+G07BugoA0z2XgXH8fNMZIF7Kza0/kwiNY8U0jjLkKo9TDy
0qD7uL+16kqNlwZgX7heVVjQ5ftss2Wrj2tMtzof7AzOD/WDV6MW1z4JFr2Y55xgmsSfUtUXMgTseneZvd94QRNjuOrBK8sfKRdPiDttVQNkcG6V6nAVUvZ2JwcsJ
ekC3j tomcat@localhost.localdomain
gitlab设置公钥

构建项目

  1. 新建一个任务,选择构建一个maven项目!
    新建任务
  2. 点击OK后,填写项目的General信息
    General
  3. 选择Source Code Management, 选择Git
    Source Code Management

输入项目的git地址和选择相应的私钥。

如无红色提示,则说明git能访问,配置正确。
Source Code Management
  1. Build Triggers & Build Environment 去掉所有勾选,该例子暂不用
    Build Triggers & Build Environment
  2. 配置构建命令和构建后步骤
    Build&Post Steps
cp target/*.jar /home/tomcat/jenkins
cd /home/tomcat/jenkins
BUILD_ID= java -jar castle-boot-0.0.1-SNAPSHOT.jar > castle.log 2>&1 &
  1. 配置完成后,点击Save,保存并返回到构建项目页面

  2. 选择立即构建,在Build History会出现一个构建的进程#1
    构建
  3. 点击进入#1,查看控制台输出
    控制台输出
  4. 等待构建完成
    构建完成提示
  5. 查看进程是否启动

[tomcat@localhost jenkins]$ ps aux | grep castle
tomcat   109213  128  7.8 3259248 226780 pts/0  Sl   08:27   0:10 java -jar castle-boot-0.0.1-SNAPSHOT.jar
tomcat   109258  0.0  0.0 112724   988 pts/0    S+   08:27   0:00 grep --color=auto castle

提交到SonarQube进行代码质量检查

  1. 配置项目的Pre Steps
    Pre Steps
sonar.projectKey=castle-boot
sonar.projectName=CastleBoot
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.modules=java-module

java-module.sonar.projectName=MavenDemo
java-module.sonar.language=java
java-module.sonar.sources=src
java-module.sonar.projectBaseDir=.
java-module.sonar.java.binaries=target/
  1. 再次构建,构建完成后,访问SonarQube,会多了一个CastleBoot项目
    SonarQube

代码提交到GitLab上,自动触发构建

  1. 安装gitlab插件
    安装gitlab插件
  2. 进入maven-demo项目的配置
    BuildTriggers
    BuildTriggers
  3. 到GitLab上进行相应的配置,使用管理员账户root,进行以下设置
    GitLab系统配置
  4. 进入对应项目的配置
    GitLab项目配置

URL和Token可在jenkins的项目配置中找到
URL
Token
  1. 填写完URL和Token后,点击 add webhook,可看到配置已添加成功
    webhook
  2. 修改代码,并提交,测试jenkins是否会自动构建

创建Pipeline

  1. 创建任务,选择流水线
    流水线
  2. 安装Blue Ocean和Blue Ocean Pipeline Editor
    插件安装
  3. 打开BlueOcean
  4. 点击右上角的创建流水线
    BlueOcean
  5. 选择Git,输入git的地址
    流水线创建
  6. 在GitLab上添加该公钥
    image.png
  7. 跳转到Blue Ocean Pipeline Editor
    Blue Ocean Pipeline Editor
  8. 点击 + ,搜索Git,输入Url和Branch,然后点击保存
    Blue Ocean Pipeline Editor
  9. 选择保存且运行
    Save Pipeline
  10. 首次运行由于超时原因可能会出错,如出错,可点击重运行
    image.png
  11. 选择能正确运行的任务,点击编辑
  12. 修改流程名字
  1. 添加stage:maven build,添加step:选择Shell Script
  2. 添加stage: deploy
cp target/*.jar /home/tomcat/jenkins
cd /home/tomcat/jenkins
nohup java -jar castle-boot-0.0.1-SNAPSHOT.jar > castle.log 2>&1 &
  1. 添加stage: nothing(测试并行Stage)
  1. 保存后,选择 Save & run
    image.png
  2. 跳转到构建列表
    image.png
  3. 选择构建中的任务,查看详情
  4. 构建完毕
  5. 该构建,会在项目的git仓库增加Jenkinsfile文件,可以发现,该文件内容就是Pipeline的脚本
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容